MySQL, MariaDB

[MySQL] MySQL 저장 프로시저 - 소개

SungWookKang 2023. 10. 23. 15:51
반응형

[MySQL] MySQL 저장 프로시저 - 소개

 

l  Version : MySQL

 

MySQL 저장 프로시저와 장, 단점에 대해서 알아본다.

 

아래 스크립트는 테이블에 있는 데이터를 조회한다.

SELECT
           customer_id,
    first_name,
    last_name,
    email
FROM customer
ORDER BY first_name;

 

 

MySQL Workbench 또는 mysql 셸을 사용하여 MySQL Server에 쿼리를 실행하면 MySQL은 쿼리를 처리하고 결과 집합을 반환한다. 나중에 실행하기 위해 이러한 쿼리를 데이터베이스 서버에 저장하기 위해 저장 프로시저를 사용할 수 있다.

 

아래 스크립트에서 CREATE PROCEDURE 문은 위의 쿼리를 래핑하여 새 저장 프로시저를 만든다.

DELIMITER $$
 
CREATE PROCEDURE GetCustomers()
BEGIN
           SELECT
           customer_id,
    first_name,
    last_name,
    email
FROM customer
ORDER BY first_name;   
END$$
DELIMITER ;

 

정의에 따르면 저장 프로시저는 MySQL 서버 내에 저장된 선언적 SQL 문의 세그먼트이다. 이 예에서는 GetCustomers()라는 이름으로 생성하였다. 저장프로시저의 호출은 CALL 명령문을 사용한다.

CALL GetCustomers();

 

 

저장 프로시저를 호출하면 동일한 결과가 나타난다. 저장 프로시저를 처음 호출하면 MySQL은 다음을 수행한다.

l  첫째, 데이터베이스 카탈로그에서 이름으로 저장 프로시저를 찾는다.

l  둘째, 저장 프로시저의 코드를 컴파일 한다.

l  셋째, 컴파일된 저장 프로시저를 캐시라고 알려진 메모리 영역에 배치한다.

l  넷째, 저장 프로시저를 실행한다.

 

동일한 세션에서 동일한 저장 프로시저를 다시 호출하면 MySQL은 다시 컴파일할 필요 없이 캐시에서 저장 프로시저를 실행한다.

 

저장 프로시저에는 매개 변수가 있어서 값을 전달하고 결과를 다시 가져올 수 있다. 예를 들어 국가 및 도시별로 고객을 반환하는 저장 프로시저가 있을 수 있다. 이 경우 국가와 도시는 저장 프로시저의 매개변수이다. 저장 프로시저에는 IF, CASE, LOOP와 같은 제어문이 포함될 수 있다. 저장 프로시저는 다른 저장 프로시저나 저장 함수를 호출할 수 있으므로 코드를 보다 효과적으로 구성할 수 있다.

 

저장 프로시저의 장점은 다음과 같다.

l   네트워크 트래픽 감소 : 저장 프로시저는 애플리케이션과 MySQL 서버간의 네트워크 트래픽을 줄이는 데 도움이 된다. 왜냐하면 애플리케이션은 긴 SQL문을 여러 개 보내는 대신, 저장 프로시저의 이름과 매개변수만 보내면 되기 때문이다.

l   데이터베이스에 비즈니스 논리 중앙 집중화 : 저장 프로시저를 사용하여 여러 애플리케이션에서 재사용할 수 있는 비즈니스 논리를 구현할 수 있다. 저장 프로시저는 많은 애플리케이션에서 동일한 논리를 복제하는 노력을 줄이고 데이터베이스의 일관성을 높이는데 도움이 된다.

l   데이터베이스 보안 강화 : 데이터베이스 관리자는 기본 테이블에 대한 권한을 부여하지 않고 특정 저장 프로시저에만 액세스하는 애플리케이션에 적절한 권한을 부여할 수 있다.

 

 

저장 프로시저의 단점은 다음과 같다.

l   리소스 사용량 : 저장 프로시저를 많이 사용하는 모든 연결의 메모리 사용이 크게 늘어난다. 게다가 저장 프로시저에서 많은 수의 논리적 작업을 과도하게 사용하면 MySQL이 논리 작업에 적합하게 설계되지 않았기 때문에 CPU 사용량이 증가한다.

l   문제 해결 : 저장 프로시저를 디버깅하기가 어렵다. MySQL은 다른 데이터베이스 제품과 다르게 저장 프로시저를 디버깅하는 기능을 제공하지 않는다.

l   유지 관리 : 저장 프로시저를 개발하고 유지 관리하려면 모든 응용 프로그램 개발자가 보유하지 않은 전문 기술이 필요한 경우가 많다. 이로 인해 애플리케이션 개발 및 유지 관리 모두에 문제가 발생할 수 있다.

 

 

 

 

2023-10-23 / Sungwook Kang / http://sungwookkang.com

 

MySQL, Stored Procedure, 저장프로시저

반응형