검수요청.png검수요청.png

프로시저

위키원
(저장 프로시저에서 넘어옴)
이동: 둘러보기, 검색

프로시저(Procedure)는 관계형 데이터베이스 관리 시스템(RDBMS)에서 하나 이상의 SQL 문장을 논리적으로 묶어 이름을 부여한 저장된 프로그램(Stored Program)이다. 일반적으로 반복적이고 복잡한 작업을 캡슐화하여 재사용성과 유지보수를 높이는 데 사용된다. 다른 말로 저장 프로시저(Stored Procedure)라고도 한다.

정의[편집]

프로시저(PROCEDURE)란, 미리 정의된 작업을 수행하기 위한 SQL 문장의 집합으로, 일종의 서브루틴 또는 작은 프로그램이라고 할 수 있다. 프로시저는 특정한 기능을 수행하도록 설계된 프로그램 코드의 일부이며, 한 번 작성한 후 여러 번 호출할 수 있어 코드의 재사용성을 높이는 데 매우 유용하다.

프로시저는 일반적으로 다음과 같은 형식을 따른다.

```
CREATE PROCEDURE 프로시저명
AS
BEGIN
    -- 실행할 SQL 구문
END;
```

이와 같은 형식으로 정의된 프로시저는 호출 시 해당 프로시저에 포함된 SQL 명령문이 실행된다. 프로시저는 복잡한 비즈니스 로직을 데이터베이스 내에서 처리하는 데 유용하며, 주로 데이터의 삽입, 수정, 삭제, 조회 등과 같은 작업을 처리하는 데 사용된다.

주요 구성 요소[편집]

  1. 프로시저명 (Procedure Name): 프로시저를 식별하는 고유한 이름이다. 데이터베이스 내에서 프로시저를 호출할 때 이 이름을 사용하여 호출한다.
  2. 매개변수(Parameter): 프로시저는 입력값을 받을 수 있다. 이를 통해 외부에서 전달된 값을 기반으로 동적 작업을 수행할 수 있다. 매개변수는 주로 'IN', 'OUT', 'INOUT'과 같은 형식으로 정의되며, 이는 각각 입력, 출력, 혹은 입력 및 출력을 동시에 처리할 수 있음을 의미한다.
  3. SQL 구문: 프로시저의 핵심 내용으로, 실행하고자 하는 SQL 명령어들이 여기에 포함된다. 여러 개의 SQL 문을 포함할 수 있으며, 이 구문들이 순차적으로 실행된다.
  4. 제어 흐름 문장: 프로시저는 단순히 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;

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 프로시저 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.