본문 바로가기
데이터베이스

MSSQL에서되는 프로시저에 대해 알아보겠습니다.

by forward error correction Circle 2024. 6. 14.
반응형

Ⅰ. MSSQL 에서의 프로시저 란?

MSSQL 에서의 프로시저(Stored Procedure)는 일련의 SQL 문을 논리적으로 그룹화한 코드 블록으로, 데이터베이스 내에 저장되고 필요할 때마다 실행할 수 있습니다. 프로시저는 반복적인 작업을 자동화하고, 복잡한 SQL 작업을 단순화하며, 데이터베이스 성능을 최적화하는 데 유용합니다.

 

Ⅱ. MSSQL 에서의 프로시저 정의 방법

MSSQL에서 프로시저를 정의하려면 CREATE PROCEDURE 문을 사용합니다

USE [데이터베이스명] -- 사용할 데이터베이스를 선택합니다.
GO

-- 프로시저를 생성합니다.
CREATE PROCEDURE Sabun
    @Parameter1 INT,    -- 입력 매개변수 1
    @Parameter2 NVARCHAR(50) -- 입력 매개변수 2
AS
BEGIN
    -- 예외 처리 시작
    BEGIN TRY
        -- 트랜잭션 시작
        BEGIN TRANSACTION;

        -- 여기에 프로시저의 로직을 작성합니다.
        -- 예제: 테이블에 데이터 삽입
        INSERT INTO YourTable (Column1, Column2)
        VALUES (@Parameter1, @Parameter2);

        -- 트랜잭션 커밋
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        -- 에러 발생 시 트랜잭션 롤백
        ROLLBACK TRANSACTION;

        -- 에러 정보 출력
        DECLARE @ErrorMessage NVARCHAR(4000);
        DECLARE @ErrorSeverity INT;
        DECLARE @ErrorState INT;

        SELECT 
            @ErrorMessage = ERROR_MESSAGE(),
            @ErrorSeverity = ERROR_SEVERITY(),
            @ErrorState = ERROR_STATE();

        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
    END CATCH
END
GO

 

Ⅲ. 프로시저의 장단점

 1) 장점

   ⅰ. 성능 향상

      ● 컴파일된 실행 계획: 프로시저는 최초 실행 시 컴파일되어 실행 계획이 캐시됩니다. 이후 실행 시 동일한 계획을

                                          사용하므로 성능이 향상됩니다.

      ● 네트워크 트래픽 감소: 클라이언트와 서버 간의 데이터 전송을 줄입니다. 클라이언트가 여러 개의 SQL 문을 보내는

                                             대신 프로시저 호출만으로 작업을 수행할 수 있습니다.

   ⅱ. 재사용성 및 유지보수 용이

      ● 코드 재사용 : 동일한 프로시저를 여러 애플리케이션이나 여러 부분에서 재사용할 수 있습니다.

      ● 중앙 집중식 유지보수 : 프로시저의 논리를 한 곳에서 관리할 수 있어, 변경 사항을 쉽게 적용할 수 있습니다.

   ⅲ. 보안 강화

      ●  권한 관리 : 사용자에게 테이블에 대한 직접적인 접근 권한을 주는 대신 프로시저 실행 권한만 부여할 수 있습니다.                                이를 통해 데이터베이스의 보안을 강화할 수 있습니다.

      ●  SQL 인젝션 방지 : 프로시저 내에서 매개변수를 처리함으로써 SQL 인젝션 공격을 방지할 수 있습니다.

   ⅳ. 복잡한 로직 처리

      ●   복잡한 연산 처리 : 여러 SQL 문을 묶어 복잡한 비즈니스 로직을 쉽게 구현할 수 있습니다.

      ●   조건부 로직 : 프로시저 내에서 조건문, 반복문 등을 사용하여 다양한 논리를 구현할 수 있습니다.

 

  2) 단점

   ⅰ. 디버깅 어려움

      ● 디버깅 복잡성 : 프로시저 내에서 발생하는 문제를 디버깅하는 것이 일반 애플리케이션 코드보다 어렵습니다.

                                   T-SQL 디버깅 도구가 제한적일 수 있습니다.

   ⅱ. 유연성 부족

      ● 동적 SQL의 제한 : 동적 SQL을 많이 사용해야 하는 경우 프로시저가 덜 유연할 수 있습니다.

                                        필요할 때마다 SQL 문을 생성하는 애플리케이션 코드보다 유연성이 떨어질 수 있습니다.  

   ⅲ. 버전 관리 및 배포

      ● 버전 관리 어려움 : 프로시저는 데이터베이스 내에 저장되므로 소스 코드 관리 시스템과의 통합이 어려울 수 있습니다.

      ● 배포 복잡성 : 데이터베이스 프로시저의 변경 사항을 여러 환경에 배포하는 것이 애플리케이션 코드보다 더 복잡할 수 있습니다.

   ⅳ. 복잡성 증가

        의존성 문제 : 많은 프로시저가 서로 의존할 경우, 데이터베이스 시스템이 복잡해질 수 있습니다. 의존성 관리는 어렵고 오류 발생 시 원인 추적이 힘들어질 수 있습니다.

 

Ⅳ. 프로시저와 사용자 정의함수 차이점

  프로시저
(Stored Procedure)
사용자 정의 함수
(User Defined Function)
호출 방식 호출 방식: EXEC 또는 EXECUTE 명령을 사용하여 호출합니다. 호출 방식: 일반적으로 SELECT 문 내에서 호출되며, 함수명 뒤에 괄호로 인수를 전달합니다.
반환 값 출력 매개변수, 반환 코드(정수값)를 반환할 수 있지만, 단일 값을 직접 반환하지 않습니다. 단일 값(스칼라 함수) 또는 테이블(테이블 반환 함수)을 반환합니다.
사용 가능 위치 독립적으로 실행되며, SELECT, WHERE, HAVING, 또는 JOIN 절 내에서 직접 사용할 수 없습니다. SELECT, WHERE, HAVING, JOIN 등 SQL 문의 다양한 부분에서 사용할 수 있습니다.
데이터 조작 데이터베이스의 상태를 변경할 수 있습니다(INSERT, UPDATE, DELETE 등). 트랜잭션 관리도 가능합니다. 데이터베이스의 상태를 변경할 수 없습니다. 함수 내에서 INSERT, UPDATE, DELETE 명령을 사용할 수 없습니다.
에러 처리 TRY...CATCH 블록을 사용하여 에러를 처리할 수 있습니다. TRY...CATCH 블록을 사용할 수 없습니다. 함수 내에서 발생하는 에러는 함수 호출 자체를 실패하게 합니다.

          

   

반응형