이 문서의 내용
Ad-Hoc 쿼리란?
Ad-Hoc은 일반적으로 날 쿼리라고도 부르는 SQL 구문 그 자체를 의미합니다.
SELECT * FROM table WHERE id = 123
프로그래밍에서는 다음과 같은 SQL 구문이 될 수 있습니다.
String sql = "SELECT * FROM table WHERE id = " + id;
Ad-Hoc의 가장 큰 문제는 쿼리 구문이 변수에 의해서 캐싱되지 않는다는 점입니다.
int id = 123;
String sql0 = "SELECT * FROM table WHERE id = " + id;
id = 234;
String sql1 = "SELECT * FROM table WHERE id = " + id;
위 코드에서 두 개의 sql0 sql1은 SELECT * FROM table WHERE id =라는 공통된 구문을 갖고 있습니다.
이어서 변수를 사용하므로 공통 구문을 캐싱할 것으로 기대됩니다.
하지만 실제로는 SELECT * FROM table WHERE id = 123 그리고 SELECT * FROM table WHERE id = 234 두 개의 구문이 각자 저장되어 사용됩니다.
위 코드가 서로 다른 변수 값으로 100000회 호출되었다면 Connection에서는 100000개의 구문이 저장되어 캐싱되기를 기다립니다.
극단적으로는 구문이 한 번도 재사용되지 않기에 캐싱에 의한 성능 향상을 이루지 못하고 메모리 사용량은 계속해서 늘어나게 됩니다.
반면 Ad-Hoc 사용의 장점은 편리하고 즉흥적으로 사용 할 수 있다는 점입니다.
별도 공수 없이 머리 속에서 떠오르는 그대로 SQL을 사용 할 수 있으니 임시 사용되는 SQL에 적합합니다.
저장 프로시저란?
SP(Stored Procedure)는 SQL 구문을 하나의 메소드처럼 구성하여 어떤 동작을 일괄적으로 처리합니다.
프로시져를 구성하고 여러 개의 복잡한 작업을 다수의 SQL로 연이어 처리 할 수 있으므로 일종의 프로그래밍의 역할을 대신합니다.
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
SP의 가장 큰 장점은 성능과 관리 측면에 있습니다.
성능 | 관리 |
하나의 프로시져가 컴파일된 이후에 그 안에서 사용되는 |
DBMS 관련 코드를 개발하는 조직이 분리되어 있다면 |
하나의 작업을 처리하기 위해 N개의 Ad-Hoc 쿼리가 필요하더라도 SP는 한 번만 호출됩니다. 이로 인해 |
버그 픽스를 위해 |
하지만 모든 상황에서 SP가 Ad-Hoc보다 유리한 것은 아닙니다.
- 전반적으로 SP에서 실행되는 명령 등은
C 또는 Java와 같은 전통적인 프로그래밍에서의 것보다 훨씬 느립니다. 긴 구문으로 작성된 SP 분석이 난해하고 프로그래밍 환경에 비해유지 보수와 디버깅 난이도가 높습니다.
정리 및 복습
Ad-Hoc 쿼리는 날 쿼리라고도 부르며 일반적인 SQL 구문을 의미합니다.- Ad-Hoc 쿼리는
즉흥적이고 임시 방편의 상황에서 사용합니다. SP(Stored Procedure)는 프로시저를 의미합니다.- SP를 사용하면
캐싱, 라운드 트립과 같은 성능 상의 이점이 있습니다. - SP를 사용하면
프로시저를 API 처럼 제공하고 애플리케이션 배포 없이 프로시저를 수정하는 것으로 버그 픽스가 가능합니다. - 반면 SP에서 실행되는 명령은
실행이 느리고 유지 보수 및 디버깅에 어려움이 있을 수 있습니다.
'CS & ITS > CS' 카테고리의 다른 글
비선점 프로세스 스케줄링(Non-Preemptive scheduling) (0) | 2024.02.20 |
---|---|
WS(Web Server)와 WAS(Web Application Server) 차이점 (0) | 2023.12.28 |
SQL 구문 쿼리를 위한 Statement와 Prepared statement 차이점 (0) | 2023.12.19 |
QoS란(Quality of Service)란? MQTT의 QoS 동작 방식 (0) | 2023.12.04 |
FQCN(Full Qualified Class Name)이란? (0) | 2023.11.27 |