외부 프로시저 관리

외부 프로시저 개요

Oracle 데이터베이스에서 외부 프로시저(External Procedure)는 PL/SQL 코드 내에서 C, C++, Java 등의 외부 프로그래밍 언어로 작성된 함수나 프로시저를 호출할 수 있도록 하는 강력한 기능입니다. 이를 통해 PL/SQL의 한계를 극복하고, 운영체제 수준의 기능이나 복잡한 알고리즘을 데이터베이스 내에서 직접 실행할 수 있습니다.

외부 프로시저의 장점

  • PL/SQL 기능 확장: PL/SQL로 구현하기 어려운 기능을 외부 언어를 통해 구현합니다.
  • 성능 향상: 특정 연산에 최적화된 외부 언어를 사용하여 PL/SQL 성능을 개선합니다.
  • 시스템 자원 활용: 데이터베이스 서버의 시스템 자원을 효율적으로 사용합니다.
  • 코드 재사용성: 기존의 외부 라이브러리나 코드를 데이터베이스 환경에서 활용합니다.

외부 프로시저 설정 단계

외부 프로시저를 사용하기 위한 설정은 다음과 같습니다.

  1. DLL 생성: 외부 프로시저 코드를 컴파일하여 동적 링크 라이브러리(DLL) 파일을 생성합니다.
  2. LIBRARY 객체 생성: Oracle 데이터베이스 내에 DLL 파일을 나타내는 LIBRARY 객체를 생성합니다.
  3. PL/SQL 프로시저 생성: 외부 프로시저를 호출하는 PL/SQL 프로시저를 생성합니다.
  4. 권한 부여: 사용자에게 외부 프로시저 실행 권한을 부여합니다.

예제: 간단한 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 데이터베이스의 유용한 확장 기능이지만, 보안에 대한 철저한 이해와 관리가 필요합니다. 위에서 제시된 단계와 예제를 통해 안전하고 효율적인 외부 프로시저를 개발하고 활용할 수 있습니다.

위로 스크롤