2021-05-01 09:21:47

오늘은 스토어드 프로시저(stored procedure)에 대해서 알아보도록 하겠습니다. 스토어드 프로시저는 일련의 SQL문들을 하나로 묶어서 한 번에 수행할 수 있도록 도와주는 기능입니다. 

 

스토어드 프로시저 사용법

스토어드 프로시저는 다음과 같이 만듭니다. 

 

DELIMITER //

CREATE PROCEDURE 프로시저명()

BEGIN

 

SQL문

...

SQL문

 

END //

DELIMITER ;

 

호출할 때 사용할 이름을 만들어 주고, BEGIN과 END // 사이에 SQL 문들을 넣어주면 됩니다. 

 

그리고 생성한 프로시저를 호출할 때는 다음과 같이 명령을 주면 됩니다.

 

CALL 프로시저명();

 

한 번 예시를 보여드리겠습니다. test 데이터베이스에 student라는 테이블이 있는 상황이라고 가정하겠습니다.

 

 

위와 같이 프로시저를 만들고, CALL로 호출했더니 두 개의 SQL 문이 순차적으로 실행된 것을 확인하실 수 있습니다. 첫번째 SQL문으로 인해서 22개의 행이 반환되었고, 두번째 SQL문으로 인해서 1개의 행이 반환된 것입니다.

 

스토어드 프로시저를 삭제하는 방법은 다음과 같습니다.

 

DROP PROCEDURE 프로시저명();

 

방금 예제에서 생성한 프로시저를 삭제하고 싶다면, DROP PROCEDURE exProc(); 을 실행하면 됩니다. 

 

스토어드 프로시저 사용 이유

제 첫 직장 사수분께서 항상 강조하셨던 것이 나중에는 백엔드나 응용 프로그램에서 쿼리를 직접 작성하지 말고 스토어드 프로시저로 다 바꿔야 한다였습니다. 스토어드 프로시저를 사용하면 다음과 같은 이점이 있습니다. 

 

1. 스토어드 프로시저를 사용하면 MySQL의 성능 향상에 도움이 됩니다. 매번 긴 쿼리를 전송하지 않고 몇 글자로 스토어드 프로시저만 호출하면 되기 때문입니다. 적은 양의 데이터를 MySQL 서버로 보내면 되니 네트워크 부하를 많이 줄일 수 있겠죠. 

 

2. 누군가 테이블에 직접 접근하여 SELECT, UPDATE, DELETE 등을 수행하는 것은 위험 부담이 있지만, 만들어놓은 스토어드 프로시저를 통해서 데이터를 조작한다면 훨씬 더 안전할 것입니다. 

 

3. SQL문을 수정할 필요가 있는 경우 백엔드나 응용 프로그램의 코드를 수정할 필요없이 스토어드 프로시저만 수정하면 되니까 유지 보수가 편리해집니다.

 

참고자료

[1] 우재남 지음, "이것이 MySQL이다", 한빛미디어(2020)