데이터베이스

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

forward error correction Circle 2024. 6. 14. 08:46
반응형

Ⅰ. 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 블록을 사용할 수 없습니다. 함수 내에서 발생하는 에러는 함수 호출 자체를 실패하게 합니다.

          

   

반응형