면접보는데 프로시저는 사용안해보았냐고 질문을 받았다.
프로시저가 뭔지는 아는데, 왜 사용하는지? 어디에 사용하면 좋을지에 대해 고민해본 적이 없었다는 것을 깨달아서 작성해본다.
DB에 대한 일련의 작업을 정리한 절차를 RDB 시스템에 저장한 것이다.
쿼리문을 일종의 메서드 형식으로 만들고 해당 동작을 일괄적으로 처리할 수 있다.
DELIMITER //
CREATE PROCEDURE GetUserData(IN userId INT)
BEGIN
SELECT username, email, created_at
FROM users
WHERE user_id = userId;
END //
DELIMITER ;
DELIMITER는 시작과 종료지점을 나타내고, 구분자로서 //, ; 가 쓰인다.
userId라는 매개변수를 받아 특정 쿼리문을 실행할 수 있다.
CALL GetUserData(1)
위와 같이 실행하면 된다.
서버에서 보통은 작성된 쿼리를 DB로 내보내지만, 프로시저를 사용하는 경우 쿼리작성할 필요 없이 CALL문만 작성하여 내보내면 된다.
DB에 미리 작성된 프로시저는 쿼리를 다시 파싱하고 최적화할 필요가 없다.
즉, 바로 실행이 가능해서 성능 향상이 된다.
네트워크 I/O가 줄기 때문에 쿼리를 하나로 묶어 실행하면 통신 비용을 줄일 수 있다.
어플리케이션과 독립적으로 관리해야하는 쿼리가 있는 경우 사용한다.
또한 사용자에게 직접 테이블 접근 권한은 부여하지 않기 때문에 보안적으로 선택지가 하나 생긴다고 볼 수 있다.
프로시저는 개인적인 생각으로는, 보안적으로 접근할 수 없게 꼭 만들어야하는 경우와 유지보수가 조금 어려워지더라도 성능을 꼭 향상시켜야하는 경우에 사용하면 좋을 것 같다.