프로시저
프로시저(Stored Procedure)는 절차적 SQL을 활용해 특정 기능을 수행하는 코드 묶음을 데이터베이스에 미리 저장해 두고, 필요할 때 이름으로 호출하는 객체다. 단순한 SELECT/INSERT 한 줄을 넘어, 변수 선언·조건 분기·반복문이 가능한 데이터베이스 안의 작은 프로그램이다.
특징
- 매개변수를 받아 동작 결과나 출력값을 반환할 수 있다.
- 한 번 컴파일된 후 실행 계획이 캐싱되어 반복 호출 시 빠르다.
- 트랜잭션 단위로 묶어 데이터 일관성을 유지하기 쉽다.
장점
- 성능: 네트워크 왕복 횟수 감소, 실행 계획 재사용
- 보안: 직접 테이블 접근 대신 프로시저로만 접근 허용 가능 → SQL Injection 위험 완화
- 재사용성: 비즈니스 로직을 한 곳에 모아 여러 애플리케이션에서 호출
- 트랜잭션 처리: 여러 SQL을 원자적으로 묶어 처리
단점
- 이식성: 벤더별 문법 차이가 커서 DB 갈아타기 어렵다.
- 버전 관리: 일반 코드와 함께 다루기 까다롭다.
- 디버깅: 애플리케이션 코드보다 추적이 어렵다.
- 로직 분산: 비즈니스 규칙이 DB와 앱에 분산되면 유지보수가 어려워진다.
함수 vs 프로시저
| 항목 | 함수(Function) | 프로시저(Procedure) |
|---|---|---|
| 반환 | 반드시 값 반환 | 반환 없을 수 있음 |
| 호출 | SQL 안에서 가능 | 별도 CALL 문 |
| 트랜잭션 제어 | 보통 불가 | 가능 |
관련 노트
- DBMS: 프로시저가 동작하는 환경
- DDL · DML · DCL: SQL 문법 분류
- SQL Injection: 프로시저로 완화할 수 있는 위협