외부 프로시저 개요
Oracle 데이터베이스에서 외부 프로시저(External Procedure)는 PL/SQL 코드 내에서 C, C++, Java 등의 외부 프로그래밍 언어로 작성된 함수나 프로시저를 호출할 수 있도록 하는 강력한 기능입니다. 이를 통해 PL/SQL의 한계를 극복하고, 운영체제 수준의 기능이나 복잡한 알고리즘을 데이터베이스 내에서 직접 실행할 수 있습니다.
외부 프로시저의 장점
- PL/SQL 기능 확장: PL/SQL로 구현하기 어려운 기능을 외부 언어를 통해 구현합니다.
- 성능 향상: 특정 연산에 최적화된 외부 언어를 사용하여 PL/SQL 성능을 개선합니다.
- 시스템 자원 활용: 데이터베이스 서버의 시스템 자원을 효율적으로 사용합니다.
- 코드 재사용성: 기존의 외부 라이브러리나 코드를 데이터베이스 환경에서 활용합니다.
외부 프로시저 설정 단계
외부 프로시저를 사용하기 위한 설정은 다음과 같습니다.
- DLL 생성: 외부 프로시저 코드를 컴파일하여 동적 링크 라이브러리(DLL) 파일을 생성합니다.
- LIBRARY 객체 생성: Oracle 데이터베이스 내에 DLL 파일을 나타내는 LIBRARY 객체를 생성합니다.
- PL/SQL 프로시저 생성: 외부 프로시저를 호출하는 PL/SQL 프로시저를 생성합니다.
- 권한 부여: 사용자에게 외부 프로시저 실행 권한을 부여합니다.
예제: 간단한 C 외부 프로시저
다음은 두 숫자를 더하는 간단한 C 외부 프로시저 예제입니다.
1. C 코드 (my_add.c)
#include <stdio.h>
#include <stdlib.h>
int my_add(int a, int b)
{
return a + b;
}
2. DLL 생성 (Linux)
gcc -c my_add.c -o my_add.o
gcc -shared -o my_add.so my_add.o
3. DLL 생성 (Windows)
Visual Studio 개발자 명령 프롬프트에서 다음 명령을 실행합니다.
cl /LD my_add.c
4. Oracle에서 LIBRARY 생성
CREATE OR REPLACE LIBRARY my_add_lib AS '/path/to/my_add.so'; -- Linux
-- 또는
CREATE OR REPLACE LIBRARY my_add_lib AS 'C:\path\to\my_add.dll'; -- Windows
5. PL/SQL 프로시저 생성
CREATE OR REPLACE PROCEDURE plsql_add(a IN NUMBER, b IN NUMBER, result OUT NUMBER) AS
EXTERNAL
NAME "my_add" -- C 함수 이름
LIBRARY my_add_lib -- LIBRARY 객체 이름
LANGUAGE C -- 언어 지정
PARAMETERS ((a, VALUE), (b, VALUE), (result, VALUE));
BEGIN
NULL;
END;
/
6. 권한 부여
GRANT EXECUTE ON plsql_add TO public;
7. PL/SQL 프로시저 실행
VARIABLE result NUMBER;
EXECUTE plsql_add(5, 3, :result);
PRINT result;
JAVA 외부 프로시저 예시
JAVA 클래스를 생성하고, Oracle 데이터베이스에서 사용하는 방법입니다.
1. JAVA 코드 (MyJavaClass.java)
public class MyJavaClass {
public static int add(int a, int b) {
return a + b;
}
}
2. 클래스 컴파일
javac MyJavaClass.java
3. JAVA 클래스 로드
loadjava -u user/password@database MyJavaClass.class
4. PL/SQL 프로시저 생성
CREATE OR REPLACE PROCEDURE java_add (a IN NUMBER, b IN NUMBER, result OUT NUMBER)
AS LANGUAGE JAVA
NAME 'MyJavaClass.add(int, int) return int';
/
5. 권한 부여
GRANT EXECUTE ON java_add TO public;
6. PL/SQL 프로시저 실행
VARIABLE result NUMBER;
EXECUTE java_add(5, 3, :result);
PRINT result;
보안 고려사항
외부 프로시저는 시스템에 직접 접근할 수 있으므로 보안에 매우 주의해야 합니다.
- 최소 권한 원칙: 외부 프로시저가 필요한 최소한의 권한만 가지도록 설정합니다.
- DLL 위치 제한: DLL 파일이 위치하는 디렉터리를 제한하여 악성 DLL 로딩을 방지합니다.
- 코드 검증: 외부 프로시저 코드를 철저히 검증하여 보안 취약점을 제거합니다.
- 인증 및 암호화: 데이터베이스 링크를 사용하는 경우, 인증 및 암호화 설정을 강화합니다.
매개변수 유형 매핑
PL/SQL 데이터 유형 | C 데이터 유형 |
---|---|
NUMBER | int, float, double |
VARCHAR2 | char*, unsigned char* |
DATE | OCI Date Type |
결론
외부 프로시저는 Oracle 데이터베이스의 유용한 확장 기능이지만, 보안에 대한 철저한 이해와 관리가 필요합니다. 위에서 제시된 단계와 예제를 통해 안전하고 효율적인 외부 프로시저를 개발하고 활용할 수 있습니다.