프로시저
프로시저(Procedure)는 관계형 데이터베이스 관리 시스템(RDBMS)에서 하나 이상의 SQL 문장을 논리적으로 묶어 이름을 부여한 저장된 프로그램(Stored Program)이다. 일반적으로 반복적이고 복잡한 작업을 캡슐화하여 재사용성과 유지보수를 높이는 데 사용된다. 다른 말로 저장 프로시저(Stored Procedure)라고도 한다.
목차
정의[편집]
프로시저(PROCEDURE)란, 미리 정의된 작업을 수행하기 위한 SQL 문장의 집합으로, 일종의 서브루틴 또는 작은 프로그램이라고 할 수 있다. 프로시저는 특정한 기능을 수행하도록 설계된 프로그램 코드의 일부이며, 한 번 작성한 후 여러 번 호출할 수 있어 코드의 재사용성을 높이는 데 매우 유용하다.
프로시저는 일반적으로 다음과 같은 형식을 따른다.
``` CREATE PROCEDURE 프로시저명 AS BEGIN -- 실행할 SQL 구문 END; ```
이와 같은 형식으로 정의된 프로시저는 호출 시 해당 프로시저에 포함된 SQL 명령문이 실행된다. 프로시저는 복잡한 비즈니스 로직을 데이터베이스 내에서 처리하는 데 유용하며, 주로 데이터의 삽입, 수정, 삭제, 조회 등과 같은 작업을 처리하는 데 사용된다.
주요 구성 요소[편집]
- 프로시저명 (Procedure Name): 프로시저를 식별하는 고유한 이름이다. 데이터베이스 내에서 프로시저를 호출할 때 이 이름을 사용하여 호출한다.
- 매개변수(Parameter): 프로시저는 입력값을 받을 수 있다. 이를 통해 외부에서 전달된 값을 기반으로 동적 작업을 수행할 수 있다. 매개변수는 주로 'IN', 'OUT', 'INOUT'과 같은 형식으로 정의되며, 이는 각각 입력, 출력, 혹은 입력 및 출력을 동시에 처리할 수 있음을 의미한다.
- SQL 구문: 프로시저의 핵심 내용으로, 실행하고자 하는 SQL 명령어들이 여기에 포함된다. 여러 개의 SQL 문을 포함할 수 있으며, 이 구문들이 순차적으로 실행된다.
- 제어 흐름 문장: 프로시저는 단순히 SQL 구문만 실행하는 것이 아니라, 조건문, 반복문과 같은 제어 흐름을 포함할 수 있다. 이를 통해 프로시저 내부에서 복잡한 논리적인 처리를 수행할 수 있다.
주요 특징[편집]
항목 설명 이름을 가짐 정의 시 명명된 함수처럼 사용 가능 파라미터 지원 입력(IN), 출력(OUT), 입출력(INOUT) 재사용 가능 반복되는 로직을 한 번 정의하고 여러 번 호출 캡슐화 로직을 숨겨서 보안성 향상 및 유지보수 용이 조건문/반복문 사용 가능 로직 내에서 IF, WHILE, CASE 등을 포함할 수 있음
구문 (예: MySQL 기준)[편집]
DELIMITER // CREATE PROCEDURE procedure_name ( IN param1 INT, OUT param2 VARCHAR(255) ) BEGIN -- SQL 문들 SELECT some_column INTO param2 FROM some_table WHERE id = param1; END // DELIMITER ;
호출
CALL procedure_name(123, @result); SELECT @result;
파라미터 종류[편집]
유형 설명 IN 입력 전용, 외부에서 값을 받아 내부에서 사용 OUT 출력 전용, 내부에서 값을 설정하여 외부로 반환 INOUT 입출력 모두, 외부에서 값을 받고 다시 수정해서 반환 가능
예제[편집]
CREATE PROCEDURE GetEmployeeName ( IN emp_id INT, OUT emp_name VARCHAR(100) ) BEGIN SELECT name INTO emp_name FROM employees WHERE id = emp_id; END;
사용:
CALL GetEmployeeName(101, @name); SELECT @name;
장점[편집]
- 속도 향상: SQL 문장을 서버에 미리 저장해두기 때문에 파싱과 컴파일 비용이 줄어든다.
- 보안성 증가: 프로시저 내부 로직을 숨길 수 있고, 권한을 프로시저 단위로 관리할 수 있음.
- 일관성 확보: 여러 애플리케이션에서 동일한 로직을 공유할 수 있음.
- 복잡한 트랜잭션 처리 가능: BEGIN–COMMIT–ROLLBACK 구조를 통해 트랜잭션을 정밀하게 제어할 수 있음.
단점 및 주의사항[편집]
- 디버깅 어려움: 로직이 서버에 저장되어 있어 수정/디버깅이 복잡할 수 있다.
- 이식성 문제: DBMS마다 프로시저 구문이 다르기 때문에 DB 이전 시 문제가 될 수 있음.
- 과도한 로직 처리 금지: 애플리케이션에서 처리해야 할 복잡한 비즈니스 로직을 DB에 몰아넣으면 유지보수 어려움.
프로시저 vs 함수 (Function)[편집]
항목 프로시저 (Procedure) 함수 (Function) 반환값 없거나 OUT 파라미터로 반환 반드시 반환값 있음 사용 위치 단독 실행 (CALL) SELECT나 다른 SQL 문 내에서 사용 가능 목적 작업 실행 중심 값 계산 중심 예외 처리 지원 DBMS에 따라 다름
프로시저의 활용 사례[편집]
프로시저는 다음과 같은 다양한 상황에서 유용하게 사용된다.
1.복잡한 비즈니스 로직 구현: 단순한 SQL 구문으로 처리하기 어려운 복잡한 로직을 프로시저 내에서 구현할 수 있다. 예를 들어, 여러 테이블에서 데이터를 조회하고 그 결과를 조합하여 처리하는 작업을 프로시저로 쉽게 관리할 수 있다.
2. 자동화된 작업: 정기적으로 수행해야 하는 데이터베이스 작업을 프로시저로 정의하여 자동화할 수 있다. 예를 들어, 매일 밤 특정 데이터를 백업하거나 통계 데이터를 갱신하는 작업을 프로시저로 자동화할 수 있다.
3. 보안 관리: 민감한 데이터에 대한 접근 권한을 직접 부여하는 대신, 프로시저를 통해 특정 작업만 수행할 수 있도록 제한할 수 있다.
관리 명령어[편집]
- 프로시저 목록 확인 : SHOW PROCEDURE STATUS;
- 프로시저 내용 확인 : SHOW CREATE PROCEDURE procedure_name;
- 삭제 : DROP PROCEDURE procedure_name;
참고자료[편집]
- 끄적잉, 〈프로시저(PROCEDURE)란?〉, 《티스토리》, 2024-10-21
같이 보기[편집]