Oracle AI 데이터베이스 JavaScript 통합 개발 가이드

핵심 개념 요약

Oracle AI 데이터베이스의 다국어 엔진(MLE)은 JavaScript 실행 기능을 데이터베이스 레이어에 통합합니다. 이 "스마트 DB" 접근 방식은 애플리케이션 로직과 데이터를 동일 계층에 배치하여 성능 향상, 보안 강화, 데이터 처리 간소화를 실현합니다.

1. 데이터베이스 내 JavaScript 실행

주요 실행 방식 두 가지:

  • 동적 실행: DBMS_MLE PL/SQL 패키지를 이용한 익명 스크립트 실행. 코드 지속성 없이 일회성 작업에 적합
  • MLE 모듈 호출: 지속적 데이터베이스 객체로 저장된 JavaScript 코드. 호출 규격(Call Specification)을 통해 PL/SQL 함수처럼 호출 가능

2. MLE 모듈과 환경

MLE 모듈:

  • CREATE MLE MODULE DDL로 생성되는 ES6 표준 코드 객체
  • export 키워드로 외부 노출 기능 지정

MLE 환경:

  • JavaScript 런타임 설정 관리 객체
  • 모듈 임포트 매핑 및 언어 옵션(예: strict 모드) 구성

3. 호출 규격(Call Specification)

PL/SQL과 JavaScript 간 인터페이스:

  • 모듈 호출 규격: CREATE ... AS MLE MODULE module_name SIGNATURE 'function(types)'
  • 인라인 호출 규격: CREATE ... AS MLE LANGUAGE JAVASCRIPT {{ ... }}로 직접 코드 삽입

4. SQL/PL-SQL 호출

mle-js-oracledb 드라이버:

  • 동기적 실행이 기본인 내장 모듈
  • 전역 session.execute()로 쿼리 실행
  • SQL 인젝션 방지를 위한 바인드 변수 필수 사용

FFI(Foreign Function Interface):

  • mle-js-plsql-ffi 모듈 제공
  • PL/SQL 객체를 JavaScript 스타일로 호출

5. SODA 컬렉션 활용

  • NoSQL 스타일 JSON 문서 관리 API
  • 전역 soda 객체로 컬렉션 CRUD 작업 수행
  • SQL 지식 없이 문서 처리 가능

6. 보안 고려사항

제한 실행 컨텍스트:

  • PURE 키워드로 활성화
  • 데이터베이스 상태 접근 차단된 샌드박스 환경
  • 외부 라이브러리 실행에 적합

실용 코드 예제

예제 1: MLE 모듈 생성 및 활용

-- 주문 총계 계산 모듈 생성
CREATE OR REPLACE MLE MODULE order_module LANGUAGE JAVASCRIPT AS
export function calculateOrderTotal(items) {
    return items.reduce(
        (total, item) => total + (item.UnitPrice * item.Quantity), 
        0
    );
}
/

-- 호출 규격 등록
CREATE OR REPLACE FUNCTION get_order_total(
    p_items JSON
) RETURN NUMBER
AS MLE MODULE order_module
SIGNATURE 'calculateOrderTotal';
/

예제 2: 인라인 호출 규격

-- 타임스탬프를 Epoch 시간으로 변환
CREATE OR REPLACE FUNCTION timestamp_to_epoch(
    input_time TIMESTAMP WITH TIME ZONE
) RETURN NUMBER
AS MLE LANGUAGE JAVASCRIPT {{
    const timestamp = new Date(input_time);
    if (isNaN(timestamp)) throw new Error("Invalid timestamp");
    return timestamp.getTime();
}};
/

예제 3: SQL 드라이버 사용

-- 관리자별 부서 조회
CREATE OR REPLACE PROCEDURE query_departments_by_manager(
    manager_id NUMBER
) AS MLE LANGUAGE JAVASCRIPT {{
    const queryResult = session.execute(
        `SELECT department_name 
         FROM hr.departments 
         WHERE manager_id = :mgr_id`,
        [manager_id]
    );
    queryResult.rows.forEach(row => 
        console.log(`Department: ${row.DEPARTMENT_NAME}`)
    );
}};
/

예제 4: SODA 작업 흐름

-- JSON 문서 관리 데모
CREATE OR REPLACE PROCEDURE soda_collection_demo() AS MLE LANGUAGE JAVASCRIPT {{
    const collection = soda.createCollection("EmployeeRecords");
    const newDoc = { 
        empId: 101, 
        name: "John Doe", 
        position: "Developer" 
    };
    collection.insertOne(newDoc);
    
    const cursor = collection.find().getCursor();
    let document;
    while (document = cursor.getNext()) {
        console.log(document.getContent());
    }
    cursor.close();
}};
/

핵심 기술 Q&A

  1. 동적 실행과 MLE 모듈 호출의 차이: 일회성 실행 vs 영구적 재사용
  2. PURE 컨텍스트 보안 기능: 데이터베이스 상태 접근 차단
  3. 호출 규격 역할: JavaScript- PL/SQL 인터페이스 제공
  4. mle-js-oracledb 특징: 동기적 실행 모드
  5. SODA 적용 영역: JSON 문서 관리 NoSQL 솔루션

주요 용어집

용어설명
MLE 모듈데이터베이스에 저장된 재사용 가능한 JavaScript 코드 블록
호출 규격JavaScript 함수를 SQL/PL-SQL에서 호출 가능하게 매핑
SODA APINoSQL 방식 JSON 문서 관리 인터페이스
FFIPL/SQL 프로시저를 JavaScript 스타일로 호출하는 인터페이스
PURE 실행데이터베이스 접근이 차단된 보안 실행 모드

태그: Oracle Database JavaScript MLE SODA FFI

7월 13일 03:53에 게시됨