Database 23c

Oracle Database 23c는 새로운 마이크로서비스, 그래프, 문서 및 관계형 애플리케이션을 구축하려는 개발자를 위해 가장 완전하고 간단한 컨버지드 데이터베이스를 제공합니다.

Oracle Database 23c를 빠르게 시작할 수 있도록 매주 새로운 기능과 예제를 공유합니다. 본 페이지를 저장해 두고 매주 새로운 주요 기능들을 확인해 보세요.

주요 특징

연말연시를 맞아

2023년을 마무리하고, 동시에 작년 한 해 동안 우리가 강조했던 Oracle Database 23c의 새로운 기능들을 되짚어보려고 합니다. 아직 최신 Oracle Database 릴리스를 체험해 보지 않았다면(특히 본인이 개발자라면) 여기에서 또는 oracle.com/database/free를 통해 다양한 옵션들을 확인해 보세요.

블록체인 테이블

Oracle Database 19c 릴리스부터 제공되는 블록체인 테이블과 불변 테이블은 암호화 방식의 보안 체계를 사용하여 외부 해커, 악의적이거나 침입당한 내부자 등으로 인한 데이터의 변조 및 삭제를 방지합니다. 관련 기능으로는 DBA를 비롯한 모든 사용자들에 의한 업데이트 또는 삭제를 불허하는 삽입 전용 제한, 암호화 해시 체인을 사용하는 검증, 서명된 테이블 다이제스트를 사용하는 모든 종류의 대규모 롤백 감지, 최종 사용자별 개인 키를 사용하는 삽입된 행 관련 서명 등이 있습니다. Oracle Database 23c에는 Oracle GoldenGate를 통한 논리적 복제 및 Active Data Guard를 통한 롤링 업그레이드 지원, 블록체인 테이블 관련 분산 트랜잭션 지원, 만료된 행들의 파티션 기반 대량 삭제, 삽입/커밋 관련 성능 최적화 등의 다양한 개선 사항들이 담겨 있습니다.

이번 릴리스에는 암호화 해시 체이닝에 영향을 주지 않고 열을 추가/삭제하는 기능, 사용자별 체인 및 필터링된 행에 대한 테이블 다이제스트, 위임 서명 기능, 데이터베이스 부서(countersigning) 기능 등도 추가되었습니다. 또한 블록체인 기록 테이블을 사용하도록 정의된 Flashback 아카이브를 통해 비블록체인 테이블의 기록 변경 사항을 감사할 수 있도록 만듦으로써 암호화 보안 데이터 관리 기능을 일반 테이블에까지 확대 적용하였습니다.

내장된 감사 추적 또는 저널링 관련 사용 사례에 적합한 Oracle Database의 블록체인 기능들은 재무 원장, 결제 내역, 규정 준수 현황 추적, 법적 로그, 나아가 데이터의 변조 또는 삭제가 심각한 법적 또는 재무적 문제나 평판의 하락을 초래할 수 있는 자산과 관련된 모든 데이터 등에 사용할 수 있습니다.



Boolean 데이터 타입

이제 Oracle Database가 ISO SQL 표준 호환 Boolean 데이터 타입을 지원합니다. 고객은 이를 통해 테이블에 True 및 False 값을 저장하고 SQL 문에 Boolean 표현식을 사용할 수 있습니다. Boolean 데이터 타입은 Yes 및 No 값의 저장을 표준화하고 Oracle Database로의 마이그레이션을 손쉽게 해 줍니다.



데이터베이스 드라이버 비동기 프로그래밍 및 파이프라이닝

Oracle Database 23c에서는 Pipelining 변수가 .NET, Java, C/C++ 애플리케이션이 서버의 응답을 기다릴 필요 없이 여러 요청을 데이터베이스에 전송할 수 있게 해 줍니다. Oracle Database는 이와 같은 요청을 한 번에 하나씩 대기열에 넣어 처리하기 때문에 클라이언트 애플리케이션이 요청 완료 알림이 올 때까지 계속해서 작업을 이어갈 수 있습니다. 이와 같은 개선 사항은 최종 사용자 경험 향상, 데이터 기반 애플리케이션 응답성 개선, 엔드투엔드 확장성, 성능 병목 현상 방지, 서버 및 클라이언트 측에서의 효율적인 리소스 활용으로 이어집니다.

클라이언트의 요청에 대한 즉각적인 응답을 얻기 위해 Oracle Database Pipelining은 비동기 또는 반응적 API in .NET, Java, C/C++ 드라이버를 필요로 합니다. 이와 같은 매커니즘은 Database Pipelining의 유무와 관계없이 Oracle Database에서 사용할 수 있습니다.

Java의 경우 Oracle Database 23c가 Java Database Connectivity(JDBC), Universal Connection Pool(UCP), Oracle R2DBC Driver 내의 Reactive Extensions을 제공합니다. 또한 드라이버(Project Loom) 내 Java 가상 스레드와 Reactor, RxJava, Akka Streams, Vert.x 등 Reactive Streams 라이브러리도 지원합니다.



DB_DEVELOPER_ROLE

Oracle Database 23c에는 새로운 역할인 DB_DEVELOPER_ROLE이 포함되어 있습니다. 이 역할은 애플리케이션 개발자들에게 Oracle Databases에서 애플리케이션을 설계, 구현, 디버깅, 배포하는 데 필요한 모든 권한을 제공합니다. 이 역할을 사용하면 관리자들은 애플리케이션 개발에 어떤 권한이 필요한지 더 이상 추측할 필요가 없습니다.





UPDATE 및 DELETE 문 직접 조인

이제 Oracle Database에서 FROM 절을 사용하여 UPDATE 및 DELETE 문의 대상 테이블을 다른 테이블에 조인할 수 있습니다. 조인 대상인 다른 테이블의 경우 변경 대상이 되거나 새 값의 소스가 되는 행을 제한할 수 있습니다. 직접 조인을 사용하여 데이터 변경 및 삭제용 SQL을 보다 간단히 작성할 수 있습니다.



Fast Ingest 향상

파티셔닝, 압축 테이블, 직접 쓰기를 사용한 빠른 플러시, 직접 인메모리 열 저장 파퓰레이션 지원 등 Memoptimized Rowstore Fast Ingest에 개선 사항을 추가했습니다. 이와 같은 개선 사항들은 Fast Ingest 변수가 빠른 데이터 수집이 필요한 더 많은 상황에 보다 손쉽게 통합될 수 있게 해 줍니다. 이제 Oracle Database는 빠른 데이터 수집 기능을 필요로 하는 애플리케이션을 보다 효과적으로 지원합니다. 데이터는 동일한 데이터베이스 내에서 수집되고 처리됩니다. 덕분에 전용 로딩 환경의 필요성이 줄어들고, 그 결과 복잡성과 데이터 중복성이 줄어듭니다.



Grafana 관찰 가능성

Oracle은 Oracle Database용 새로운 Observability Exporter를 통해 클라우드 네이티브 및 Kubernetes 지원을 지속적으로 확장하고 있습니다. 이를 통해 고객은 업계 표준 Prometheus 형식으로 데이터베이스 및 애플리케이션 측정지표를 손쉽게 내보낼 수 있고, Grafana 대시보드를 간편하게 생성하여 사용 중인 Oracle Databases 및 애플리케이션의 성능을 모니터링할 수 있습니다.



GROUP BY 열 별칭

이제 열 별칭 또는 SELECT 항목 포지션을 GROUP BY, GROUP BY CUBE, GROUP BY ROLLUP, GROUP BY GROUPING SETS 절에서 사용할 수 있습니다. 또한 HAVING 절이 열 별칭을 지원합니다. 이 새로운 Database 23c 개선 사항들 덕분에 GROUP BY 및 HAVING 절의 작성이 간편해졌고, SQL 쿼리의 읽힘성과 관리 용이성이 훨씬 개선되었으며, 더 나은 SQL 코드 이식성을 제공할 수 있게 되었습니다.



IF [NOT] EXISTS

이제 Oracle Database가 DDL 개체 생성, 수정, 삭제시 IF EXISTS 및 IF NOT EXISTS 구문 수정자를 지원합니다. 해당 수정자들을 통해 지정된 객체가 존재할 때 또는 존재하지 않을 때 오류를 발생시킬지 여부를 제어할 수 있으므로 스크립트 및 애플리케이션 단위의 오류 처리가 간소화됩니다.



INTERVAL 데이터 타입 집계

Oracle Database 23c는 개발자가 INTERVAL 값의 합계 및 평균 값을 손쉽게 계산할 수 있게 해 줍니다. 이 같은 개선 사항을 통해 이제 INTERVAL 데이터 타입을 SUM 및 AVG 집계 및 분석 함수에 전달할 수 있습니다.



JavaScript 저장 프로시저

다국어 엔진(MLE) 모듈 호출 기능은 개발자가 SQL 및 PL/SQL의 모듈에 저장된 JavaScript 함수를 호출할 수 있게 해 줍니다. PL/SQL로 작성된 호출 사양은 JavaScript를 PL/SQL 코드 단위에 연결해 줍니다. 이 기능은 개발자가 PL/SQL 함수가 호출되는 모든 곳에서 JavaScript 함수를 사용할 수 있게 지원합니다.



JSON 이진 데이터 타입

JSON 데이터 타입은 Oracle에 최적화된 이진 JSON 형식으로, OSON이라고도 불립니다. 릴리스 21c 이상의 데이터베이스 및 데이터베이스 클라이언트 내 빠른 쿼리 및 DML 성능을 위해 설계되었습니다.



JSON Relational Duality Views

Oracle Database 23c에 도입된 혁신 기술 JSON Relational Duality는 관계형 및 문서 데이터 모델을 통합하여 두 영역 최고의 장점들을 제공합니다. 개발자는 신뢰할 수 있는 단일 소스를 사용해 관계형 또는 JSON 패러다임으로 애플리케이션을 구축할 수 있고, 두 모델 모두의 장점을 활용할 수도 있습니다. 데이터는 한 번만 홀드되지만 두 접근 방식 모두를 통해 액세스, 작성, 수정될 수 있습니다. 개발자는 ACID 호환 트랜잭션 및 동시성 제어를 통해 이점을 얻을 수 있기 때문에 더 이상 복잡한 객체 관계형 매핑이나 데이터 불일치 문제 중 어느 하나를 감수할 필요가 없습니다.



JSON 스키마

Oracle Database는 스키마 유연성 데이터의 저장 및 처리를 위해 JSON을 지원합니다. Oracle Database 23c에서는 이제 Oracle Database가 JSON 데이터의 구조 및 값을 검증하는 JSON 스키마를 지원합니다. SQL 연산자 IS JSON 역시 JSON 스키마 수용을 위해 개선되었으며, JSON을 검증하고 테이블, 뷰, 타입 등 데이터베이스 객체를 JSON 스키마 문서로 설명하기 위해 다양한 PL/SQL 함수가 추가되었습니다.

기본적으로 JSON 데이터는 스키마리스이기 때문에 유연성이 높습니다. 하지만 JSON 데이터가 특정 구조 및 타입을 보유했는지 확인하고 싶은 경우, 산업 표준 JSON 스키마 검증을 통해 이를 확인할 수 있습니다.

JSON 스키마에 대한 기여
Oracle은 JSON 문서에 대한 주석 추가 및 검증을 지원하는 JSON 기반 선언형 언어 표준화를 위한 오픈 소스 활동인 JSON 스키마에 적극적으로 기여하고 있습니다. 현재 Request for Comments(RFC) 단계에 있습니다.



Kafka API

Oracle Database 23c는 Oracle Database를 통해 Apache Kafka 애플리케이션에 보다 높은 수준의 호환성을 제공합니다. 이 새로운 기능은 Kafka Java 애플리케이션을 Transactional Event Queues(TxEventQ)로 손쉽게 마이그레이션할 수 있게 지원합니다. Kafka Java API는 이제 Oracle Database 서버에 연결될 수 있으며 TxEventQ를 메시징 플랫폼으로 사용할 수 있습니다.

개발자는JDBC Thin 드라이버를 사용해 Kafka를 사용하는 기존 Java 애플리케이션을 Oracle Database로 손쉽게 마이그레이션할 수 있습니다. 또한 Oracle Database 23c 클라이언트측 라이브러리 기능 덕분에 Kafka 애플리케이션은 Kafka 클러스터 대신 Oracle Database에 연결해 TxEventQ의 메시징 플랫폼을 투명하게 사용할 수 있습니다.



잠금 없는 열 값 예약

Lock-Free Reservations은 과도한 업데이트가 발생한 행의 업데이트가 중단되는 상황을 방지하고 동시 트랜잭션을 진행할 수 있도록 만들어 주는 기능입니다. Lock-Free Reservations을 사용하면 행 전체를 잠그는 대신 저장하고자 하는 값을 보관해 둘 수 있습니다. 업데이트의 성공 가능 여부를 확인하고, 트랜잭션 커밋 시간까지 업데이트를 연기할 수 있습니다. Lock-Free Reservations은 사용자 경험 및 트랜잭션 동시성을 향상시켜 줍니다.



MongoDB 호환 API

MongoDB용 Oracle Database API를 통해 개발자는 Oracle의 다중 모델 기능 및 자율 구동 데이터베이스에 대한 액세스를 확보하는 동시에 Oracle Database에 연결된 MongoDB의 도구 및 드라이버를 계속해서 사용할 수 있습니다. MongoDB 워크로드는 Oracle Cloud Infrastructure(OCI)에서 구동 가능합니다. 기존 MongoDB 애플리케이션에 변경이 거의 또는 전혀 필요하지 않은 경우도 있습니다. 연결 문자열만 변경하면 되죠.

MongoDB용 Oracle Database API는 표준 Oracle REST Data Services에 포함됩니다. 또한 Oracle Autonomous Database의 일부로 완전 관리되며 사전 구성됩니다.



운영 속성 그래프

Oracle Database는 속성 그래프 데이터 구조 및 그래프 쿼리를 기본적으로 지원합니다. Oracle Database는 트랜잭션 데이터, JSON, Spatial 및 기타 다양한 데이터 타입별 그래프를 작성할 수 있는 유연성을 갖추었습니다. 이제 개발자들은 기존의 SQL 개발 도구와 프레임워크를 사용하여 SQL 그래프 애플리케이션을 간단히 구축할 수 있게 되었습니다.



집계 유형을 위한 PL/SQL JSON 생성자 지원

PL/SQL JSON 생성자는 대응하는 PL/SQL 집계 유형의 인스턴스를 수용하여, 집계 유형 데이터를 통해 파퓰레이션된 JSON 객체 또는 배열 유형을 반환하도록 개선되었습니다.

PL/SQL JSON_VALUE 연산자 역시 개선되어 반환 절이 연산자가 반환할 인스턴스 유형을 정의하는, 유형 이름을 수용할 수 있게 되었습니다. 집계 데이터 타입을 위한 JSON 생성자 지원은 JSON을 지원하는 PL/SQL 애플리케이션과 언어 사이의 데이터 상호 교환을 간소화해 줍니다.



RETURNING INTO 절

INSERT, UPDATE, DELETE 문을 위한 RETURNING INTO 절이 개선되어 각각의 문에 영향을 받은 신/구 값을 보고합니다. 개발자들은 이를 통해 각 DML 유형에 대한 동일한 로직을 사용하여 사전/사후 문의 실행 값을 얻을 수 있습니다. 신/구 값은 UPDATE 문에 대해서만 유효합니다. INSERT 문은 구 값을 보고하지 않고, DELETE 문은 신 값을 보고하지 않습니다.

SQL 명령 실행의 일부인 INSERT, UPDATE, DELETE 문의 영향을 받은 신/구 값을 구하는 기능은 개발자들에게 이 값들을 읽고 데이터베이스가 수행해야 하는 작업의 양을 줄일 수 있도록 균일한 접근 방식을 제공합니다.



스키마 권한

이제 Oracle Database는 기존의 객체, 시스템 및 관리 권한에 더해 스키마 권한까지 지원합니다. 이 기능은 데이터베이스 객체의 권한 부여 기능을 단순화함으로써 보안을 강화합니다. 이를 통해 최소 권한 원칙을 보다 효과적으로 구현하고, 누가 어떤 기능에 권한을 가져야 하는지를 명확히 알려줍니다.



FROM 절 없이 SELECT 사용하기

이제 FROM 절 없이 SELECT 표현식 전용 쿼리를 실행할 수 있게 되었습니다. 본 신기능은 SQL 코드 이식성 및 개발자들의 사용 편의성을 향상시켜 줄 것입니다.



SQL Macros

SQL 매크로를 생성하여 일반적인 SQL 표현식 및 명령문을 다른 SQL 문에 사용할 수 있는 재사용 가능한 매개변수화된 구성으로 계수화합니다. SQL 매크로는 일반적으로 SELECT 리스트와 WHERE, GROUP BY 및 HAVING 절에서 사용되는 스칼라 표현식일 수 있습니다. SQL 매크로는 계산 및 업무 논리를 캡슐화하는 데 사용하거나 테이블 표현식으로(일반적으로 FROM 절에 사용됨) 사용할 수 있습니다. PL/SQL 생성자와 대조적으로 SQL 매크로는 성능을 개선할 수 있습니다. SQL 매크로는 개발자의 생산성을 높이고, 공동 개발을 간소화하고, 코드 품질을 높여줍니다.



SQL Analysis Report

이번 주에는 개발자가 보다 나은 SQL 문을 작성할 수 있도록 지원하는 손쉬운 기능인 SQL Analysis Report를 살펴보겠습니다. SQL Analysis Report는 SQL 문에 관한 일반적인 문제들을 보고합니다. 특히 SQL 성능 저하를 야기할 수 있는 문제들이 그 대상입니다. DBMS_XPLAN 및 SQL Monitor에서 이용 가능합니다.



SQL Firewall

SQL Firewall을 사용해 이상을 감지하고, SQL 주입 공격을 방지할 수 있습니다. SQL Firewall은 IP 주소, OS 사용자 등 세션 컨텍스트 정보를 포함한 모든 SQL을 검사합니다. 데이터베이스 커널에 내장된 SQL Firewall은 허가되지 않은 SQL을 기록 및 (활성화된 경우) 차단하여, 해당 SQL의 우회를 방지합니다. SQL 허용 목록과 승인 세션 컨텍스트를 적용함으로써 SQL Firewall은 많은 제로 데이 공격을 방지하고 계정 도용 또는 남용의 위험을 낮춥니다.



테이블 값 생성자

이제 Oracle Database SQL 엔진이 다양한 명령문 유형에 대해 VALUES 절을 지원합니다. 덕분에 기존 테이블에 의존하지 않고 새 구문을 사용하여 데이터 행을 지정함으로써 데이터 행을 즉시 구체화할 수 있습니다. Oracle Database 23c는 SELECT, INSERT 및 MERGE 문에 대해 VALUES 절을 지원합니다. 새로운 VALUES 절의 도입으로 개발자는 더 적은 코드 작성으로도 임시 SQL 명령을 만들 수 있고, 적은 노력으로도 가독성을 높일 수 있습니다.



Usage Annotations

Oracle Database 23c는 데이터베이스 객체들에 대한 메타데이터를 저장 및 검색할 수 있는 주석(Annotations) 기능을 제공합니다. 이는 애플리케이션별 비즈니스 로직 또는 사용자 인터페이스의 커스터마이징에 사용할 수 있는 자유 형식 텍스트 필드입니다. 주석은 이름-값 쌍으로, 또는 단순히 이름만으로도 작성 가능합니다. 주석 기능을 통해 모든 애플리케이션에서 같은 방식으로 데이터베이스 객체를 사용할 수 있으므로 앱 개발은 더욱 단순화되고 데이터 품질은 향상됩니다.



Usage Domains

Usage Domains(SQL 또는 Application Usage Domains이라고도 불림)은 경량의 수정자 역할을 하고 애플리케이션에 대해 의도된 데이터 사용을 중앙에서 문서화하는 고급 딕셔너리 객체입니다. Usage Domains은 애플리케이션 수준의 메타 데이터 없이도 데이터 사용을 정의하고, 운영을 표준화하여 체크 제약조건 세트, 디스플레이 속성, 규칙순 및 기타 사용 속성을 요약해 줍니다.

하나의 테이블 내에 포함된 하나 이상의 열에 대한 Usage Domains은 기본 데이터 타입을 수정하지 않으며, 따라서 애플리케이션을 손상시키거나 이식성 문제를 발생시키지 않고도 기존 데이터에 추가될 수 있습니다.