Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle Database 21c의 주요 신기능 완벽 정리

Oracle Database 21c는 온프레미스는 물론 클라우드 인프라 전반에서 Oracle 데이터베이스 서비스를 구동하는 최신 버전입니다. Autonomous Database(ADB), Oracle Exadata Service@Customer, Oracle Exadata 머신 등 다양한 환경에서 활용됩니다.

21c는 새로운 사용 사례 지원, 옵티마이저 성능 자동화, JSON 데이터 및 그래프 모델 지원을 포함합니다. 특히 자동화 기능은 사용자와 개발자 모두의 작업을 한층 수월하게 만들어 줍니다.

또한 광범위한 데이터 모델과 워크로드를 지원하며, 내장된 머신러닝 기능을 통해 별도의 서비스 없이도 고급 분석이 가능합니다. SQL, REST, API 트랜잭션을 모든 유형의 데이터 모델에서 처리할 수 있다는 점도 큰 장점입니다.

21c 아키텍처

Oracle 데이터베이스의 아키텍처는 이전 버전과 유사하게 구성되어 있습니다. Oracle 데이터베이스 인스턴스와 Oracle 데이터베이스로 이루어져 있으며, 각 구성 요소는 아래와 같은 역할을 담당합니다.

Oracle Database 21c 기술 아키텍처

멀티테넌트(Multitenant) 아키텍처는 데이터파일(datafile)이라 불리는 물리적 파일로 구성됩니다. 데이터베이스 인스턴스는 메모리 구조(SGA: Shared Global Area 및 PGA)와 백그라운드 프로세스로 이루어져 있으며, 서버 프로세스를 통해 사용자를 대신해 쿼리를 실행하고, 디스크에서 데이터를 읽어오고, 데이터파일이나 리두 로그 파일에 데이터를 기록하며, 실행 계획을 저장하는 등의 작업을 수행합니다.

단일 데이터베이스(Single Database) 아키텍처는 인스턴스와 데이터베이스가 1:1 관계를 이룹니다. 하나의 서버에 여러 단일 인스턴스를 설치할 수 있지만, 각 인스턴스마다 별도의 데이터베이스가 필요합니다.

반면 Oracle RAC(Real Application Clusters) 아키텍처는 여러 개의 인스턴스가 서로 다른 서버에서 실행되면서 동일한 데이터베이스를 공유하는 구조입니다. 이러한 구성은 높은 가용성(HA), 고성능, 확장성을 제공하기 위해 설계되었습니다.

데이터베이스의 리스너(Listener)는 클라이언트 애플리케이션의 요청을 받아 데이터베이스 연결을 설정한 후, 해당 요청을 서버 프로세스에 넘깁니다. 서버 프로세스는 사용자를 대신하여 작업을 수행하게 됩니다.

Oracle 21c 주요 기능

21c 세대는 관계형(Relational), JSON, XML, 공간 그래프(Spatial Graph), OLAP 등 모든 유형의 데이터 타입을 지원합니다. 또한 분석, 운영, 혼합 워크로드 등 모든 종류의 작업 부하에 대해 더욱 향상된 성능, 확장성, 가용성, 보안을 제공합니다.

1) 블록체인 테이블(Blockchain Tables)

블록체인 테이블은 검증된 거래와 관련된 다양한 문제를 해결합니다. 분산 원장(distributed ledger)을 지원하는 애플리케이션 개발의 복잡성을 효과적으로 처리할 수 있게 해줍니다. 일반적인 힙(heap) 테이블처럼 작동하지만 몇 가지 중요한 차이점이 있습니다.

가장 두드러진 차이는 행(row)이 테이블에 삽입될 때 암호화 방식으로 해시 처리된다는 점입니다. 이를 통해 행은 이후 변경이 불가능해집니다. 즉, 삽입 전용(insert-only) 테이블이 되어 사용자가 블록체인 테이블의 행을 수정하거나 삭제할 수 없습니다.

또한 일정 시간 제한 내에는 데이터 잘라내기(truncate), 블록체인 삭제, 파티셔닝 작업도 금지됩니다. 이러한 핵심 기능 덕분에 다른 사용자들은 블록체인 테이블에 저장된 데이터가 사건의 정확한 기록임을 신뢰할 수 있습니다.

2) 네이티브 JSON 데이터 타입

기존에는 JSON 데이터를 VARCHAR2 또는 LOB(CLOB/BLOB)로 저장했지만, Oracle Database 21c에서는 스키마리스(schemaless) 설계 모델의 유연성으로 애플리케이션을 구축할 수 있는 네이티브 "JSON" 데이터 타입을 제공합니다.

사용자는 SQL로 JSON 문서를 쿼리하고 고급 분석 기능을 활용할 수 있으며, 개별 속성이나 문서 전체에 인덱스를 생성하고, 수십억 건의 JSON 문서를 병렬로 처리할 수 있습니다.

핵심 변화는 읽기나 업데이트 작업 시마다 JSON을 파싱하지 않아도 된다는 점입니다. 파싱은 삽입 시 한 번만 발생하며, 이후 JSON은 내부 바이너리 형식으로 저장되어 접근 속도가 크게 빨라집니다. 그 결과 읽기 및 업데이트 작업은 4~5배, 초대형 JSON 문서의 업데이트는 20~30배까지 빨라질 수 있습니다.

CREATE TABLE j_order
(
   id     INTEGER PRIMARY KEY,
   po_doc JSON
);

새로운 데이터 타입 외에도 Oracle은 JSON_TRANSFORM이라는 새로운 JSON 함수를 추가했습니다. 이 함수는 문서 내 여러 속성을 단일 작업으로 간편하게 업데이트하거나 제거할 수 있게 해줍니다.

UPDATE j_order SET po_doc = JSON_TRANSFORM( po_doc,
  SET '$.address.city' = 'Santa Cruz',
  REMOVE '$.phones[*]?(@.type == "office")'
)
WHERE id = 555;

3) Oracle 데이터베이스 내 JavaScript 실행

Oracle 21c는 MLE(Multi Language Engine)와 새로운 PL/SQL 패키지인 DBMS_MLE를 통해 데이터베이스 내부에서 자바스크립트 코드를 실행할 수 있습니다. 자바스크립트는 웹 애플리케이션과 모바일 앱에서 풍부한 사용자 상호작용을 가능하게 하며, 웹 브라우저에서 실행되는 몇 안 되는 언어 중 하나로 서버 측과 클라이언트 측 코드를 모두 개발할 수 있습니다.

복잡한 프로그램을 구현할 수 있는 방대한 기존 자바스크립트 라이브러리가 존재하고, JSON, REST 같은 인기 개발 기술과도 자연스럽게 연동됩니다.

Oracle 21c에서는 개발자가 데이터가 위치한 데이터베이스 내부에서 직접 자바스크립트 코드를 실행할 수 있습니다. 이를 통해 데이터를 미들웨어 계층이나 브라우저로 옮길 필요 없이, 자바스크립트로 작성된 짧은 연산 작업을 바로 실행할 수 있습니다. MLE는 자바스크립트 데이터 타입과 Oracle 데이터베이스 데이터 타입 간의 매핑을 자동으로 처리하므로, 개발자가 데이터 타입 변환을 신경 쓸 필요가 없습니다.

또한 자바스크립트는 내장 모듈을 통해 PL/SQL과 SQL을 실행할 수 있습니다. 이를 통해 APEX 개발자는 PL/SQL과 SQL의 강력함을 포기하지 않고도 APEX 애플리케이션 내에서 자바스크립트를 일급 언어(first-class language)로 활용할 수 있습니다. 자바스크립트에서는 일반 SQL을 통해 데이터베이스의 테이블과 뷰에 접근할 수 있습니다. 아래는 자바스크립트 코드 작성 예시입니다.

declare
  ctx dbms_mle.context_handle_t;
begin
  -- MLE 실행을 위한 실행 컨텍스트 생성
  ctx := dbms_mle.create_context();
  -- 실행 컨텍스트에서 소스 코드 평가
  dbms_mle.eval(ctx, 'JAVASCRIPT', 'console.log("Hello from JavaScript")');
  -- 더 이상 필요하지 않으면 실행 컨텍스트 삭제
  dbms_mle.drop_context(ctx);
end;

참고: 컨텍스트가 유지되는 동안에는 함수를 포함한 전역 객체의 값들이 함께 보존됩니다.

4) SQL 매크로(SQL Macros)

SQL 쿼리는 조인(join) 수가 늘어나거나 데이터 조회 로직이 복잡해지면 자연스럽게 복잡해집니다. 개발자들은 이런 문제를 해결하기 위해 스토어드 프로시저와 함수를 활용하지만, SQL 엔진이 PL/SQL 엔진과 컨텍스트를 전환하는 과정에서 성능 저하가 발생할 수 있습니다.

Oracle 21c의 SQL 매크로는 이 문제를 해결합니다. SQL 표현식과 테이블 함수를 스토어드 프로시저 호출로 대체할 수 있으며, 프로시저는 실행할 SQL에 삽입될 문자열 리터럴을 반환합니다. 이를 통해 코드 재사용성과 성능을 동시에 확보할 수 있습니다.

5) In-Memory 기능 강화

컬럼(columnar) 형식으로 데이터를 분석하면 행(row) 기반 형식보다 성능이 크게 향상됩니다. 물론 데이터 업데이트는 행 모델이 더 빠르며, Oracle Database In-Memory 기능은 요구 사항에 따라 두 모델을 모두 활용할 수 있게 해줍니다. 애플리케이션을 변경할 필요 없이, In-Memory가 실시간 분석 쿼리를 놀랍도록 빠르게 지원하는 컬럼 스토어를 유지 관리합니다. Oracle Database In-Memory에는 성능과 사용 편의성을 높이는 세 가지 주요 개선 사항이 적용되었습니다.

A. Database In-Memory 벡터 조인(Vector Joins):

In-Memory 컬럼 스토어 내부의 컬럼에 대한 해시 조인(hash join) 같은 연산을 가속화합니다. 해시 조인 시 조인 작업이 더 작은 단위로 분할되어 벡터 처리(vector process)로 전달되며, SIMD로 최적화된 키 값 테이블을 사용해 좌우 조인 양쪽의 행을 매칭합니다. 이를 통해 성능이 최대 10배까지 향상됩니다.

B. 자율 관리형 In-Memory 컬럼 스토어(Self-Managing In-Memory Column Store):

Oracle Database In-Memory가 처음 출시될 때는 메모리 컬럼 스토어에 적재할 컬럼을 명시적으로 선언해야 했고, 이는 메모리가 부족한 경우 사용자에게 높은 제어권을 제공했습니다.

18c에서는 자주 사용되는 오브젝트를 자동으로 컬럼 스토어에 배치하고 사용되지 않는 오브젝트를 제거하는 기능이 도입되었지만, 여전히 고려 대상 오브젝트를 사용자가 지정해야 했습니다.

Oracle Database 21c에서는 INMEMORY_AUTOMATIC_LEVEL을 HIGH로 설정하면 모든 오브젝트가 고려 대상에 포함되어, In-Memory 컬럼 스토어 관리 작업이 크게 간소화됩니다.

C. In-Memory 하이브리드 컬럼 스캔(Hybrid Columnar Scans):

메모리는 한정되어 있으므로 모든 테이블의 모든 컬럼을 컬럼 스토어에 적재하는 것은 불가능합니다. 대부분의 경우 문제가 되지 않지만, 가끔 컬럼 스토어의 데이터와 행 스토어에만 있는 데이터를 동시에 필요로 하는 쿼리가 발생할 수 있습니다.

이전 버전에서는 이러한 쿼리가 단순히 행 스토어에서만 실행되었습니다. 반면 Oracle Database 21c에서는 두 영역을 모두 활용할 수 있습니다! 옵티마이저가 In-Memory 컬럼 스토어를 스캔하고, 필요한 경우 행 스토어에서 프로젝션(projection)된 컬럼 값을 가져오는 방식을 선택할 수 있어 상당한 성능 향상을 기대할 수 있습니다.

결론

Oracle 21c의 전체적인 이점을 요약하면 다음과 같습니다.

  1. 데이터베이스 쿼리 성능이 크게 향상되었습니다.
  2. JSON, XML, OLAP 등 모든 데이터 타입을 지원합니다.
  3. 대규모 확장성과 높은 가용성을 갖추었으며, OLTP, 임시(ad-hoc) 쿼리, 데이터 웨어하우스 등 모든 워크로드에 대한 보안을 제공합니다.
  4. 운영 워크로드와 혼합 워크로드를 모두 지원합니다.
  5. 병렬 스캔, 온라인 백업 등 다양한 작업이 자동화되어, 개발자가 데이터 영속성(data persistence)을 걱정하지 않아도 됩니다.
  6. 자동 인덱싱(automatic indexing) 등의 기능을 통해 성능 관련 기능이 상당 부분 자동화되었습니다.

궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요. 언제든지 대화를 시작할 수 있습니다.