프로시저란?
프로시저란 SQL Server에서 제공하는 프로그래밍 기능이다. 쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용된다.
프로시저 사용 이유
1. 효율성
쿼리문을 작성하다보면 여러 개의 칼럼을 조회하고 여러 개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데 엄청나게 긴 쿼리문이 생길 수 있다. 이러한 여러개의 쿼리를 사용할 때마다 긴 쿼리문을 써야 한다면 엄청나게 불편할 텐데 이를 프로시저에 저장하고 저장된 프로시저를 호출하여 프로그래밍을 하는것이 훨씬 효율적입니다.
즉, 하나의 요청으로 여러 SQL문을 실행할 수 있는 것이다.
2. 네트워크 소요 시간을 줄일 수 있다.
만약 동일한 쿼리를 1000번 2000번 호출하는 것보다 SP를 이용해서 구현한다면 SP를 호출할 때 한 번만 네트워크를 경유하기 때문에 네트워크 소요시간을 줄이고 성능을 개선할 수 있습니다.
3. 개발 업무를 구분해 개발 할 수 있습니다.
순수한 애플리케이션만 개발하는 조직과 DBMS 관련 코드를 개발하는 조직이 따로 있다면, DBMS 개발하는 조직에서는 데이터베이스 관련 처리하는 SP를 만들어 API처럼 제공하고 애플리케이션 개발자는 SP를 호출해서 사용하는 형식으로 역할을 구분하여 개발이 가능합니다.
프로시저의 단점
1. 처리 성능이 낮습니다.
프로시저 내부에 연산이 포함될 경우 CPU점유율이 높아지고 실행시간도 길어지며 LOCK이 결려있을 경우 병목이 될 확률이 높아져 결국 오히려 C나 JAVA보다 느린 성능을 보여줍니다.
2. 디버깅이 어렵습니다.
배포절차가 따로 없어 이력(버전)관리가 힘이들며 길게 작성된 프로시저의 경우 로직 파악이 어렵다.
3. DB 확장이 매우 힘듭니다.
서비스 사용자가 많아져 서버수를 늘려야할 때, DB 수를 늘리는 것이 더 어렵습니다.
서비스 확장을 위해 서버수를 늘릴경우 DB 수를 늘리는 것보다 WAS의 수를 늘리는 것이 더 효율적이기 때문에 대부분의 개발에서 DB에는 최소의 부담만 주고 대부분의 로직은 WAS에서 처리할 수 있게 합니다.
프로시저의 구성
CREATE OF REPLACE PROCEDURE 프로시저명
(변수1 IN 변수타입, 변수2 OUT 변수타입, ... )
IS
변수처리부
BEGIN
처리내용
EXCEPTION
예외처리부
END;
1. CREATE OR REPLACE 프로시저명
프로시저명이 있으면 기존 프로시저를 대체하고, 없으면 새로 생성하라는 의미이다. 프로시저의 이름을 정의하거나 수정하는 부분
2. 변수1 IN 변수타입, 변수2 OUT 변수타입 ...
프로시저에서 사용할 변수들을 선언하는 부분으로서 프로시저에 사용할 매개변수들이 선언되는 곳이다. 이부분에서 명시하는 변수들은 사용자로부터 입력받을 수 도 있고, 사용자에게 리턴해줄 수 도 있으며, 입력 및 리턴을 동시에 해줄 수 도있다.
3. 변수처리부
변수처리부에서도 변수들을 선언한다. 하지만 여기에서의 변수란, 사용자 입력에 관계없이 프로시저 처리 내용 내에서 사용할 '로컬변수'이다. 즉, 사용자가 프로시저 처리 내용 전체를 까보지않는 이상, 사용자에게 직접적으로 표현되지는 않는다. 대표적으로, 프로시저 처리 내용 중 발생한 결과값을 받아 매개변수에 전달해 줄 때 그 용도가 된다.
4. 예외처리부
프로시저를 사용하다가 발생할 수 있는 예외를 처리하는 부분이다.
프로시저의 미래
여러 블로그들을 찾아보면 장점도 많지만 또한 단점 역시 분명하기에 프로시저의 사용을 점점 줄여나가는 추세인 것은 맞으나 여전히 실무에서 사용하는 곳이 많기에 개념이나 사용방법정도는 알고있는 것이 좋다.
**Reference
https://runcoding.tistory.com/31
https://tragramming.tistory.com/71
'CS > CS지식' 카테고리의 다른 글
의존관계 주입이란? (0) | 2024.12.10 |
---|---|
정규화와 비정규화 (0) | 2022.07.25 |
HTTP란? (0) | 2022.05.25 |
객체지향 프로그램이란? (0) | 2022.05.25 |