데이타베이스/MySQL

MySQL 고급 주제: 저장 프로시저 및 함수의 활용

shimdh 2025. 4. 27. 14:15
728x90

MySQL에서 데이터베이스를 효율적으로 관리하고 복잡한 비즈니스 로직을 구현하기 위해 저장 프로시저와 함수는 필수적인 도구입니다. 이 블로그 포스트에서는 저장 프로시저와 함수의 정의, 특징, 사용 사례 및 이점에 대해 자세히 살펴보겠습니다.

저장 프로시저 (Stored Procedure)

정의

저장 프로시저는 여러 SQL 문을 하나의 단위로 묶어 실행할 수 있는 기능으로, 특정 작업이나 계산을 수행하고 그 결과를 반환하는 데 사용됩니다. 이는 데이터베이스 내에서 복잡한 비즈니스 로직을 구현하는 데 매우 유용합니다.

특징

  • 다양한 명령문 포함: 여러 명령문(SELECT, INSERT, UPDATE 등)을 포함할 수 있어, 다양한 데이터 조작을 한 번에 처리할 수 있습니다.
  • 입력 및 출력 매개변수: 입력 매개변수를 받을 수 있으며, 출력값도 반환 가능하여 유연한 데이터 처리가 가능합니다.
  • 서버 저장: 데이터베이스 서버에 저장되어 있어 클라이언트 애플리케이션과 독립적으로 실행되므로, 보안성과 성능이 향상됩니다.

예제

DELIMITER //

CREATE PROCEDURE GetEmployeeCountByDepartment(IN dept_id INT)
BEGIN
    SELECT COUNT(*) FROM employees WHERE department_id = dept_id;
END //

DELIMITER ;

위의 예제에서는 부서 ID(dept_id)를 입력받아 해당 부서에 속한 직원의 수를 반환하는 저장 프로시저를 정의했습니다. 이를 통해 특정 부서의 인력 현황을 신속하게 파악할 수 있습니다.

함수 (Function)

정의

함수는 특정 값을 계산하고 그 결과를 반환하는 프로그램 블록으로, 일반적으로 단일 값 또는 테이블 데이터를 처리합니다. 함수는 데이터베이스 내에서 반복적으로 사용되는 계산 로직을 캡슐화하는 데 유용합니다.

특징

  • 항상 값 반환: 항상 값을 반환하며, 다른 SQL 문에서 직접 사용할 수 있어 코드의 가독성을 높입니다.
  • 다양한 데이터 타입 지원: 입력 매개변수를 받아들이며, 다양한 데이터 타입을 지원하여 다양한 상황에 맞게 활용할 수 있습니다.

예제

CREATE FUNCTION CalculateAnnualSalary(emp_id INT) 
RETURNS DECIMAL(10,2)
BEGIN
    DECLARE annual_salary DECIMAL(10,2);

    SELECT salary * 12 INTO annual_salary FROM employees WHERE id = emp_id;

    RETURN annual_salary;
END;

이 예제에서는 직원 ID(emp_id)를 받아 해당 직원의 연봉을 계산하여 반환하는 함수를 정의했습니다. 이를 통해 연봉 계산을 자동화하고, 코드의 중복을 줄일 수 있습니다.

사용 사례

  1. 복잡한 비즈니스 로직 구현

    • 고객 주문 시스템에서 할인 규칙이나 세금 계산 등을 처리하기 위해 여러 개의 쿼리를 결합하여 하나의 저장 프로시저로 만들면 유지보수가 용이해집니다.
  2. 데이터 일관성 유지

    • 트랜잭션 처리가 필요한 경우 여러 단계로 나누어진 작업들을 하나의 저장 프로시저 안에 넣음으로써 오류 발생 시 롤백하거나 일관성을 유지할 수 있습니다.
  3. 성능 향상

    • 자주 사용하는 쿼리를 저장 프로시저로 만들어두면 네트워크 대역폭 소모가 줄어들고 성능이 개선될 수 있습니다.
  4. 코드 재사용성 증가

    • 동일한 로직이나 쿼리를 여러 곳에서 사용할 필요가 있을 때 함수를 작성하면 중복 코드를 줄일 수 있습니다.

결론

MySQL에서 저작된 저장 프로시저와 함수는 데이터베이스 관리 및 개발 과정에서 매우 유용한 도구입니다. 이러한 기능들을 활용하면 코드 구조가 깔끔해지고 성능 또한 향상될 뿐만 아니라 비즈니스 요구 사항에 맞춘 복잡한 로직도 손쉽게 구현할 수 있게 됩니다. 따라서, 데이터베이스 설계 및 운영에 있어 이 두 가지 기능을 적극적으로 활용하는 것이 중요합니다.

728x90