메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
(새 문서: Oracle 19c에서의 **패키지(Package)**는 관련된 **PL/SQL 객체들(프로시저, 함수, 변수 등)**을 하나로 묶어 모듈화된 구조로 제공하는 기능입니다. 이를 통해 코드의 재사용성, 유지보수성, 성능을 크게 향상시킬 수 있습니다. ⸻ Oracle 19c 패키지 설명 1. 영문 원뜻 • Package = 꾸러미, 묶음 → 관련된 기능을 한 덩어리로 묶은 논리적 단위 ⸻ 2. 한글 원뜻 • 패키지 = 관련...)
 
편집 요약 없음
 
(같은 사용자의 중간 판 5개는 보이지 않습니다)
1번째 줄: 1번째 줄:
Oracle 19c에서의 **패키지(Package)**는 관련된 **PL/SQL 객체들(프로시저, 함수, 변수 등)**을 하나로 묶어 모듈화된 구조로 제공하는 기능입니다. 이를 통해 코드의 재사용성, 유지보수성, 성능을 크게 향상시킬 수 있습니다.
Oracle 19c에서의 **패키지(Package)**는 관련된 **PL/SQL 객체들(프로시저, 함수, 변수 등)**을 하나로 묶어 모듈화된 구조로 제공하는 기능입니다. 이를 통해 코드의 재사용성, 유지보수성, 성능을 크게 향상시킬 수 있습니다.


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


Oracle 19c 패키지 설명


1. 영문 원뜻
=== 특징 ===
• Package = 꾸러미, 묶음
{| class="wikitable" style="border-collapse: collapse; width: 100%; font-size: 14px;"
→ 관련된 기능을 한 덩어리로 묶은 논리적 단위
|-
 
! style="border-right: 1px solid #e0e0e0; padding: 8px 12px; text-align: left; background: #f5f5f5; width: 20%;" | 항목
! style="padding: 8px 12px; text-align: left; background: #f5f5f5;" | 설명
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''구성'''
| style="padding: 8px 12px;" | <code>Specification(사양)</code>과 <code>Body(본문)</code> 두 부분으로 구성됨
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''모듈화'''
| style="padding: 8px 12px;" | 관련 로직을 하나로 묶어 코드 관리 용이
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''성능 향상'''
| style="padding: 8px 12px;" | 한번 메모리에 로딩되면 여러 번 호출 가능
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''정보 은닉'''
| style="padding: 8px 12px;" | 외부에 노출할 부분과 숨길 부분을 명확히 구분 가능
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''컴파일 독립성'''
| style="padding: 8px 12px;" | 명세(Spec)만 변경되지 않으면 Body 수정은 다른 코드에 영향 없음
|}


2. 한글 원뜻
• 패키지 = 관련 기능들을 묶어 놓은 PL/SQL 코드 집합




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


(1) 패키지 사양(Specification)
(1) 패키지 사양(Specification)


<source lang=sql>
CREATE OR REPLACE PACKAGE math_pkg IS
CREATE OR REPLACE PACKAGE math_pkg IS
   FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER;
   FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER;
   FUNCTION subtract(x NUMBER, y NUMBER) RETURN NUMBER;
   FUNCTION subtract(x NUMBER, y NUMBER) RETURN NUMBER;
END math_pkg;
END math_pkg;
</source>


(2) 패키지 본문(Body)
(2) 패키지 본문(Body)


<source lang=sql>
CREATE OR REPLACE PACKAGE BODY math_pkg IS
CREATE OR REPLACE PACKAGE BODY math_pkg IS
   FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER IS
   FUNCTION add(x NUMBER, y NUMBER) RETURN NUMBER IS
51번째 줄: 59번째 줄:
   END;
   END;
END math_pkg;
END math_pkg;
</source>




56번째 줄: 66번째 줄:


5. 자주 사용되는 예시
=== 자주 사용되는 예시 ===


-- 함수 호출
-- 함수 호출
<source lang=sql>
SELECT math_pkg.add(10, 5) FROM dual;
SELECT math_pkg.add(10, 5) FROM dual;
</source>


-- 익명 블록에서 사용
-- 익명 블록에서 사용
<source lang=sql>
BEGIN
BEGIN
   DBMS_OUTPUT.PUT_LINE(math_pkg.subtract(20, 7));
   DBMS_OUTPUT.PUT_LINE(math_pkg.subtract(20, 7));
67번째 줄: 80번째 줄:
/
/


</source>






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




필요하다면 다음과 같은 Oracle 기본 제공 패키지도 설명해드릴 수 있습니다:
* DBMS_OUTPUT
DBMS_OUTPUT
* DBMS_SQL
DBMS_SQL
* UTL_FILE
UTL_FILE
* DBMS_SCHEDULER 등
DBMS_SCHEDULER 등


=== 고급 기능 ===
=== 고급 기능 ===


좋습니다! 아래에 Oracle 19c에서 사용하는 (1) 기본 제공 패키지와 (2) 사용자 정의 패키지 성능 최적화 방법 두 가지를 모두 자세히 설명드리겠습니다.




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


Oracle은 다양한 내장 패키지를 기본으로 제공하여 파일 처리, 출력, 이메일 발송, 스케줄링, 네트워크 통신 등 다양한 작업을 수행할 수 있도록 지원합니다.
Oracle은 다양한 내장 패키지를 기본으로 제공하여 파일 처리, 출력, 이메일 발송, 스케줄링, 네트워크 통신 등 다양한 작업을 수행할 수 있도록 지원합니다.
96번째 줄: 107번째 줄:
아래는 자주 사용하는 기본 제공 패키지 목록과 설명입니다.
아래는 자주 사용하는 기본 제공 패키지 목록과 설명입니다.


패키지 이름 설명
{| class="wikitable" style="border-collapse: collapse; width: 100%; font-size: 14px;"
DBMS_OUTPUT PUT_LINE을 통해 PL/SQL에서 텍스트 출력 가능. 디버깅용으로 자주 사용.
|-
UTL_FILE 서버 디스크의 파일 읽기/쓰기 가능. 로그 저장 등에 활용됨.
! style="border-right: 1px solid #e0e0e0; padding: 8px 12px; text-align: left; background: #f5f5f5; width: 20%;" | 패키지 이름
DBMS_SQL 동적 SQL 실행에 사용. 컴파일 시점에 SQL 문이 정해지지 않을 때 유용.
! style="padding: 8px 12px; text-align: left; background: #f5f5f5;" | 설명
DBMS_SCHEDULER 작업(Job), 프로그램(Program), 스케줄(Schedule) 등을 생성해 정기적인 작업 수행 가능.
|-
DBMS_JOB Oracle의 구버전 스케줄러. 현재는 DBMS_SCHEDULER 권장.
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_OUTPUT'''
UTL_MAIL 이메일 전송 가능. SMTP 서버 설정이 필요.
| style="padding: 8px 12px;" | <code>PUT_LINE</code>을 통해 PL/SQL에서 텍스트 출력 가능. 디버깅용으로 자주 사용.
UTL_HTTP HTTP 프로토콜을 이용한 외부 웹 요청 가능. REST API 호출 등에 사용.
|-
DBMS_METADATA 테이블, 뷰, 인덱스 등의 DDL 스크립트를 추출할 수 있음.
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''UTL_FILE'''
DBMS_STATS 통계 정보를 수집하여 옵티마이저 성능을 최적화.
| style="padding: 8px 12px;" | 서버 디스크의 파일 읽기/쓰기 가능. 로그 저장 등에 활용됨.
DBMS_ALERT / DBMS_PIPE 세션 간 통신 기능 제공. 이벤트 기반 처리 가능.
|-
DBMS_CRYPTO 암호화, 해시, 서명 기능 제공. 보안 관련 기능 수행 가능.
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_SQL'''
| style="padding: 8px 12px;" | 동적 SQL 실행에 사용. 컴파일 시점에 SQL 문이 정해지지 않을 때 유용.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_SCHEDULER'''
| style="padding: 8px 12px;" | 작업(Job), 프로그램(Program), 스케줄(Schedule) 등을 생성해 정기적인 작업 수행 가능.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_JOB'''
| style="padding: 8px 12px;" | Oracle의 구버전 스케줄러. 현재는 DBMS_SCHEDULER 권장.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''UTL_MAIL'''
| style="padding: 8px 12px;" | 이메일 전송 가능. SMTP 서버 설정이 필요.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''UTL_HTTP'''
| style="padding: 8px 12px;" | HTTP 프로토콜을 이용한 외부 웹 요청 가능. REST API 호출 등에 사용.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_METADATA'''
| style="padding: 8px 12px;" | 테이블, 뷰, 인덱스 등의 DDL 스크립트를 추출할 수 있음.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_STATS'''
| style="padding: 8px 12px;" | 통계 정보를 수집하여 옵티마이저 성능을 최적화.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_ALERT / DBMS_PIPE'''
| style="padding: 8px 12px;" | 세션 간 통신 기능 제공. 이벤트 기반 처리 가능.
|-
| style="border-right: 1px solid #e0e0e0; padding: 8px 12px; vertical-align: top;" | '''DBMS_CRYPTO'''
| style="padding: 8px 12px;" | 암호화, 해시, 서명 기능 제공. 보안 관련 기능 수행 가능.
|}


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


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


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


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


2. 필요한 항목만 Specification에 공개
2. 필요한 항목만 Specification에 공개
외부에 보여줄 함수/프로시저만 명세에 넣고, 내부 로직은 Body에 숨기기.
* 외부에 보여줄 함수/프로시저만 명세에 넣고, 내부 로직은 Body에 숨기기.
예: 유틸 함수는 내부 전용으로 숨김 처리.
* 예: 유틸 함수는 내부 전용으로 숨김 처리.


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


4. 컴파일 효율성 고려
4. 컴파일 효율성 고려
패키지 사양(Spec)을 변경하면 전체 Body와 관련 의존 객체가 무효화되므로 변경 최소화.
* 패키지 사양(Spec)을 변경하면 전체 Body와 관련 의존 객체가 무효화되므로 변경 최소화.


5. 바디 없는 패키지 사용
5. 바디 없는 패키지 사용
상수나 공용 상수 목록만 필요할 경우 Body 없이 Spec만 작성해 사용 가능.
* 상수나 공용 상수 목록만 필요할 경우 Body 없이 Spec만 작성해 사용 가능.
 
<source lang=sql>
CREATE OR REPLACE PACKAGE const_pkg IS
CREATE OR REPLACE PACKAGE const_pkg IS
   c_tax_rate CONSTANT NUMBER := 0.1;
   c_tax_rate CONSTANT NUMBER := 0.1;
END const_pkg;
END const_pkg;
</source>


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


7. BULK COLLECT, FORALL 등 고급 기법 사용
7. BULK COLLECT, FORALL 등 고급 기법 사용
대량 데이터를 다룰 때는 성능을 위해 BULK COLLECT와 FORALL 사용.
* 대량 데이터를 다룰 때는 성능을 위해 BULK COLLECT와 FORALL 사용.
 
<source lang=sql>
FORALL i IN 1..v_data.COUNT
FORALL i IN 1..v_data.COUNT
   INSERT INTO my_table VALUES v_data(i);
   INSERT INTO my_table VALUES v_data(i);
 
</source>
 
 


추가 팁: 패키지 성능 모니터링
추가 팁: 패키지 성능 모니터링
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 성능 분석도 가능합니다.