메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
59번째 줄: 59번째 줄:
   END;
   END;
END math_pkg;
END math_pkg;
<source lang=sql>
</source>
 




186번째 줄: 187번째 줄:


추가 팁: 패키지 성능 모니터링
추가 팁: 패키지 성능 모니터링
Oracle의 DBA_OBJECTS, DBA_DEPENDENCIES 뷰 등을 통해 패키지 상태 및 의존성을 점검할 수 있습니다.
* Oracle의 DBA_OBJECTS, DBA_DEPENDENCIES 뷰 등을 통해 패키지 상태 및 의존성을 점검할 수 있습니다.
DBMS_PROFILER 또는 DBMS_HPROF를 사용하면 PL/SQL 성능 분석도 가능합니다.
* DBMS_PROFILER 또는 DBMS_HPROF를 사용하면 PL/SQL 성능 분석도 가능합니다.
 


[[category:oracle]]
[[category:oracle]]

2025년 5월 18일 (일) 15:15 기준 최신판

Oracle 19c에서의 **패키지(Package)**는 관련된 **PL/SQL 객체들(프로시저, 함수, 변수 등)**을 하나로 묶어 모듈화된 구조로 제공하는 기능입니다. 이를 통해 코드의 재사용성, 유지보수성, 성능을 크게 향상시킬 수 있습니다.


menu_book Oracle 19c 패키지 설명
  • (영문) Package = 꾸러미, 묶음 → 관련된 기능을 한 덩어리로 묶은 논리적 단위
  • (한글) 패키지 = 관련 기능들을 묶어 놓은 PL/SQL 코드 집합


특징

항목 설명
구성 Specification(사양)Body(본문) 두 부분으로 구성됨
모듈화 관련 로직을 하나로 묶어 코드 관리 용이
성능 향상 한번 메모리에 로딩되면 여러 번 호출 가능
정보 은닉 외부에 노출할 부분과 숨길 부분을 명확히 구분 가능
컴파일 독립성 명세(Spec)만 변경되지 않으면 Body 수정은 다른 코드에 영향 없음


사용 방법

(1) 패키지 사양(Specification)

CREATE OR REPLACE PACKAGE math_pkg IS
  FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER;
  FUNCTION subtract(x NUMBER, y NUMBER) RETURN NUMBER;
END math_pkg;


(2) 패키지 본문(Body)

CREATE OR REPLACE PACKAGE BODY math_pkg IS
  FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN x + y;
  END;

  FUNCTION subtract(x NUMBER, y NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN x - y;
  END;
END math_pkg;



자주 사용되는 예시

-- 함수 호출

SELECT math_pkg.add(10, 5) FROM dual;

-- 익명 블록에서 사용

BEGIN
  DBMS_OUTPUT.PUT_LINE(math_pkg.subtract(20, 7));
END;
/


주의사항

  • 사양 변경 시 전체 패키지 재컴파일 필요
  • 패키지 바디 없이도 사양만으로 컴파일 가능 (예: 상수 정의용)
  • 너무 많은 기능을 넣으면 복잡도 증가 → 기능별로 나누는 것이 좋음

  • DBMS_OUTPUT
  • DBMS_SQL
  • UTL_FILE
  • DBMS_SCHEDULER 등

고급 기능

(1) Oracle 19c 기본 제공 패키지 정리

Oracle은 다양한 내장 패키지를 기본으로 제공하여 파일 처리, 출력, 이메일 발송, 스케줄링, 네트워크 통신 등 다양한 작업을 수행할 수 있도록 지원합니다.

아래는 자주 사용하는 기본 제공 패키지 목록과 설명입니다.

패키지 이름 설명
DBMS_OUTPUT PUT_LINE을 통해 PL/SQL에서 텍스트 출력 가능. 디버깅용으로 자주 사용.
UTL_FILE 서버 디스크의 파일 읽기/쓰기 가능. 로그 저장 등에 활용됨.
DBMS_SQL 동적 SQL 실행에 사용. 컴파일 시점에 SQL 문이 정해지지 않을 때 유용.
DBMS_SCHEDULER 작업(Job), 프로그램(Program), 스케줄(Schedule) 등을 생성해 정기적인 작업 수행 가능.
DBMS_JOB Oracle의 구버전 스케줄러. 현재는 DBMS_SCHEDULER 권장.
UTL_MAIL 이메일 전송 가능. SMTP 서버 설정이 필요.
UTL_HTTP HTTP 프로토콜을 이용한 외부 웹 요청 가능. REST API 호출 등에 사용.
DBMS_METADATA 테이블, 뷰, 인덱스 등의 DDL 스크립트를 추출할 수 있음.
DBMS_STATS 통계 정보를 수집하여 옵티마이저 성능을 최적화.
DBMS_ALERT / DBMS_PIPE 세션 간 통신 기능 제공. 이벤트 기반 처리 가능.
DBMS_CRYPTO 암호화, 해시, 서명 기능 제공. 보안 관련 기능 수행 가능.

기본 제공 패키지를 사용하려면 DBA 권한 또는 특정 권한이 필요할 수 있으며, 일부 패키지는 오라클 서버 설정에 따라 기본적으로 비활성화되어 있을 수 있습니다.

(2) 사용자 정의 패키지 성능 최적화 방법

패키지를 효율적으로 사용하려면 다음의 최적화 전략을 따르는 것이 좋습니다.

1. 자주 쓰는 로직은 패키지화

  • 반복적으로 사용하는 로직(예: 날짜 계산, 코드 변환 등)은 패키지에 넣어 재사용.

2. 필요한 항목만 Specification에 공개

  • 외부에 보여줄 함수/프로시저만 명세에 넣고, 내부 로직은 Body에 숨기기.
  • 예: 유틸 함수는 내부 전용으로 숨김 처리.

3. 전역 변수 사용 시 주의

  • 패키지 전역 변수는 세션 단위로 관리되며, 모든 호출에 공유되지 않음.
  • 상태 관리가 필요한 경우 전역 변수 사용보다 테이블 저장 권장.

4. 컴파일 효율성 고려

  • 패키지 사양(Spec)을 변경하면 전체 Body와 관련 의존 객체가 무효화되므로 변경 최소화.

5. 바디 없는 패키지 사용

  • 상수나 공용 상수 목록만 필요할 경우 Body 없이 Spec만 작성해 사용 가능.
CREATE OR REPLACE PACKAGE const_pkg IS
  c_tax_rate CONSTANT NUMBER := 0.1;
END const_pkg;


6. 예외 처리 일관화

  • 공용 예외 처리 프로시저를 패키지에 넣어, 다른 PL/SQL 코드에서 통일되게 사용 가능.

7. BULK COLLECT, FORALL 등 고급 기법 사용

  • 대량 데이터를 다룰 때는 성능을 위해 BULK COLLECT와 FORALL 사용.
FORALL i IN 1..v_data.COUNT
  INSERT INTO my_table VALUES v_data(i);

추가 팁: 패키지 성능 모니터링

  • Oracle의 DBA_OBJECTS, DBA_DEPENDENCIES 뷰 등을 통해 패키지 상태 및 의존성을 점검할 수 있습니다.
  • DBMS_PROFILER 또는 DBMS_HPROF를 사용하면 PL/SQL 성능 분석도 가능합니다.