핵심 개념 요약
Oracle AI 데이터베이스의 다국어 엔진(MLE)은 JavaScript 실행 기능을 데이터베이스 레이어에 통합합니다. 이 "스마트 DB" 접근 방식은 애플리케이션 로직과 데이터를 동일 계층에 배치하여 성능 향상, 보안 강화, 데이터 처리 간소화를 실현합니다.
1. 데이터베이스 내 JavaScript 실행
주요 실행 방식 두 가지:
- 동적 실행:
DBMS_MLEPL/SQL 패키지를 이용한 익명 스크립트 실행. 코드 지속성 없이 일회성 작업에 적합 - MLE 모듈 호출: 지속적 데이터베이스 객체로 저장된 JavaScript 코드. 호출 규격(Call Specification)을 통해 PL/SQL 함수처럼 호출 가능
2. MLE 모듈과 환경
MLE 모듈:
CREATE MLE MODULEDDL로 생성되는 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
- 동적 실행과 MLE 모듈 호출의 차이: 일회성 실행 vs 영구적 재사용
- PURE 컨텍스트 보안 기능: 데이터베이스 상태 접근 차단
- 호출 규격 역할: JavaScript- PL/SQL 인터페이스 제공
- mle-js-oracledb 특징: 동기적 실행 모드
- SODA 적용 영역: JSON 문서 관리 NoSQL 솔루션
주요 용어집
| 용어 | 설명 |
|---|---|
| MLE 모듈 | 데이터베이스에 저장된 재사용 가능한 JavaScript 코드 블록 |
| 호출 규격 | JavaScript 함수를 SQL/PL-SQL에서 호출 가능하게 매핑 |
| SODA API | NoSQL 방식 JSON 문서 관리 인터페이스 |
| FFI | PL/SQL 프로시저를 JavaScript 스타일로 호출하는 인터페이스 |
| PURE 실행 | 데이터베이스 접근이 차단된 보안 실행 모드 |