DB/MSSQL

[MSSQL] Stored Procedure(저장 프로시저)란?

고즈너키 2023. 6. 7. 14:31

Intro

안녕하세요! Plitche(플리체)입니다. :P
MSSQL(마이크로소프트 SQL 서버)의 저장 프로시저(Stored Procedure)는 데이터베이스 내에 미리 정의된 프로그램 단위입니다. 저장 프로시저는 SQL 쿼리와 프로그래밍 로직을 조합하여 데이터베이스 작업을 수행하는 데 사용됩니다.

  • 간단 생성 방법
CREATE PROCEDURE GetCustomer
    @CustomerId INT
AS
BEGIN
    SELECT * FROM Customers WHERE CustomerId = @CustomerId
END

스토어드 프로시저는 일련의 SQL 문과 프로그래밍 문장으로 구성됩니다. 예를 들어, 위는 고객 정보를 검색하는 스토어드 프로시저의 간단한 예시입니다.

매개변수는 @CustomerId이며 GetCustomer이라는 프로시저를 호출한 결과로 SELECT 쿼리의 결과가 반환됩니다.

 

저장 프로시저(Stored Procedure)의 장점

  1. 성능 향상: 데이터베이스 서버에 미리 컴파일되고 최적화되어 있으므로, 반복적인 작업을 수행할 때 일반 SQL 쿼리보다 더 빠른 실행 속도를 제공할 수 있습니다.

  2. 재사용성: 여러 애플리케이션에서 공유하여 호출할 수 있습니다. 이를 통해 코드의 재사용성이 높아지며, 유지보수 및 관리가 용이해집니다.

  3. 보안성: 데이터베이스의 특정 작업에 대한 접근 권한을 부여할 수 있으므로, 데이터의 보안을 강화할 수 있습니다. 외부 애플리케이션이 직접 데이터베이스에 접근하는 것보다 스토어드 프로시저를 통해 데이터에 접근하는 것이 안전합니다.

  4. 비즈니스 로직 분리: 데이터베이스에서 비즈니스 로직을 분리할 수 있습니다. 이는 애플리케이션 개발자가 데이터베이스 로직에 집중하지 않고도 애플리케이션을 개발할 수 있도록 도와줍니다.

 

저장 프로시저(Stored Procedure)의 호출방법

1. EXECUTE 문을 사용하여 호출

EXECUTE GetCustomer @CustomerId = 1

위의 예시에서 GetCustomer 스토어드 프로시저를 호출하고 @CustomerId 매개변수에 1을 전달합니다.

2. EXEC 문을 사용하여 호출

EXEC GetCustomer 1

EXECUTE 문의 축약된 형태로, 스토어드 프로시저를 호출하고 매개변수를 전달합니다.

 

예시

저장 프로시저(Stored Procedure)는 복잡한 로직을 포함할 수 있습니다. 조건문, 반복문, 변수, 트랜잭션 등을 사용하여 데이터베이스 작업을 수행할 수 있습니다. 예를 들어, 스토어드 프로시저 내에서 다음과 같은 작업을 수행할 수 있습니다.

CREATE PROCEDURE UpdateCustomer
    @CustomerId INT,
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50)
AS
BEGIN
    -- 트랜잭션 시작
    BEGIN TRANSACTION

    -- 고객 정보 업데이트
    UPDATE Customers
    SET FirstName = @FirstName, LastName = @LastName
    WHERE CustomerId = @CustomerId

    -- 로그 테이블에 변경 이력 기록
    INSERT INTO CustomerLog (CustomerId, LogDate, Action)
    VALUES (@CustomerId, GETDATE(), 'Update')

    -- 트랜잭션 커밋
    COMMIT TRANSACTION
END

위의 예시에서는 UpdateCustomer 스토어드 프로시저를 생성하여 고객 정보를 업데이트하는 작업을 수행합니다. 트랜잭션을 사용하여 업데이트와 로그 기록이 원자적(atomic)으로 수행되도록 보장합니다.

스토어드 프로시저는 데이터베이스의 유지보수 및 성능 향상에 도움을 주는 강력한 도구입니다. 이를 통해 데이터베이스 작업을 표준화하고 중복 코드를 피할 수 있으며, 보안과 성능을 최적화할 수 있습니다.