본문 바로가기
database/oracle

🧱 24편. 패키지(PACKAGE)와 재사용 전략

by 죄니안죄니 2025. 5. 7.

🧱 24편. 패키지(PACKAGE)와 재사용 전략

PL/SQL에서 반복되는 로직을 구조화하고 모듈로 재사용할 수 있게 해주는 가장 강력한 도구는 PACKAGE입니다.
이번 글에서는 패키지의 구조(헤더/바디), 함수·프로시저 포함 방법, 전역 변수 관리 등 실무 중심의 작성 패턴을 정리합니다.


📦 1. PACKAGE란?

PACKAGE는 프로시저, 함수, 변수, 커서 등 PL/SQL 요소를 하나의 모듈 단위로 묶어 놓은 것입니다.
 재사용성과 유지보수성이 뛰어나고, 대형 시스템에서 핵심적인 구조로 활용됩니다.


📄 2. PACKAGE의 구조

① Package Specification (헤더)

CREATE OR REPLACE PACKAGE emp_pkg IS
  -- 전역 변수
  g_bonus_rate NUMBER := 0.1;
  
  -- 프로시저/함수 선언
  PROCEDURE raise_salary(p_empno IN NUMBER, p_amount IN NUMBER);
  FUNCTION get_annual_salary(p_empno IN NUMBER) RETURN NUMBER;
END emp_pkg;

② Package Body (본문)

CREATE OR REPLACE PACKAGE BODY emp_pkg IS

  PROCEDURE raise_salary(p_empno IN NUMBER, p_amount IN NUMBER) IS
  BEGIN
    UPDATE EMP
    SET SAL = SAL + p_amount
    WHERE EMPNO = p_empno;
  END;

  FUNCTION get_annual_salary(p_empno IN NUMBER) RETURN NUMBER IS
    v_sal EMP.SAL%TYPE;
  BEGIN
    SELECT SAL INTO v_sal FROM EMP WHERE EMPNO = p_empno;
    RETURN v_sal * 12 + (v_sal * 12 * g_bonus_rate);
  END;

END emp_pkg;

📞 3. 패키지 호출 방법

BEGIN
  emp_pkg.raise_salary(7369, 500);
  DBMS_OUTPUT.PUT_LINE(emp_pkg.get_annual_salary(7369));
END;

🧠 4. 실무 적용 전략

  • 여러 관련 로직을 하나의 패키지에 묶어서 **도메인 단위 모듈화**
  • 패키지 헤더에는 외부에 공개할 함수/프로시저만 선언
  • 테스트용 변수나 내부 로직은 바디에만 숨겨두어 정보 은닉
  • 전역 변수로 공통 상수, 설정값 등을 관리 가능

🚧 5. 유지보수 시 유의점

  • 패키지 바디만 변경하면 다른 오브젝트 재컴파일 불필요
  • 패키지 헤더가 바뀌면 의존 오브젝트 모두 invalid → 재컴파일 필요
  • 대형 시스템에서는 패키지 단위 배포/버전 관리 권장

📝 마무리

이번 글에서는 패키지(PACKAGE)의 구조와 재사용 전략을 정리했습니다.
이를 통해 PL/SQL 로직을 체계적으로 분리하고 유지보수하기 쉬운 형태로 구성할 수 있습니다.
다음 파트에서는 운영/보안/백업과 관련된 내용을 이어가겠습니다. (26편: Oracle Data Pump 백업 및 복구)

댓글