데이터베이스 개발자를 위한 개념
Oracle Database 개발자는 데이터베이스 응용 프로그램을 생성하고 유지 관리합니다. 이 절에서는 데이터베이스 개발자가 수행하는 작업과 사용 가능한 개발 툴에 대해 간략하게 설명합니다.
-
데이터베이스 개발자의 업무 Oracle 개발자는 Oracle 기술 스택을 사용하는 응용 프로그램의 데이터베이스 구성 요소를 생성하거나 유지 관리하는 업무를 담당합니다.
-
데이터베이스 개발자용 도구 Oracle은 데이터베이스 애플리케이션 개발에 사용할 수 있는 여러 가지 도구를 제공합니다. 이 절에서는 일반적으로 사용되는 몇 가지 개발 도구에 대해 설명합니다.
-
데이터베이스 개발자를 위한 주제 이 섹션에서는 데이터베이스 개발자에게 가장 중요하고 설명서에 있는 다른 곳에서 다루지 않은 주제를 다룹니다.
데이터베이스 개발자의 업무
Oracle 개발자는 Oracle 기술 스택을 사용하는 응용 프로그램의 데이터베이스 구성 요소를 생성 또는 유지 관리하는 작업을 담당합니다.
Oracle 개발자는 새 응용 프로그램을 개발하거나 기존 응용 프로그램이 Oracle Database 환경에서 실행되도록 변환합니다. 이러한 이유로 개발자는 데이터베이스 관리자와 긴밀히 협력하여 지식과 정보를 공유합니다.
Oracle 데이터베이스 개발자는 다음 작업에 관여할 수 있습니다.
-
응용 프로그램에 필요한 데이터 모델 구현
-
스키마 객체 생성
-
데이터 무결성 규칙 구현
-
새 개발 프로젝트를 위한 프로그래밍 환경 선택
-
SQL 문을 사용하는 서버측 PL/SQL 또는 Java 서브 프로그램 및 클라이언트측 프로시저 코드 작성
-
선택한 개발 툴로 애플리케이션 인터페이스 생성
-
Globalized Applications 개발을 위한 Globalization Support 환경 설정
-
운용 환경에서 개발, 테스트, 교육 및 배치를 위해 여러 데이터베이스에서 응용 프로그램 인스턴스화
참조:
-
Oracle AI Database 시작하기 Oracle AI Database 개발 - Oracle Database 개발에 대한 소개 및 GUI 기반 자습서
-
Oracle AI Database Development Guide - 데이터베이스 설계, 개발자를 위한 SQL, 개발자를 위한 PL/SQL과 같은 주제에 대한 심층적인 토론
데이터베이스 개발자를 위한 도구
Oracle은 데이터베이스 응용 프로그램 개발에 사용할 수 있는 여러 가지 도구를 제공합니다. 이 절에서는 일반적으로 사용되는 몇 가지 개발 도구에 대해 설명합니다.
-
SQL Developer는 데이터베이스 개발자가 SQL*Plus를 사용하여 기본 작업을 편리하게 편집하고 개발할 수 있는 방법입니다.
-
Oracle APEX AI 애플리케이션 생성기 Oracle APEX AI 애플리케이션 생성기는 Oracle Database를 위한 웹 애플리케이션 개발 도구입니다. Oracle APEX AI Application Generator는 사용자 인터페이스 테마, 탐색 제어, 양식 처리기, 유연한 보고서와 같은 내장 기능을 사용하여 애플리케이션 개발을 가속화합니다.
-
Oracle JDeveloper는 Java, XML, 웹 서비스 및 SQL에 대한 최신 업계 표준을 사용하여 서비스 지향 응용 프로그램을 빌드하기 위한 IDE(통합 개발 환경)입니다.
-
Oracle Developer Tools for Visual Studio .NET
Oracle Developer Tools for Visual Studio .NET은 Visual Studio .NET 환경과 통합된 응용 프로그램 도구 세트입니다.
SQL Developer
SQL Developer는 데이터베이스 개발자가 SQL*Plus를 사용하여 기본 작업을 편리하게 편집하고 개발할 수 있는 방법입니다. SQL Developer는 SQL 및 PL/SQL 개발을 지원하는 Java로 작성된 SQL*Plus의 그래픽 버전입니다. 표준 데이터베이스 인증을 사용하여 모든 Oracle 데이터베이스 스키마에 연결할 수 있습니다. SQL Developer를 사용하면 다음을 수행할 수 있습니다.
-
스키마 객체 찾아보기, 생성, 편집 및 삭제
-
SQL 문 실행
-
PL/SQL 프로그램 단위 편집 및 디버그
-
데이터 조작 및 엑스포트
-
보고서 생성 및 표시
SQL Developer는 기본 Oracle Database 설치에서 무료로 다운로드할 수 있습니다.
참조: Oracle AI Database Get Started with Oracle AI Database Development 및 Oracle SQL Developer User's Guide에서 SQL Developer 사용 방법 학습
Oracle APEX AI 애플리케이션 생성기
Oracle APEX AI 애플리케이션 생성기는 Oracle Database용 웹 애플리케이션 개발 도구입니다. Oracle APEX AI Application Generator는 사용자 인터페이스 테마, 탐색 제어, 양식 처리기, 유연한 보고서와 같은 내장 기능을 사용하여 애플리케이션 개발을 가속화합니다.
Oracle APEX는 데이터베이스와 함께 설치되며 테이블 및 PL/SQL 코드의 데이터로 구성됩니다. 응용 프로그램을 실행하면 브라우저에서 Oracle APEX PL/SQL 호출로 변환되는 URL 요청을 보냅니다. 데이터베이스가 PL/SQL을 처리한 후에는 결과가 다시 브라우저에 HTML로 중계됩니다. 이 주기는 페이지를 요청하거나 제출할 때마다 발생합니다.
내장된 PL/SQL 게이트웨이와 함께 Oracle APEX를 사용할 수 있습니다. 게이트웨이는 데이터베이스의 Oracle XML DB HTTP 서버에서 실행되며 동적 응용 프로그램을 생성하는 데 필요한 기반 구조를 제공합니다. 그림 23-1에 표시된 것처럼 내장된 PL/SQL 게이트웨이는 중간 계층을 제거하여 응용 프로그램 구조를 단순화합니다.
그림 1: 임베디드 PL/SQL 게이트웨이가 포함된 APEX

Oracle JDeveloper
Oracle JDeveloper는 Java, XML, 웹 서비스 및 SQL에 대한 최신 업계 표준을 사용하여 서비스 지향 응용 프로그램을 빌드하기 위한 IDE(통합 개발 환경)입니다. Oracle JDeveloper는 애플리케이션 모델링, 코딩, 디버깅, 테스트, 프로파일링, 튜닝 및 배치를 위한 통합 기능을 통해 전체 소프트웨어 개발 수명 주기를 지원합니다.
Oracle JDeveloper는 다양한 응용 프로그램 개발 툴에 window를 사용합니다. 예를 들어, Java 응용 프로그램을 생성할 때는 Java Visual Editor 및 Component Palette와 같은 도구를 사용할 수 있습니다. 이러한 툴 외에도 Oracle JDeveloper는 프로젝트 내용을 구성하고 보는 데 도움이 되는 다양한 네비게이터를 제공합니다.
참조:
-
Oracle AI Database Java 개발 시작하기 JDeveloper 사용 방법 알아보기
-
다음 URL에서 JDeveloper을 다운로드할 수 있습니다. http://www.oracle.com/technetwork/developer-tools/jdev/downloads/
Oracle Developer Tools for Visual Studio .NET
Oracle Developer Tools for Visual Studio .NET은 Visual Studio .NET 환경과 통합된 응용 프로그램 도구 세트입니다. Oracle Developer Tools for Visual Studio .NET 도구는 Oracle 기능에 대한 GUI 액세스를 제공하며, 사용자가 광범위한 응용 프로그램 개발 작업을 수행하고 개발 생산성과 사용 편의성을 향상시킬 수 있게 합니다.
Oracle Developer Tools에서는 Visual Basic, C# 및 기타 .NET 언어를 사용하여 .NET 내장 프로시저를 프로그래밍하고 구현할 수 있으며, 이 프로시저는 .NET 언어로 작성되며 SQL 또는 PL/SQL 문을 포함합니다.
데이터베이스 개발자를 위한 항목
이 절에서는 데이터베이스 개발자에게 가장 중요하고 설명서에 있는 다른 곳에서 다루지 않은 내용을 다룹니다.
-
애플리케이션 설계 및 튜닝 원칙 Oracle 개발자는 보안 및 성능 목표를 달성할 수 있도록 데이터베이스 애플리케이션을 설계, 생성 및 튜닝해야 합니다.
-
정확한 질의의 원리 실제 응용 프로그램 질의는 많은 조인과 함께 매우 복잡할 수 있으며, 이러한 질의는 모든 구석에서 정확하지 않은 경우가 많으며, 장기간 운용 시스템에서 실행 중인 SQL에서도 오류가 발생한 결과를 명시적으로 반환하도록 지정하여 눈에 띄지 않는 오류가 발생합니다. 이 섹션에서는 이러한 너무 흔한 SQL 오류 중 가장 중요한 오류를 체계적으로 분석하고 방지할 수 있는 방법에 대해 설명합니다.
-
클라이언트측 데이터베이스 프로그래밍 선행 컴파일러 또는 Java 변환기를 사용하여 SQL 문을 소스 코드에 배치하거나, API를 사용하여 응용 프로그램이 데이터베이스와 상호 작용하도록 할 수 있습니다.
-
글로벌화 지원 Oracle Database 글로벌화 지원을 통해 데이터를 모국어로 저장, 처리 및 검색할 수 있습니다.
-
비구조적 데이터 비구조적 데이터는 더 작은 논리적 구조로 분할되지 않은 데이터입니다.
응용 프로그램 설계 및 튜닝의 원칙
Oracle 개발자는 보안 및 성능 목표를 달성할 수 있도록 데이터베이스 애플리케이션을 설계, 생성 및 튜닝해야 합니다.
응용 프로그램 설계 및 튜닝의 다음 원칙이 유용한 지침입니다.
-
Oracle Database 작동 방식 알아보기
개발자는 데이터베이스 구조 및 기능을 활용해야 하는 Oracle 데이터베이스에 대해 최소한의 시간 내에 응용 프로그램을 개발하려고 합니다. 예를 들어, Oracle Database 데이터 동시성 제어 및 다중 버전 읽기 일관성을 이해하지 못하면 응용 프로그램이 데이터의 무결성을 손상시키고, 느리게 실행되며, 확장성을 줄일 수 있습니다. Transaction Guard 및 Application Continuity 작업을 파악하면 불필요한 예외 처리 코드를 작성하지 않아도 됩니다.
-
바인드 변수를 사용하지 않는 것이 바람직하지 않은 경우 바인드 변수 사용
질의가 바인드 변수를 사용하는 경우 데이터베이스는 바인드 변수를 한 번 컴파일하고 질의 계획을 공유 풀에 저장할 수 있습니다. 동일한 명령문이 다시 실행되는 경우 데이터베이스는 소프트 구문 분석을 수행하고 계획을 재사용할 수 있습니다. 반면, 하드 구문 분석은 시간이 오래 걸리고 더 많은 리소스를 사용합니다. 바인드 변수를 사용하여 소프트 구문 분석을 허용하는 것은 매우 효율적이며 개발자의 데이터베이스 작업 방식입니다.
-
클라이언트가 아닌 데이터베이스 서버에서 무결성 제약 조건 구현
기본 및 외래 키를 사용하면 여러 애플리케이션에서 데이터를 재사용할 수 있습니다. 클라이언트에서 규칙을 코딩하는 것은 다른 클라이언트가 데이터베이스에 대해 실행할 때 이러한 규칙에 액세스할 수 없음을 의미합니다.
-
대표적인 데이터 및 세션 작업을 사용하여 테스트 환경 구축
라이브 프로덕션 환경을 시뮬레이션하는 테스트 환경은 여러 가지 이점을 제공합니다. 예를 들어 애플리케이션을 벤치마크하여 확장 및 성능이 양호한지 확인할 수 있습니다. 또한 테스트 환경을 사용하여 데이터베이스 변경 사항의 성능 영향을 측정하고 업그레이드 및 패치가 올바르게 작동하는지 확인할 수 있습니다.
-
우수한 성능을 목표로 데이터 모델 설계
일반적으로 일반 데이터 모델을 사용하려고 시도하면 성능이 저하됩니다. 잘 설계된 데이터 모델은 가장 일반적인 query에 최대한 효율적으로 응답합니다. 예를 들어, 데이터 모델은 최상의 성능을 제공하는 인덱스 유형을 사용해야 합니다. 논리적 구조와 물리적 구조를 변경하는 것은 어렵거나 불가능할 수 있으므로 배치 후 튜닝하는 것은 바람직하지 않습니다.
-
명확한 성과 목표 정의 및 척도 기록 보관
개발의 중요한 측면은 애플리케이션의 성능과 확장성을 정확히 결정하는 것입니다. 예를 들어 예상 사용자 로드, 초당 트랜잭션, 허용 가능한 응답 시간 등이 포함된 측정 단위를 사용합니다. 좋은 방법은 성능 metric의 기록 레코드를 유지 관리하는 것입니다. 이러한 방식으로 성능을 사전 예방적이고 반응적으로 모니터할 수 있습니다.
-
애플리케이션 코드를 계측합니다.
개발 연습에서는 응용 프로그램에 디버깅 코드를 추가하는 과정을 다룹니다. 추적 파일 생성 기능은 성능 문제를 디버깅하고 진단하는 데 유용합니다.
참조:
-
데이터베이스 애플리케이션 설계 시 고려해야 할 Oracle AI Database 시작하기
-
성능을 위해 애플리케이션을 설계하는 방법을 알아보려면 Oracle AI Database SQL Tuning Guide를 참조하십시오.
올바른 query의 원리
실제 응용 프로그램 Query는 많은 조인으로 인해 매우 복잡할 수 있으며, 이러한 Query는 모든 구석에서 올바르지 않은 경우가 많으며, 장기간 운용 시스템에서 실행 중인 SQL에서도 오류가 발생한 결과를 명시적으로 반환하도록 지정하면 눈에 띄지 않는 오류가 발생합니다. 이 섹션에서는 이러한 너무 흔한 SQL 오류 중 가장 중요한 오류를 체계적으로 분석하고 방지할 수 있는 방법에 대해 설명합니다.
Query는 매우 복잡해 보일 수 있습니다. 수십 개의 테이블을 참조하고, 다른 뷰에 구축된 뷰를 포함하며, WITH 절, SELECT 목록 및 WHERE 절에서 subquery를 사용할 수 있습니다. 그 복잡성 아래, 좋은 쿼리는 여전히 하나의 명확한 질문에 대답합니다. 이 질문은 일반적으로 특정 유형의 비즈니스 엔티티 집합에 대한 데이터의 필요성을 반영합니다. query에서 반환되는 각 행은 해당 엔티티의 한 인스턴스를 나타내야 합니다. GROUP BY 질의의 경우 각 행은 동일한 엔티티의 인스턴스에 대한 집계를 나타내야 합니다.
대부분의 시스템에서는 query하기에 충분히 중요한 각 업무 엔티티 유형에 해당 행을 나타내는 해당 테이블이 있습니다. 이러한 의미에서 잘 작성된 query는 모양이 얼마나 복잡한지에 관계없이 궁극적으로 단일 테이블의 행에 대한 질문입니다. 일반적으로 정규화된 데이터베이스는 상위 테이블, Grandparent 테이블 등의 관련 테이블에 엔티티의 속성을 저장하기 때문에 주변 복잡성이 발생합니다.
예를 들어, 정규화된 설계는 일반적으로 고객의 이름을 CUSTOMERS 테이블에 한 번 저장합니다. ORDERS 테이블은 CUSTOMERS에 조인할 수 있도록 CUSTOMER_ID만 저장합니다. ORDER_ITEMS 테이블은 ORDERS에 조인할 수 있도록 ORDER_ID를 저장하며 CUSTOMER_ID를 반복하지 않습니다. ORDER_ITEMS의 하위 세트를 각 품목에 대한 고객 이름과 함께 나열하려면 먼저 ORDERS(상위)에, CUSTOMERS(상위)에 순차적으로 고유한 조인이 필요합니다. 정규화된 OLTP 시스템에서는 결과 집합이 여전히 하나의 "기본" 테이블에서 행의 하위 집합에 일대일로 매핑되더라도 질의에 단일 엔티티 유형에 대한 세부 정보를 검색하기 위해 이러한 조인이 많이 필요할 수 있습니다.
이러한 기본 테이블을 RWT(Row-Widened Table)라고 합니다. 올바른 query에서 다른 조인은 일반적으로 상위 테이블, Grandparent 테이블 등의 고유하게 일치하는 조회 데이터를 추가하여 각 RWT 행을 "확장"해야 합니다. 이러한 조인은 RWT 행 수를 곱하면 안됩니다. RWT에서 논리적으로 시작하는 모든 조인에 대해 이 구조가 있는 질의는 RWOQ(행 확장 전용 질의)입니다. 주: 필터링하면 RWT 행이 폐기될 수 있습니다. 내부 조인 및 WHERE 술어는 RWT에서 행을 제거할 수 있습니다. "Row-widened"는 query가 모든 RWT 행을 보존한다는 의미는 아닙니다. 즉, 필터링 후 집계 전에 각 질의 결과 행은 나머지 RWT 행에 대해 엄격하게 일대일로 대응합니다.
query의 다른 모든 테이블이 query가 반환하거나 집계하는 엔티티를 나타내는 단일 테이블의 고유 조인 체인을 통해 도달할 수 있는 경우 해당 시작 테이블은 RWT이며 query는 RWOQ입니다. 고유 키를 통해 테이블을 보장할 수 없는 경우 사전 집계 결과 행에 일대일로 매핑하면 query는 RWOQ가 아닙니다. 실제로 query가 잘 정의된 업무상 중요한 엔티티에 결과 행을 완전히 매핑하지 않기 때문에 대부분의 비RWOQ는 응용 프로그램에서 올바르게 해석할 수 없는 결과를 생성합니다. 예를 들어 이러한 행의 값을 합산하면 동일한 엔티티에 대해 동일한 값이 여러 번 추가되고 합계는 말도 안 됩니다.
Oracle Database 릴리스 26ai부터 JOIN TO ONE 기능은 올바른 RWOQ를 작성하는 데 큰 도움이 됩니다. 모든 조인에 JOIN TO ONE를 사용하는 경우 데이터베이스는 구문 분석 시 질의가 RWOQ임을 검사하여 FROM 절의 가장 왼쪽 테이블을 RWT로 처리합니다. 객체는 비RWOQ 동작을 숨길 수 있는 뷰가 아닌 기본 테이블이라고 가정합니다. 데이터베이스가 구문 분석 시 JOIN TO ONE 조인의 고유성을 증명할 수 없는 경우 런타임 검사를 수행하여 미리 추정된 RWT의 각 조인이 실행 시 발견된 데이터에 대해 고유하게 유지되는지 확인합니다. 실제 결과에서 고유하지 않은 조인을 감지하면 런타임 오류가 발생합니다. 대부분의 RWOQ는 JOIN TO ONE 양식으로 변환할 수 있습니다. JOIN TO ONE 폼으로 변환할 수 없는 질의는 일반적으로 변환 시 시도에서 불규칙한 조인을 표시합니다. 변환된 query가 런타임 오류 없이 실행되면 해당 query가 원하는 엔티티당 하나의 행 속성을 가지고 있음을 강력하게 확인할 수 있습니다.
RWOQ, SQL에서 미묘한 정확성 문제를 방지하는 데 도움이 되는 이유 및 JOIN TO ONE에서 RWOQ를 적용하는 방법에 대한 자세한 내용은 Oracle AI Database Development Guide를 참조하십시오.
클라이언트측 데이터베이스 프로그래밍
선행 컴파일러 또는 Java 변환기를 사용하여 SQL 문을 소스 코드에 배치하거나, API를 사용하여 응용 프로그램이 데이터베이스와 상호 작용하도록 할 수 있습니다.
프로시저 데이터베이스 응용 프로그램에서 SQL을 사용할 수 있는 두 가지 기본 기법인 PL/SQL 및 Java를 사용한 서버측 프로그래밍과 JDBC(Java Database Connectivity) 또는 OCI(Oracle Call Interface)와 같은 선행 컴파일러 및 API를 사용한 클라이언트측 프로그래밍이 있습니다.
-
임베디드 SQL 과거에는 클라이언트/서버 프로그램에서 내장된 SQL을 사용하여 데이터베이스와 상호 작용했습니다.
-
클라이언트측 API 오늘날 대부분의 개발자는 API를 사용하여 데이터베이스 애플리케이션에 SQL을 내장합니다.
포함된 SQL
이전에는 클라이언트/서버 프로그램에서 내장된 SQL을 사용하여 데이터베이스와 상호 작용했습니다.
- Oracle 선행 컴파일러 클라이언트/서버 프로그램은 일반적으로 상위 레벨 프로그램에 SQL 문을 포함할 수 있는 프로그래밍 도구인 Oracle 사전 컴파일러를 사용하여 작성됩니다.
Oracle 선행 컴파일러
클라이언트/서버 프로그램은 일반적으로 상위 레벨 프로그램에 SQL 문을 포함할 수 있는 프로그래밍 툴인 Oracle 사전 컴파일러를 사용하여 작성됩니다.
예를 들어, Oracle Pro*C/C++ 선행 컴파일러를 사용하면 SQL 문을 C 또는 C++ 소스 파일에 포함할 수 있으며, Oracle 선행 컴파일러는 COBOL 및 FORTRAN에도 사용할 수 있습니다.
선행 컴파일러는 다음과 같은 여러 가지 이점을 제공합니다.
-
일반적으로 동등한 OCI 애플리케이션보다 적은 코드를 작성하므로 생산성 향상
-
고도로 커스터마이징된 애플리케이션 생성 가능
-
리소스 사용, SQL 문 실행 및 다양한 런타임 표시기의 닫기 모니터링 허용
-
선행 컴파일러가 포함된 각 SQL 문을 Oracle Database 런타임 라이브러리에 대한 호출로 변환하므로 시간이 절약됩니다.
-
객체 유형 변환기를 사용하여 Pro*C/C++ 응용 프로그램에서 사용할 C 데이터 유형에 Oracle Database 객체 유형 및 컬렉션을 매핑합니다.
-
객체 유형 및 컬렉션에 대한 컴파일 시간 유형 검사 및 데이터베이스 유형에서 C 데이터 유형으로의 자동 유형 변환 제공
SQL 문을 포함하는 클라이언트 응용 프로그램은 호스트 프로그램입니다. 이 프로그램은 호스트 언어로 작성됩니다. 호스트 프로그램에서는 완전한 SQL 문을 전체 C 문과 혼합하고 SQL 문에서 C 변수나 구조를 사용할 수 있습니다. SQL 문을 포함할 때는 EXEC SQL 키워드로 시작하고 세미콜론으로 끝나야 합니다. Pro*C/C++는 EXEC SQL 문을 런타임 라이브러리 SQLLIB에 대한 호출로 변환합니다.
포함된 대부분의 SQL 문은 새 절을 추가하거나 프로그램 변수를 사용하는 경우에만 대화식 SQL 문과 다릅니다. 다음 예에서는 대화식 및 내장된 ROLLBACK 문을 비교합니다.
ROLLBACK; -- interactive
EXEC SQL ROLLBACK; -- embedded
명령문은 효과가 동일하지만 유저는 SQL Developer 등의 대화식 SQL 환경에서 첫번째 명령문을 사용하고, 두번째 명령문은 Pro*C/C++ 프로그램에서 사용합니다.
선행 컴파일러는 호스트 프로그램을 입력으로 받아들이고, 포함된 SQL 문을 표준 데이터베이스 런타임 라이브러리 호출로 변환하고, 일반적인 방식으로 컴파일, 링크 또는 실행할 수 있는 소스 프로그램을 생성합니다. 그림 23-2에서는 선행 컴파일러를 사용하는 프로그램을 개발하는 일반적인 단계를 보여줍니다.
그림 2: 선행 컴파일러를 사용한 프로그램 개발

참조: Pro*C/C++ 선행 컴파일러에 대한 자세한 설명은 Pro*C/C++ Developer's Guide를 참조하십시오.
클라이언트측 API
오늘날 대부분의 개발자는 API를 사용하여 데이터베이스 애플리케이션에 SQL을 내장합니다.
예를 들어, 프로그램이 Oracle Database와 통신할 수 있도록 하는 두 가지 주요 API는 ODBC(Open Database Connectivity) 및 JDBC입니다. OCI(Oracle Call Interface) 및 OCCI(Oracle C++ Call Interface)는 클라이언트측 프로그래밍을 위한 두 가지 다른 공통 API입니다.
-
OCI 및 OCCI 선행 컴파일러 대신 Oracle은 OCI 및 OCCI API를 제공합니다.
-
ODBC 및 JDBC ODBC는 응용 프로그램이 데이터베이스에 연결한 다음 SQL 문을 준비하고 실행할 수 있는 표준 API입니다.
OCI 및 OCCI
선행 컴파일러의 대안으로 Oracle은 OCI 및 OCCI API를 제공합니다.
OCI를 사용하면 C와 같은 호스트 프로그래밍 언어를 사용하여 데이터베이스의 데이터와 스키마를 조작할 수 있습니다. OCCI는 C++와 함께 사용하기에 적합한 객체 지향 인터페이스입니다. 두 API 모두 개발자가 고유 서브 프로그램 호출을 사용하여 Oracle Database에 액세스하고 SQL 실행을 제어할 수 있도록 합니다.
경우에 따라 OCI는 상위 레벨 인터페이스보다 더 나은 성능 또는 더 많은 기능을 제공합니다. OCI 및 OCCI는 다음을 포함한 다양한 기능을 제공합니다.
-
Oracle Database를 통해 제공되는 모든 SQL DDL, DML, 쿼리 및 트랜잭션 제어 기능 지원
-
즉석 클라이언트: 디스크 공간이 문제일 때 응용 프로그램을 배치하는 방법
-
스레드 관리, 연결 풀링, Globalization 기능 및 C 응용 프로그램에서 데이터의 직접 경로 로드
OCI 및 OCCI는 OCILIB(동적 런타임 라이브러리) 형식의 표준 데이터베이스 액세스 및 검색 함수 라이브러리를 제공합니다. 이 라이브러리는 런타임 시 응용 프로그램에서 연결할 수 있습니다. 따라서 별도의 선행 처리 또는 사전 컴파일 단계를 피하면서 비데이터베이스 응용 프로그램과 동일한 방식으로 OCI 또는 OCCI 프로그램을 컴파일하고 연결할 수 있습니다. 그림 23-3에서는 개발 프로세스를 보여 줍니다.
그림 3: OCI 또는 OCCI를 사용한 개발 프로세스

ODBC 및 JDBC
ODBC는 응용 프로그램이 데이터베이스에 연결한 다음 SQL 문을 준비하고 실행할 수 있도록 하는 표준 API입니다.
ODBC는 프로그래밍 언어, 데이터베이스 및 운영 체제와 독립적입니다. ODBC의 목표는 모든 응용 프로그램이 데이터베이스에 포함된 데이터에 액세스할 수 있도록 하는 것입니다.
데이터베이스 드라이버는 응용 프로그램과 데이터베이스 사이에 있는 소프트웨어입니다. 드라이버는 응용 프로그램에서 수행한 API 호출을 데이터베이스에서 처리할 수 있는 명령으로 변환합니다. ODBC 드라이버를 사용하면 애플리케이션이 스프레드시트에 저장된 데이터를 포함한 모든 데이터 소스에 액세스할 수 있습니다. ODBC 드라이버는 ODBC 표준과 데이터베이스 간의 모든 매핑을 수행합니다.
Oracle에서 제공하는 Oracle ODBC 드라이버를 사용하면 ODBC 호환 응용 프로그램이 Oracle Database에 액세스할 수 있습니다. 예를 들어 Visual Basic으로 작성된 응용 프로그램은 ODBC를 사용하여 Oracle 데이터베이스의 테이블을 질의하고 업데이트할 수 있습니다.
JDBC는 Java 응용 프로그램이 Oracle 데이터베이스와 상호 작용할 수 있도록 하는 로우 레벨 Java 인터페이스입니다. ODBC와 마찬가지로 JDBC는 공급업체에 독립적인 API입니다. JDBC 표준은 Sun Microsystems에서 정의하며 java.sql 인터페이스를 통해 구현됩니다.
JDBC 표준은 개별 제공자가 자체 JDBC 드라이버를 사용하여 표준을 구현하고 확장할 수 있도록 합니다. Oracle은 클라이언트측 프로그래밍을 위해 다음과 같은 JDBC 드라이버를 제공합니다.
-
JDBC ThIN 드라이버
이 순수 Java 드라이버는 Oracle 클라이언트 설치 없이 클라이언트측에 상주합니다. 플랫폼 독립적이며 애플릿과 응용 프로그램 모두에서 사용할 수 있습니다.
-
JDBC OCI 드라이브
이 드라이버는 Oracle 클라이언트 설치가 있는 클라이언트측에 있습니다. 응용 프로그램에서만 사용할 수 있습니다. C 및 Java로 작성된 JDBC OCI 드라이버는 JDBC 호출을 OCI 호출로 변환합니다.
다음 코드 조각은 JDBC OCI 드라이버를 사용하여 Statement 객체를 생성하고 dual 테이블을 query하는 Java 프로그램에서 가져온 것입니다.
// Create a statement
Statement stmt = conn.createStatement();
// Query dual table
ResultSet rset = stmt.executeQuery("SELECT 'Hello World' FROM DUAL");
참조: JDBC에 대한 자세한 내용은 Oracle AI Database Development Guide 및 Oracle AI Database Get Started with Java Development를 참조하십시오.
전역화 지원
Oracle Database 세계화 지원을 통해 자국어로 데이터를 저장, 처리 및 검색할 수 있습니다.
세계화 지원을 통해 세계 어디서나 동시에 액세스하고 실행할 수 있는 다국어 응용 프로그램과 소프트웨어를 개발할 수 있습니다.
Globalized Database Application을 작성하는 개발자는 다음을 수행해야 합니다.
-
다양한 Character Set, 영역(territory), 언어 및 언어 정렬 정의의 속성 등 Oracle Database Globalization Support 구조 이해
-
데이터베이스의 로케일 모델과 상호 작용하고 동기화하는 방법을 포함하여 중간 계층 프로그래밍 환경의 Globalization 기능 이해
-
Character Set과 로케일 요구 사항이 서로 다른 여러 운영 체제에서 실행되는 여러 클라이언트를 동시에 지원할 수 있는 코드 설계 및 작성
예를 들어, 응용 프로그램이 유저 인터페이스의 컨텐트를 렌더링하고 데이터를 언어 및 원시 유저의 로케일 환경 설정으로 처리해야 할 수 있습니다. 예를 들어, 애플리케이션에서 멀티바이트 Kanji 데이터를 처리하고, 적절한 지역 형식으로 메시지와 날짜를 표시하고, 사용자가 설정을 변경하지 않고도 7비트 ASCII 데이터를 처리해야 합니다.
-
글로벌화 지원 환경 글로벌화 지원 환경에는 클라이언트 애플리케이션과 데이터베이스가 포함됩니다. 별도의 위치에 존재할 수 있는 클라이언트와 서버에서 파라미터 및 환경 변수를 설정하여 언어 종속 작업을 제어할 수 있습니다.
-
Oracle Globalization Development Kit Oracle Globalization Development Kit(GDK)에는 포괄적인 프로그래밍 API가 포함되어 있습니다. 참조: 세계화에 대한 자세한 내용은 Oracle AI Database Globalization Support Guide를 참조하십시오.
Globalization Support 환경
Globalization 지원 환경에는 클라이언트 응용 프로그램과 데이터베이스가 포함됩니다. 별도의 위치에 존재할 수 있는 클라이언트와 서버에서 파라미터 및 환경 변수를 설정하여 언어 종속 작업을 제어할 수 있습니다. 주: 이전 릴리스에서는 Oracle이 전역화 지원 기능을 NLS(국가별 언어 지원) 기능이라고 했습니다. NLS는 실제로 Globalization Support의 하위 집합이며 국가별 언어를 선택하고 데이터를 특정 Character Set에 저장할 수 있는 기능을 제공합니다.
Oracle Database는 다음과 같은 기능에 대한 Globalization Support를 제공합니다.
-
모국어 및 지역
-
날짜, 시간, 숫자 및 통화에 대한 로컬 형식
-
달력 시스템(그레고리아어, 일본어, 태국어 부처 등)
-
유니코드를 포함한 여러 문자 집합
-
문자 의미
-
문자 집합 전역화 지원의 핵심 구성요소는 컴퓨터 화면에 문자를 표시하는 데 사용되는 인코딩 체계인 문자 집합입니다.
-
로케일별 설정 로케일은 시스템 또는 프로그램이 실행되는 언어 및 문화 환경입니다. NLS 매개변수는 클라이언트와 데이터베이스 모두에서 로케일별 동작을 결정합니다.
문자 집합
전역화 지원의 핵심 구성 요소는 컴퓨터 화면에 문자를 표시하는 데 사용되는 인코딩 체계인 문자 세트입니다.
애플리케이션 개발에서는 다음과 같은 구분이 중요합니다.
-
데이터베이스 문자 집합은 데이터베이스에 표시할 수 있는 언어를 결정합니다. Character Set은 데이터베이스 생성 시 지정됩니다.
주: 데이터베이스가 생성된 후 문자 집합 변경은 대개 시간과 리소스 측면에서 매우 많은 비용이 듭니다. 이 작업을 수행하려면 전체 데이터베이스를 엑스포트한 후 다시 임포트하여 모든 문자 데이터를 변환해야 할 수 있습니다.
-
클라이언트 문자 집합은 클라이언트 응용 프로그램에서 입력하거나 표시하는 데이터의 문자 집합입니다. 클라이언트와 데이터베이스의 Character Set은 다를 수 있습니다.
문자 그룹(예: 영문자, 표식, 기호, 구두점 및 제어 문자)을 문자 집합으로 인코딩할 수 있습니다. 인코딩된 문자 집합은 코드 포인트 또는 인코딩된 값이라는 고유한 숫자 코드를 집합의 각 문자에 할당합니다. 코드 포인트는 서로 다른 문자 집합 간에 데이터를 변환해야 하기 때문에 전역 환경에서 중요합니다.
컴퓨터 산업에서는 여러 인코딩된 문자 집합을 사용합니다. 이러한 세트는 사용 가능한 문자 수, 사용할 수 있는 문자 수, 각 문자에 할당된 코드 포인트 등에 따라 다릅니다. Oracle Database는 대부분의 국가, 국제 및 벤더별로 인코딩된 Character Set 표준을 지원합니다.
Oracle Database는 다음과 같은 인코딩된 Character Set 클래스를 지원합니다.
-
단일 바이트 Character Set
각 문자는 한 바이트를 차지합니다. 7비트 문자 집합의 예는 US7ASCII입니다. 8비트 문자 집합의 예는 WE8DEC입니다.
-
멀티바이트 Character Set
각 문자는 여러 바이트를 차지합니다. 멀티바이트 세트는 일반적으로 아시아 언어에 사용됩니다.
-
유니코드
유니버설 인코딩 Character Set을 사용하면 단일 Character Set을 사용하여 임의의 언어로 정보를 저장할 수 있습니다. 유니코드는 플랫폼, 프로그램 또는 언어에 관계없이 모든 문자에 대해 고유한 코드 값을 제공합니다.
참조: 문자 세트 마이그레이션에 대한 자세한 내용은 Oracle AI Database Globalization Support Guide를 참조하십시오.
로케일별 설정
로케일은 시스템 또는 프로그램이 실행되는 언어 및 문화 환경입니다. NLS 매개변수는 클라이언트와 데이터베이스 모두에서 로케일별 동작을 결정합니다.
데이터베이스 세션은 클라이언트를 대신하여 명령문을 실행할 때 NLS 설정을 사용합니다. 예를 들어, 데이터베이스는 클라이언트에 대해 천 단위 구분 기호를 올바르게 사용합니다. 일반적으로 클라이언트 호스트의 NLS_LANG 환경 변수는 서버 세션 및 클라이언트 응용 프로그램에 대한 로케일을 지정합니다. 프로세스는 다음과 같습니다.
-
클라이언트 응용 프로그램이 시작되면 환경 설정에서 클라이언트 NLS 환경을 초기화합니다.
로컬에서 수행되는 모든 NLS 작업(예: Oracle Developer 응용 프로그램에서 형식 지정 표시)은 이러한 설정을 사용합니다.
-
클라이언트는 연결 시
NLS_LANG에 의해 정의된 정보를 데이터베이스에 전달합니다. -
데이터베이스 세션은 클라이언트가 전달하는 설정에 따라 NLS 환경을 초기화합니다.
클라이언트가 설정을 지정하지 않은 경우 세션은 초기화 파라미터 파일의 설정을 사용합니다. 데이터베이스는 클라이언트가 NLS 설정을 지정하지 않은 경우에만 초기화 파라미터 설정을 사용합니다. 클라이언트가 일부 NLS 설정을 지정한 경우 나머지 NLS 설정이 기본값으로 설정됩니다.
클라이언트 응용 프로그램을 대신하여 시작된 각 세션은 다른 세션과 동일하거나 다른 로케일로 실행될 수 있습니다. 예를 들어, 한 세션은 독일어 로케일을 사용하고 다른 세션은 프랑스어 로케일을 사용할 수 있습니다. 또한 각 세션은 동일하거나 다른 언어 요구 사항을 지정할 수 있습니다.
다음 표에서는 서로 다른 NLS_LANG 설정을 사용하는 두 클라이언트를 보여줍니다. 유저가 각 호스트에서 SQL*Plus를 시작하고 hr와 동일한 데이터베이스에 로그온한 다음 동일한 query를 동시에 실행합니다. 부동 소수점 수에 대한 로케일별 NLS 설정 때문에 각 세션에 대한 결과가 다릅니다.
표 1 로케일별 NLS 설정
| t | 클라이언트 호스트 1 | 클라이언트 호스트 2 |
|---|---|---|
| t0 | |
|
| t1 | |
|
참조: NLS 설정에 대한 자세한 내용은 Oracle AI Database Globalization Support Guide를 참조하십시오.
Oracle Globalization Development Kit
Oracle Globalization Development Kit(GDK)에는 포괄적인 프로그래밍 API가 포함되어 있습니다.
API는 Java 및 PL/SQL 모두에 사용할 수 있으며, 전역 응용 프로그램을 생성하는 동안 발생하는 많은 설계, 개발 및 배치 문제를 해결하는 코드 예제와 설명서를 포함합니다. GDK는 개발 프로세스를 간소화하고 글로벌 환경을 지원하는 데 사용되는 인터넷 애플리케이션 개발 비용을 절감합니다.
GDK는 주로 Java용 GDK 및 PL/SQL용 GDK의 두 부분으로 구성됩니다. Java용 GDK는 Java 애플리케이션에 대한 세계화 지원을 제공합니다. PL/SQL용 GDK는 PL/SQL 프로그래밍 환경에 대한 Globalization 지원을 제공합니다. 두 부분에서 제공되는 기능은 동일하지 않습니다.
참조: Oracle AI Database Globalization Support Guide
비구조적 데이터
비정형 데이터는 더 작은 논리적 구조로 나뉘지 않는 데이터입니다.
전통적인 관계형 모델은 간단한 테이블에 맞는 단순한 구조화된 데이터를 다룹니다. 또한 Oracle Database는 표준 구성요소로 분해할 수 없는 비구조적 데이터에 대한 지원을 제공합니다. 구조화되지 않은 데이터에는 텍스트, 그래픽 이미지, 비디오 클립 및 사운드 파형이 포함됩니다.
Oracle Database에는 비정형 컨텐트를 처리하는 데이터 유형이 포함되어 있습니다. 이러한 데이터 유형은 데이터베이스에서 고유 유형으로 나타나며 SQL을 사용하여 query할 수 있습니다.
-
Oracle Database에서 XML 개요 Oracle XML DB는 고성능 XML 조작, 저장 및 검색과 관련된 Oracle Database 기술 집합입니다. Oracle XML DB는 상호 운용 가능한 방식으로 SQL 및 XML 데이터 모델을 모두 포함시켜 고유 XML 지원을 제공합니다.
-
Oracle Database의 JSON 개요 Oracle Database는 쿼리 및 인덱싱을 포함한 JavaScript 객체 표기법(JSON) 데이터에 대한 네이티브 지원을 제공합니다.
-
LOB 개요 LOB(대형 객체) 데이터 유형을 사용하면 대형 비정형 데이터 블록을 이진 형식 또는 문자 형식으로 저장하고 조작할 수 있습니다.
-
Oracle Text 개요 Oracle Text(텍스트)는 Oracle Database와 통합된 전체 텍스트 검색 기술입니다. Oracle Text는 파일 시스템, 데이터베이스 또는 웹에 저장된 모든 문서 또는 텍스트 컨텐트를 인덱스화합니다. 이러한 문서는 텍스트 콘텐츠, 메타데이터 또는 속성을 기반으로 검색할 수 있습니다.
-
Oracle Spatial and Graph 개요 Oracle Spatial and Graph(Spatial and Graph)에는 공간 데이터 및 분석, 물리적, 논리적, 네트워크, 소셜 및 시맨틱 그래프 애플리케이션을 위한 고급 기능이 포함되어 있습니다.
-
SQL 속성 그래프 개요 Oracle Database의 속성 그래프 기능은 Oracle Database에 대한 강력한 그래프 지원을 제공합니다.
Oracle Database의 XML 개요
Oracle XML DB는 고성능 XML 조작, 저장 및 검색과 관련된 Oracle Database 기술 집합입니다. Oracle XML DB는 상호 운용 가능한 방식으로 SQL 및 XML 데이터 모델을 모두 포함시켜 고유 XML 지원을 제공합니다.
Oracle XML DB는 응용 프로그램에서 처리한 데이터의 일부 또는 전부가 XML을 사용하여 표시되는 모든 Java 또는 PL/SQL 응용 프로그램에 적합합니다. 예를 들어, 응용 프로그램에 수집, 생성, 검증 및 검색해야 하는 많은 수의 XML 문서가 있을 수 있습니다.
Oracle XML DB는 다음과 같은 다양한 기능을 제공합니다.
-
SQL을 통해 액세스할 수 있도록 데이터베이스의 XML 문서를 나타낼 수 있는 고유
XMLType데이터 유형 -
XML 스키마, XPath, XQuery, XSLT 및 DOM과 같은 XML 표준 지원
-
XMLIndex- 고도로 구조화된 데이터에서 완전히 구조화되지 않은 데이터에 이르기까지 모든 형태의 XML 데이터를 지원합니다.
다음 예에서는 XMLType 유형의 orders 테이블을 생성합니다.
CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));
앞의 예에서는 호스트 컴퓨터의 물리적 디렉토리에 대한 데이터베이스의 논리적 이름인 SQL 디렉토리 객체도 만듭니다. 이 디렉토리는 XML 파일을 포함합니다. 예제에서는 purOrder.xml 파일의 XML 컨텐트를 orders 테이블에 삽입합니다.
Oracle XDK(XML Developer's Kit)에는 파일 시스템에서든 데이터베이스에서든 XML 문서를 읽고, 조작하고, 변환하고, 보기 위한 기본 구성 요소가 포함되어 있습니다. API 및 도구는 Java, C 및 C++에 사용할 수 있습니다. 프로덕션 Oracle XDK에는 상용 재배포 라이센스가 제공됩니다.
예 23-1 XMLType
CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));
Oracle Database의 JSON 개요
Oracle Database는 쿼리 및 인덱싱을 포함한 JavaScript 객체 표기법(JSON) 데이터에 대한 네이티브 지원을 제공합니다.
이 단원에서는 다음 항목을 다룹니다.
-
JSON이란? JavaScript Object Notation(JSON)은 객체, 배열 및 스칼라 데이터를 나타낼 수 있는 언어 독립적 텍스트 기반 데이터 형식입니다. 다양한 프로그래밍 언어가 JSON 데이터를 구문 분석하고 생성할 수 있습니다.
-
JSON 및 XML JSON과 XML은 모두 일반적으로 데이터 교환 언어로 사용됩니다. 관계형 데이터와 달리 JSON 데이터와 XML 데이터는 데이터를 정의하는 스키마 없이 데이터베이스에 저장, 인덱스화 및 쿼리할 수 있습니다.
-
JSON용 네이티브 데이터베이스 지원 JSON은 관계형 데이터베이스 기능이 부족한 noSQL 데이터베이스에 널리 저장됩니다. 반면, Oracle Database는 트랜잭션, 인덱싱, 선언형 쿼리, 뷰 등의 기능을 통해 JSON을 기본적으로 지원합니다.
JSON이란?
JavaScript Object Notation(JSON)은 객체, 배열 및 스칼라 데이터를 나타낼 수 있는 언어 독립적 텍스트 기반 데이터 형식입니다. 다양한 프로그래밍 언어가 JSON 데이터를 구문 분석하고 생성할 수 있습니다.
JSON은 일반적으로 데이터 교환 언어 역할을 합니다. 일반적으로 서버와 웹 응용 프로그램 간에 구조화된 데이터를 직렬화하고 네트워크를 통해 교환하는 데 사용됩니다. JSON은 HTML 포함 JavaScript으로 작성된 애플리케이션을 실행하는 웹 브라우저의 주요 데이터 형식입니다.
JavaScript 객체는 0개 이상의 등록 정보 이름 쌍 및 연관된 JSON 값의 연관 배열입니다. JSON 객체는 JavaScript 객체 리터럴로, 중괄호로 묶인 등록 정보 목록으로 작성되고, 이름-값 쌍은 쉼표로 구분되고, 각 쌍의 이름과 값은 콜론으로 구분됩니다. 객체 등록 정보는 키라고도 합니다. 객체 속성 이름-값 쌍을 객체 멤버라고도 합니다.
예 23-2 JSON 객체
이 예에서는 최상위 레벨 등록정보 이름이 PONumber, Reference, Requestor, User, Costcenter, ShippingInstruction, Special Instructions, AllowPartialShipment 및 LineItems인 구매 주문을 나타내는 JSON 객체를 보여줍니다.
{ "PONumber" : 1600,
"Reference" : "ABULL-20140421",
"Requestor" : "Alexis Bull",
"User" : "ABULL",
"CostCenter" : "A50",
"ShippingInstructions" : { "name" : "Alexis Bull",
"Address": { "street" : "200 Sporting Green",
"city" : "South San Francisco",
"state" : "CA",
"zipCode" : 99236,
"country" : "United States of America" },
"Phone" : [ { "type" : "Office", "number" : "909-555-7307" },
{ "type" : "Mobile", "number" : "415-555-1234" } ] },
"Special Instructions" : null,
"AllowPartialShipment" : false,
"LineItems" : [ { "ItemNumber" : 1,
"Part" : { "Description" : "One Magic Christmas",
"UnitPrice" : 19.95,
"UPCCode" : 13131092899 },
"Quantity" : 9.0 },
{ "ItemNumber" : 2,
"Part" : { "Description" : "Lethal Weapon",
"UnitPrice" : 19.95,
"UPCCode" : 85391628927 },
"Quantity" : 5.0 } ] }
앞의 예에서 대부분의 등록 정보에는 문자열 값이 있습니다. PONumber, zipCode, ItemNumber 및 Quantity에 숫자 값이 있습니다. Shipping Instructions 및 Address에는 객체가 값으로 포함됩니다. LineItems에는 배열이 값으로 포함됩니다.
주: JSON에 대한 보다 포괄적인 개요는 Oracle XML DB Developer's Guide를 참조하십시오.
JSON 및 XML
JSON과 XML은 모두 일반적으로 데이터 교환 언어로 사용됩니다. 관계형 데이터와 달리 JSON 데이터와 XML 데이터는 데이터를 정의하는 스키마 없이 데이터베이스에 저장, 인덱스화 및 쿼리할 수 있습니다.
JSON 데이터는 단순 정의 및 기능으로 인해 일반적으로 XML 데이터보다 생성, 구문 분석 및 처리가 더 쉽습니다. 또한 인간이 배우고 사용하는 것이 더 쉽습니다. 다음 표에서는 JSON과 XML의 차이점에 대해 설명합니다.
표 2 JSON과 XML의 차이점
| 기능 | JSON | XML |
|---|---|---|
| 단순하고 구조화된 데이터에 유용 | 예. | 예. 반정형 데이터와 복잡한 정형 데이터도 지원합니다. |
| 혼합 콘텐츠에 유용 | 아니요 | 예. |
| 속성, 네임스페이스, 상속 및 대체가 부족함 | 예. | 아니요 |
| 주문 시 중요도 | 아니요 | 예. |
| 주로 데이터가 아닌 문서용으로 사용됩니다. | 아니요 | 예. |
| 날짜 데이터 유형을 포함합니다. | 아니요 | 예. |
주: XML과 JSON을 보다 포괄적으로 비교하기 위한 Oracle AI Database JSON Developer's Guide
JSON에 대한 기본 데이터베이스 지원
JSON은 관계형 데이터베이스 기능이 부족한 noSQL 데이터베이스에 널리 저장됩니다. 반면, Oracle Database는 트랜잭션, 인덱싱, 선언형 쿼리, 뷰 등의 기능을 통해 JSON을 기본적으로 지원합니다.
OCI, .NET 및 JDBC를 포함한 다른 데이터베이스 데이터에 액세스하는 것과 동일한 방식으로 데이터베이스에 저장된 JSON 데이터에 액세스할 수 있습니다. JSON 데이터를 저장하는 가장 선호되는 방법은 쿼리 및 DML 처리에 최적화된 독자적인 바이너리 형식인 JSON 데이터 유형을 사용하는 것입니다. JSON 데이터 유형은 PL/SQL 프로그램 단위에 대한 열 유형이나 파라미터 유형을 포함하여 SQL 데이터 유형이 허용되는 대부분의 위치에서 사용할 수 있습니다.
Oracle SQL을 사용하면 JSON 데이터에 다음과 같은 작업을 수행할 수 있습니다.
-
비JSON 관계형 데이터로 JSON 데이터를 조인합니다.
-
SQL 함수
json_object및json_array를 사용하여 관계형 데이터에서 JSON 문서를 생성합니다. -
SQL 함수
json_table를 사용하여 JSON 데이터를 관계형 형식으로 투영합니다. -
is_json로 check 제약 조건을 생성하여 열에 JSON 데이터를 적용합니다. 데이터베이스는 check 제약 조건을 사용하여 열이 단순화된 구문과 같은 JSON 특정 작업에 대한 JSON인지 확인합니다. -
JSON 문서를 PL/SQL 객체로 조작합니다.
-
SQL 함수
json_query및json_value를 사용하여 Oracle JSON 경로 표현식을 인수로 받아들이고 대상 JSON 데이터와 일치시킵니다. -
JSON 데이터를 인덱스화합니다.
-
외부 테이블에 저장된 JSON 데이터를 질의합니다.
-
Oracle GoldenGate를 사용하여 JSON 데이터를 포함하는 열로 테이블을 복제합니다.
텍스트 JSON 데이터는 항상 유니코드 문자 집합(UTF8 또는 UTF16)을 사용합니다. Oracle Database는 JSON 데이터를 구문 분석하고 쿼리할 때 내부적으로 UTF8를 사용합니다. 이러한 처리에서 입력되거나 출력되는 데이터가 UTF8와 다른 문자 집합에 있어야 하는 경우 적절한 문자 집합 변환이 자동으로 수행됩니다. 주: Oracle Database의 JSON 지원에 대한 보다 포괄적인 개요는 Oracle AI Database JSON Developer's Guide를 참조하십시오.
LOB 개요
LOB(대형 객체) 데이터 유형을 사용하면 대형 비정형 데이터 블록을 이진 형식 또는 문자 형식으로 저장하고 조작할 수 있습니다.
대형 객체(LOB) 데이터 유형은 데이터에 임의로 하나씩 효율적으로 액세스할 수 있습니다.
-
내부 LOB 내부 LOB는 외부 파일이 아닌 데이터베이스 자체에 데이터를 저장합니다.
-
외부 LOB
BFILE(이진 파일 대형 객체 또는 LOB)는 외부 대형 객체입니다. -
SecureFiles SecureFiles LOB 저장 영역은 두 저장 영역 유형 중 하나입니다. 다른 유형은 BasicFiles LOB 저장 영역입니다.
내부 LOB
내부 LOB는 외부 파일이 아닌 데이터베이스 자체에 데이터를 저장합니다.
내부 LOB에는 다음이 포함됩니다.
-
CLOB(문자 LOB) - 텍스트 또는 XML 파일과 같은 많은 양의 텍스트를 데이터베이스 문자 집합에 저장합니다. -
NCLOB(국가별 문자 집합 LOB) - 유니코드 데이터를 저장합니다. -
BLOB(이진 LOB) - 많은 양의 이진 정보를 비트 스트림으로 저장하며 문자 집합 변환이 적용되지 않습니다.
데이터베이스는 다른 데이터 유형과는 다르게 LOB를 저장합니다. LOB 열을 생성하면 암시적으로 LOB 세그먼트와 LOB 인덱스가 생성됩니다. 항상 함께 저장되는 LOB 세그먼트와 LOB 인덱스를 포함하는 테이블스페이스는 테이블을 포함하는 테이블스페이스와 다를 수 있습니다.
주: 경우에 따라 데이터베이스는 별도의 LOB 세그먼트가 아닌 적은 양의 LOB 데이터를 테이블 자체에 저장할 수 있습니다.
LOB 세그먼트는 청크라는 조각으로 데이터를 저장합니다. 청크는 논리적으로 연속된 데이터 블록 집합이며 LOB에 대한 가장 작은 할당 단위입니다. 테이블의 행에는 LOB 인덱스를 가리키는 LOB 위치자라는 포인터가 저장됩니다. 테이블이 질의되면 데이터베이스는 LOB 인덱스를 사용하여 LOB 조각을 빠르게 찾습니다.
데이터베이스는 LOB 세그먼트의 읽기 일관성을 다른 데이터와 다르게 관리합니다. 언두 데이터를 사용하여 변경 사항을 기록하는 대신 데이터베이스는 이전 이미지를 세그먼트 자체에 저장합니다. 트랜잭션이 LOB를 변경하면 데이터베이스는 새 청크를 할당하고 이전 데이터는 그대로 둡니다. 트랜잭션이 롤백되면 데이터베이스는 인덱스 변경 사항을 롤백하여 이전 청크를 가리킵니다.
참조:
외부 LOB
BFILE(이진 파일 LOB)는 외부 LOB입니다.
데이터베이스는 운영 체제의 파일에 대한 포인터를 저장하므로 BFILE는 외부 LOB입니다. 외부 데이터는 읽기 전용입니다.
BFILE는 디렉토리 객체를 사용하여 데이터를 찾습니다. 사용되는 공간의 양은 디렉토리 객체 이름의 길이 및 파일 이름의 길이에 따라 달라집니다.
이진 파일이 데이터베이스 외부에 있으므로 BFILE는 내부 LOBS와 동일한 읽기 일관성 방식을 사용하지 않습니다. 파일의 데이터가 변경되면 동일한 이진 파일에서 반복 읽기를 수행하면 다른 결과가 발생할 수 있습니다.
SecureFiles
SecureFiles LOB 저장 영역은 두 저장 영역 유형 중 하나이며 다른 유형은 BasicFiles LOB 저장 영역입니다.
SECUREFILE LOB 파라미터는 압축 및 복제 취소(Advanced Compression Option의 일부)와 암호화(Advanced Security Option의 일부)를 비롯한 고급 기능을 제공합니다. Oracle Database 12c부터는 SecureFiles가 LOB에 대한 기본 저장 메커니즘입니다.
참조:
-
LOB 데이터 유형에 대한 자세한 내용은 Oracle AI Database SecureFiles and Large Objects Developer's Guide를 참조하십시오.
Oracle Text 개요
Oracle Text(Text)는 Oracle Database와 통합된 전체 텍스트 검색 기술입니다. Oracle Text는 파일 시스템, 데이터베이스 또는 웹에 저장된 모든 문서 또는 텍스트 컨텐트를 인덱스화합니다. 이러한 문서는 텍스트 콘텐츠, 메타데이터 또는 속성을 기반으로 검색할 수 있습니다.
Oracle Text는 다음과 같은 이점을 제공합니다.
-
Oracle Text를 사용하면 텍스트 검색을 단일 SQL 문에서 일반 데이터베이스 검색과 결합할 수 있습니다. 텍스트 인덱스는 데이터베이스에 있으며 텍스트 질의는 Oracle Database 프로세스에서 실행됩니다. 옵티마이저는 모든 쿼리에 대해 최상의 실행 계획을 선택할 수 있으므로 텍스트 및 구조화된 기준과 관련된 임시 쿼리에 대해 최상의 성능을 제공합니다.
-
Oracle Text를 XML 데이터와 함께 사용할 수 있습니다. 특히 XML 및 전체 텍스트 인덱스를 모두 활용하여
XMLIndex를 Oracle Text 인덱싱과 결합할 수 있습니다. -
Oracle Text SQL API를 사용하면 간단하고 직관적으로 Oracle Text 인덱스를 생성 및 유지 관리하고 검색을 실행할 수 있습니다.
사용 사례의 경우 전자 장비를 판매하는 경매 사이트에 대한 카탈로그 색인을 생성해야 한다고 가정합니다. 새 재고가 매일 추가됩니다. 품목 설명, 입찰 일자 및 가격을 함께 저장해야 합니다. 이 응용 프로그램은 혼합된 query에 대해 적절한 응답 시간을 필요로 합니다. 먼저 catalog 테이블을 생성하고 채웁니다. 그런 다음 Oracle Text를 사용하여 SELECT ... WHERE CATSEARCH 문에서 CATSEARCH 연산자로 질의할 수 있는 CTXCAT 인덱스를 생성합니다. 그림 23-4는 카탈로그 테이블, CTXCAT 인덱스 및 CATSEARCH 연산자를 사용하여 인덱스를 질의하는 카탈로그 응용 프로그램의 관계를 보여줍니다.
그림 4: 카탈로그 쿼리 애플리케이션

참조:
-
Oracle Text Application Developer's Guide 및 Oracle Text Reference
-
Oracle XML DB Developer's Guide - XML 데이터에 대해 전체 텍스트 검색을 수행하는 방법 학습
Oracle Spatial and Graph 개요
Oracle Spatial and Graph(Spatial and Graph)에는 공간 데이터 및 분석, 물리적, 논리적, 네트워크, 소셜 및 시맨틱 그래프 애플리케이션을 위한 고급 기능이 포함되어 있습니다.
공간 기능은 Oracle 데이터베이스의 공간 기능 모음에 대한 저장, 검색, 업데이트 및 질의를 용이하게 하는 스키마 및 함수를 제공합니다. 공간 데이터의 예로는 로드맵이 있습니다. 공간 데이터는 맵에 있는 오브젝트의 지구 위치(예: 경도 및 위도)를 나타냅니다. 맵이 렌더링되면 이 공간 데이터는 객체의 위치를 2차원 용지에 투영할 수 있습니다. 지리 정보 시스템(GIS)은 이 지리 상대 공간 데이터를 저장, 검색 및 렌더링할 수 있습니다. Oracle 데이터베이스가 이 공간 데이터를 저장할 때 Spatial 및 Graph를 사용하여 이 데이터를 조작 및 검색하고 이 데이터를 다른 데이터와 연관시킬 수 있습니다.
참조: Oracle Spatial Developer's Guide
SQL 속성 그래프 개요
Oracle Database의 속성 그래프 기능은 Oracle Database에 대한 강력한 그래프 지원을 제공합니다.
속성 그래프 기능을 사용하면 제품 추천, 사기 감지, 위험 분석, 타겟팅된 마케팅 등의 애플리케이션에 대해 고객 데이터, 소셜 네트워크 및 재무 트랜잭션과 같은 데이터 세트의 복잡한 관계를 탐색하고 검색할 수 있습니다. 이 고성능 그래프 기능은 약 60개의 사전 구축 알고리즘을 통해 고급 그래프 쿼리 언어 지원, 개발자 API 및 분석 기능을 제공합니다.
PGQL(등록정보 그래프 질의 언어) 지원을 포함한 등록정보 그래프 기능은 Oracle Database 12.2부터 사용할 수 있습니다. Oracle Database Release 26ai부터는 SQL:2023 표준에 정의된 대로 SQL을 사용하여 속성 그래프를 생성하고 query할 수도 있습니다.
Oracle Graph Server and Client는 Oracle Database의 속성 그래프 기능과 함께 작동하는 소프트웨어 패키지입니다. 여기에는 그래프 분석 알고리즘 실행을 위한 그래프 도구, 클라이언트 라이브러리 및 Oracle Graph Server가 포함됩니다.
관련 항목