[DB] Stored Procedure

limhyeonwoo·2023년 3월 23일
0

Strored Procedure에 대해서 공부를 해보고자 합니다.

1. Stored Procedure이란?

  • Stored Procedure은 미리 만들어 놓은 SQL문을 저장하고 이를 호출해서 사용하는 방식을 각각의 DBMS가 제공하는 기능이다.

  • 간단히 요약하자면 SQL문을 DBMS가 최적화, 컴파일 과정을 거쳐서 저장하고 이를 호출해서 사용하는 일종의 SQL을 메서드처럼 사용하는 방식이다.


2. Stored Procedure의 장점

1) 속도가 빠름
처음 Stored Procedure가 호출이 되면 DBMS는 최적화, 컴파일 과정을 거쳐서 캐시에 저장한다. -> 이후에는 캐시에 저장된 프로시저를 호출해서 사용하면 되므로 속도 향상의 장점이 있다.

2) 유지보수 및 재활용 측면에서 좋다
만일 Stored Procedure를 사용하지 않은 경우에 SQL를 변경해야하는 경우에 해당 SQL문을 모두 찾아서 일일이 변경을 해줘야하지만 Stored Procedure를 사용하면 해당 프로시저만 변경하면 되므로 유지보수에 굉장한 장점이 있다.

3) 보안의 측면 -> SQL Injection을 방지할수 있다.

예를 들어 특정 유저의 정보를 가져오는 SQL문이 있다고 가정합시다.

//Stored Procedure를 사용하지 않는 경우
String query = "SELECT * FROM USER WHERE UID = " + uid;

위 문장에서 uid에는 uid를 제외하고도 다른 구문이 들어가도 그대로 실행이 되기때문에 SQL Injection에 매우 취약하다고 볼수 있습니다.

String param = "1 OR 1 = 1"

예를 들어 만일 해당 파라미터가 넘어온다면 특정 유저의 정보가 아닌 모든 유저의 정보를 가져올수 있게 되므로 보안에 매우 취약한 방식이라고 말할수 있습니다.

//Stored Procedure를 사용하는 경우
String query = "SELECT * FROM USER WHERE UID = ? ";

위와 같이 Stored Procedure를 사용하면 들어오는 파라미터를 단순한 문자열로 취급해서 SQL Injection로 부터 안전합니다.

4) 네트워크의 부하가 낮아짐
일반 쿼리를 사용할 경우 SQL문 통째로 넘기기 때문에 복잡한 쿼리의 경우 네트워크의 부하가 심해질수 있지만, Stored Procedure를 사용할 경우에는 함수이름, 매개변수만 넘기면 되므로 네트워크의 부하가 낮아집니다.


3. Stored Procedure의 단점

1) 최적화 문제
첫 Stored Procedure의 실행때 넘겨진 파라미터에 맞춰서 최적화 과정이 진행됩니다. 만일 첫 실행과 다른 파라미터를 넘겨도 이전에 최적화된 Stored Procedure가 실행되므로 최적화가 올바르게 되지 않는 경우가 발생합니다. 이러한 경우에는 다시 컴파일하는 과정을 거쳐서 최적화를 해야하는 단점이 있습니다.


profile
안녕하세요

0개의 댓글