MySQL에서는 절차적인 처리를 위해 스토어드 프로그램을 이용할 수 있다. 스토어드 프로그램은 스토어드 루틴이라고도 하는데, 프로시저와 함수 그리고 트리거와 이벤트 등을 모두 아우르는 명칭이다. 스토어드 프로그램은 절차적인 처리를 제공하긴 하지만, 애플리케이션을 대체할 수 있을지 충분히 고려해보아야 한다. 스토어드 프로그램의 용도를 정확하게 판단하려면, 스토어드 프로그램의 장단점을 알아볼 필요가 있기 때문에 이번 챕터에서는 해당 부분에 대한 내용과, 언제 스토어드 프로그램을 사용하는 것이 효율적인지 판단하는 기준을 알아보자.
11.1.1 스토어드 프로그램의 장점
데이터베이스의 보안 향상
스토어드 프로그램 단위로 실행 권한을 부여할 수 있으며, 이런 보안 기능을 조합해 특정 테이블의 읽기와 쓰기 또는 특정 컬럼에 대해서만 권한을 설정할 수도 있다.
주요 기능을 스토어드 프로그램으로 작성한다면 SQL 인젝션과 같은 기본적인 보안 사고는 피할 수 있을 것이다.
기능의 추상화
MySQL 서버의 스토어드 프로그램을 통해 기능을 구현하면 동일한 기능을 여러 버전의 프로그램에서 사용할 수 있어 기능이 변경되어도 쉽게 대응할 수 있다. 각 애플리케이션에서는 특정 기능이 어떻게 구현되는지 알 필요도 없으며, 해당 프로그램을 호출해 값을 가져오기만 하면된다.
네트워크 소요 시간 절감
하나의 프로그램에서 가벼운 쿼리를 100번 200번씩 실행해야 한다면 네트워크를 경유하는 시간은 횟수에 비례해 증가하게 된다. 스토어드 프로그램을 호출하여 단 한 번만 네트워크를 경유하여 네트워크 소요 시간을 줄이고 성능을 개선할 수 있다.
절차적 기능 구현
DBMS 서버에서 사용하는 SQL은 절차적 기능을 제공하지 않는다. 즉 IF, WHIILE과 같은 제어 문장을 사용할 수 없다는 말이다. 그에 반해 스토어드 프로그램은 절차적인 기능을 실행할 수 있는 제어 기능을 제공한다.
개발 업무 구분
순수하게 애플리케이션 개발 조직과 SQL 개발 조직이 구분되어 있는 회사도 있다. 이렇게 구분되어 있는 조직에서는 스토어드 프로그램을 이용해 업무를 진행할 수 있다.( DBMS 코드를 개발하는 조직은 트랜잭션 단위로 DB관련 처리를 하는 스토어드 프로그램을 만들어 API 처럼 제공하고, 애플리케이션 개발자는 스토어드 프로그램을 호출해 사용하는 형태로 역할을 구분)
11.1.2 스토어드 프로그램의 단점
낮은 처리 성능
스토어드 프로그램은 MySQL 엔진에서 해석되고 실행된다. 하지만 MySQL 서버는 스토어드 프로그램과 같은 절차적 코드 처리를 주목적으로 하는 것이 아니기에 처리 성능이 타 언어에 비해 훨씬 떨어진다.(책에서는 단위 시간당 연산 처리 능력이 자바가 60배, C/C++가 80배 더 빠르다고 한다) 그렇기에 연산을 하는 프로그램 말고, 한 번에 많은 쿼리를 실행해야 할 때 스토어드 프로그램을 사용하는 것이 적합하다.
애플리케이션 코드의 조각화
애ㅐ플리케이션의 설치나 배포가 더 복잡해지고 유지보수 또한 어려워질 수 있다.(자바와 MySQL 스토어드 프로그램으로 분산되기 때문에)