Ⅰ. 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 블록을 사용할 수 없습니다. 함수 내에서 발생하는 에러는 함수 호출 자체를 실패하게 합니다. |
'데이터베이스' 카테고리의 다른 글
SQL 인젝션에 대해 간단히 알아보겠습니다. (0) | 2024.07.03 |
---|---|
MongoDB 에 대해 알아보겠습니다. (0) | 2024.06.27 |
NoSQL과 RDBMS(Relational Database Management System)에 대해 알아보겠습니다. (0) | 2024.06.07 |
DB 암호화 방식에 대해 알아보겠습니다. (0) | 2024.05.13 |
PostgreSQL 에 대해 알아보겠습니다. (0) | 2024.02.27 |