티스토리 뷰

스토어드 프로시저(Stored Procedure)
일련의 쿼리를 마치 하나의 함수 처럼 실행하기 위한 쿼리의 집합이다.

이번 포스팅에서는 스토어드 프로시저(Stored Procedure) 에 관하여 알아보도록 하겠습니다.

우선, 스토어드 프로시저를 간략하게 한줄로 설명했는데요.

말로만 봤쓸 때는 무슨 말인가 ? 라는 생각이 듭니다. (한방에 이해한 당신은 천재)

 

자바 나 C 로 말하자면 일종의 메소드() 입니다.!

이번 포스팅에서는 조금 주절주절 잡소리는 접어두겠습니다.

더보기

우선 스토어드(Stored)라는 단어부터 살펴봅시다. 

Stored 라는 단어는 "저장" 이라는 단어를 뜻하는데요.

정보처리기사 나 기타 자격증 공부하신 분들이라면 이 단어가 상당히 낯익은 단어일 겁니다!

만약 처음 보셨다면 한번쯤은 단어에 대한 기억도 해보시라는 의미에서 TMI ㅎㅎ

 

그럼 스토어드 프로시저 란? 저장 프로시저 라고도 불립니다.

사실 지금부터 설명할 내용과는 조금 무관한 이야기 였습니다.

다시 본론으로 들어가서, 스토어드 프로시저란 자주 사용되는 SQL문을 하나로 묶어서 함수처럼 사용할 수 있게 하는 기능을 가지고 있습니다. 마치 자바 나 C 의 메소드() 를 만드는 것과도 같은 것 처럼!

조금 다른 점이라고 한다면, 결과값이 여러개로 실행된다는 점이 있겠네요.

 

또 하나, TMI 를 말해드리자면, 이 스토어드 프로시저는 MySQL 5.0 부터 추가된 기능입니다.

여러분들은 지금 본인이 쓰고 계시는 버전을 혹시 아시나요?!

면접에서 참... 쓸때없이 자바 몇버전 썼느냐, MySQL 몇 버전 썼느냐 묻는거 같지만 의외로 버전에 대한 고찰도 한번쯤 하게 되는 시기가 오게 됩니다.

MySQL은 특히 8.0 버전으로 오면서 몇가지 변경사항들이 있었던 것 같습니다.

그 중 가장 간단한 이야기로 JDBC 관련 Timezone 문제 ?... ㅋㅋㅋㅋㅋ

 

아무튼 간단한 잡소리도 알아둬서 손해 볼건 없으니! 한번쯤 재미로 제 생각들도 봐주세요ㅎ 

백문이 불여일견,

역시나 예제를 통해서 살펴 보도록 하겠습니다.

아차, 이번에는 명령 프롬프트 를 사용해서 실습해보도록 하겠습니다.


실습

우선, 윈도우 명령 프롬프트를 관리자 권한으로 실행 시켜 주세요.

실행시키신다음 mysql 에 접속 해야겠죠 ? ( 까먹을 쯔음 실행시켜주는 센스 )

mysql -u root -p

비밀번호를 입력하시고 다음과 같이 접속해 줍니다.

왜 편한거 냅두고 이걸로 해 ? 라고 물으시겠지만, 여러가지 이유가 있습니다.

우선, 첫째 명령어에 익숙해지셔야 어떠한 상황에도 SQL문을 사용하실 수 있습니다.

둘째, 여러분들이 SQL 서버만 사용하시는 회사에 들어가실 수 있습니다.

셋째, 빠릅니다. ㅋㅋㅋㅋㅋㅋ 툴보다 이게 더 빨라요 !


다음 사용할 데이터베이스를 선택해주셔야 합니다.

저는 늘 먹던걸로 ... 아니 늘 쓰던 employees 를 사용할 겁니다.

use employees;

데이터베이스 변경하기


자 그럼, 를 한번 들어보도록 하겠습니다.

평소 작업시에 자주 찾는 SELECT 문 이 있다고 가정하도록 하겠습니다.

SELECT * FROM employees WHERE first_name = 'georgi';
SELECT * FROM departments WHERE dept_name = 'Development';

employees 데이터베이스 안의 employees 테이블과 departmenets 테이블의 'georgi' 와 'Development' 를 매번 쿼리문으로 작성해야합니다.

이러한 자주 호출되는 쿼리문을 한번에 처리하고 싶은데?

이런 상황에서 사용을 돕는 것이 바로 프로시저란 녀석입니다.

지금은 두줄 짜리 치면 되는 것 아니냐 라고 생각하실 수 있지만, 언제나 양이 많아 진다면? 을 고려하셔야 합니다.


프로시저 생성
DELIMITER //
CREATE PROCEDURE [프로시저명]
BEGIN
     SELECT * FROM employees where first_name = 'georgi';
     SELECT * FROM departments where dept_name = 'Development';
END //
DELIMITER ;

이렇게만 보셔서는 잘 모르시겠죠?!

한번 타이핑 해보도록 하고, WorkBench 에서의 작업도 남기도록 하겠습니다.

다음과 같이 작성해봅시다.
이해를 돕기 위한 Workbench에서

하나씩 해석해보도록 하겠습니다.

DELIMITER //

구문을 만들 준비 를 하겠다.

CREATE PROCEDURE myProc()

myProc() 라는 이름의 프로시저 함수를 만들겠다. ( myProc 옆에 괄호를 붙여준 이유는 함수임을 파악하기 쉽게 하려고)

BEGIN

어떤 쿼리문인지!

END

여기가 끝인지!

DELIMITER;

;을 끝으로 구문을 끝내겠다.


조금 복잡한가요?

하지만 막상 타이핑 몇번 해보시면 이해가 가실꺼에요!

자 이렇게 완성된 녀석을 어떻게 확인해 볼 수 있을까요 ?


프로시저 호출
CALL [프로시저명];

CALL myProc(); 를 통해 두 쿼리문이 동시에 호출이 됩니다.

 

Workbench 를 통한 결과물, Result 47 과 Result 48 이 동시에 호출됬다.


자 그럼, 이런 프로시저를 사용하는 이유는 무엇일까요 ?

앞전 포스팅과 비슷한 이유가 있습니다.

우리가 VIEW를 사용하여 원천 데이터를 보호했던 것 기억하시나요 ?

프로시저도 비슷합니다.

새로운 함수 선언을 통하여 직접적인 접근에서 SQL문을 보호하는 역할 도 해줌과 동시에, 많은 작업을 간편하게 해주는 역할 도 하는 것이죠. (항상 프로그래머가 귀찮을수록 좋은 퀄리티의 프로그램이 나오는 것이죠..)

추가적으로, 프로그래밍 언어와 같은 기능을 담당 하게도 할 수 있습니다. ( 프로시저를 통해 IF문을 사용할 수 있다는 것은 추후에..)

 

조금은 복잡하게 설명한 듯 합니다.

정리해보도록 하죠.

 


프로시저의 장점
- 데이터베이스의 보안 향상
- 기능의 추상화
- 네트워크 소요 시간 절감
- 절차적 기능 구현
- 개발 업무의 구분

프로시저의 단점
- 낮은 처리 성능
- 에플리케이션 코드의 조각화 ( 유지보수의 어려움 )

간단한 실습으로 모든 장단점을 드러나게 파악 할 수 없었지만, 이러한 장점들이 있음을 파악하고, 추후 검색을 통해 다시한번 공부하시길 바랍니다!

*참조 https://12bme.tistory.com/54

 

 

끝으로,

항상 실습 후에 삭제도 잊지말아야겠죠?

(원하시는 분들만)

 

프로시저 삭제
DROP PROCEDURE [프로시저명];
댓글
공지사항
글 보관함
최근에 올라온 글
최근에 달린 댓글