프로시저

프로시저(Stored Procedure)는 절차적 SQL을 활용해 특정 기능을 수행하는 코드 묶음을 데이터베이스에 미리 저장해 두고, 필요할 때 이름으로 호출하는 객체다. 단순한 SELECT/INSERT 한 줄을 넘어, 변수 선언·조건 분기·반복문이 가능한 데이터베이스 안의 작은 프로그램이다.

특징

  • 매개변수를 받아 동작 결과나 출력값을 반환할 수 있다.
  • 한 번 컴파일된 후 실행 계획이 캐싱되어 반복 호출 시 빠르다.
  • 트랜잭션 단위로 묶어 데이터 일관성을 유지하기 쉽다.

장점

  • 성능: 네트워크 왕복 횟수 감소, 실행 계획 재사용
  • 보안: 직접 테이블 접근 대신 프로시저로만 접근 허용 가능 → SQL Injection 위험 완화
  • 재사용성: 비즈니스 로직을 한 곳에 모아 여러 애플리케이션에서 호출
  • 트랜잭션 처리: 여러 SQL을 원자적으로 묶어 처리

단점

  • 이식성: 벤더별 문법 차이가 커서 DB 갈아타기 어렵다.
  • 버전 관리: 일반 코드와 함께 다루기 까다롭다.
  • 디버깅: 애플리케이션 코드보다 추적이 어렵다.
  • 로직 분산: 비즈니스 규칙이 DB와 앱에 분산되면 유지보수가 어려워진다.

함수 vs 프로시저

항목함수(Function)프로시저(Procedure)
반환반드시 값 반환반환 없을 수 있음
호출SQL 안에서 가능별도 CALL 문
트랜잭션 제어보통 불가가능

관련 노트

  • DBMS: 프로시저가 동작하는 환경
  • DDL · DML · DCL: SQL 문법 분류
  • SQL Injection: 프로시저로 완화할 수 있는 위협