데이타베이스/MySQL

MySQL에서 스토어드 프로시저와 사용자 정의 함수의 활용

shimdh 2025. 5. 7. 08:12
728x90

MySQL 데이터베이스를 다루는 개발자라면 스토어드 프로시저와 사용자 정의 함수의 중요성을 잘 알고 있을 것입니다. 이 두 가지 기능은 데이터베이스 작업을 보다 효율적으로 수행할 수 있도록 돕는 강력한 도구입니다. 이번 포스트에서는 스토어드 프로시저와 사용자 정의 함수의 개념, 사용법, 그리고 이들의 차이점과 용도에 대해 자세히 알아보겠습니다.

스토어드 프로시저 (Stored Procedures)

스토어드 프로시저는 특정 작업을 수행하는 SQL 문들의 집합으로, 데이터베이스에 저장되어 필요할 때 호출할 수 있는 기능입니다. 이를 통해 여러 개의 쿼리를 하나로 묶어 복잡한 처리를 간단하게 수행할 수 있으며, 코드의 중복을 줄이고 유지보수를 용이하게 합니다. 스토어드 프로시저는 특히 대량의 데이터를 처리하거나 반복적인 작업을 수행할 때 유용합니다.

예제

DELIMITER //

CREATE PROCEDURE GetEmployeeCountByDepartment(IN dept_id INT)
BEGIN
    SELECT COUNT(*) AS EmployeeCount 
    FROM Employees 
    WHERE DepartmentID = dept_id;
END //

DELIMITER ;

위 예제에서는 GetEmployeeCountByDepartment라는 이름의 스토어드 프로시저를 생성했습니다. 이 프로시저는 부서 ID를 입력받아 해당 부서의 직원 수를 반환하는 기능을 수행합니다. 이를 통해 사용자는 특정 부서에 속한 직원 수를 손쉽게 조회할 수 있습니다.

호출 방법

CALL GetEmployeeCountByDepartment(3);

이렇게 호출하면 부서 ID가 3인 경우의 직원 수를 알 수 있으며, 이는 데이터 분석이나 보고서 작성 시 매우 유용하게 활용될 수 있습니다.

사용자 정의 함수 (User Defined Functions)

사용자 정의 함수는 특정 값을 계산하고 그 결과를 반환하는 SQL 표현식으로, 주로 단일 값 또는 테이블 값을 반환합니다. 이러한 함수는 다른 쿼리 내에서 쉽게 사용할 수 있어, 복잡한 계산을 간단하게 처리할 수 있는 장점이 있습니다. 사용자 정의 함수는 데이터베이스 내에서 반복적으로 사용되는 계산 로직을 중앙 집중화하여 코드의 일관성을 유지하는 데 도움을 줍니다.

예제

DELIMITER //

CREATE FUNCTION CalculateAnnualSalary(monthly_salary DECIMAL(10,2))
RETURNS DECIMAL(10,2)
BEGIN
    RETURN monthly_salary * 12;
END //

DELIMITER ;

위 예제에서는 월급을 입력받아 연봉을 계산해주는 CalculateAnnualSalary 함수를 만들었습니다. 이 함수는 월급을 기반으로 연봉을 쉽게 계산할 수 있도록 도와줍니다.

호출 방법

SELECT CalculateAnnualSalary(3000) AS AnnualSalary;

이렇게 호출하면 연봉이 출력되며, 이 경우에는 36000이 됩니다. 이처럼 사용자 정의 함수는 다양한 계산을 간편하게 수행할 수 있는 유용한 도구입니다.

스토어드 프로시저와 사용자 정의 함수의 차이점 및 용도

  1. 스토어드 프로시저:

    • 여러 SQL 문장을 포함할 수 있으며, 복잡한 비즈니스 로직을 처리하는 데 적합합니다.
    • 실행 후 결과 세트를 반환하거나 상태 메시지를 보낼 수 있어, 다양한 상황에 맞춰 활용할 수 있습니다.
  2. 사용자 정의 함수:

    • 단일 값이나 테이블 값을 반환하며, 다른 SQL 쿼리 내에서 직접 사용할 수 있어 유연성이 높습니다.
    • 주로 계산이나 변환 작업에 적합하며, 코드의 재사용성을 높이는 데 기여합니다.

결론

스토어드 프로시저와 사용자 정의 함수는 MySQL에서 반복적인 작업과 복잡한 비즈니스 로직을 보다 쉽게 관리할 수 있게 해줍니다. 이를 통해 개발자는 코드 재사용성을 높이고 유지보수 비용을 줄이며 성능 개선 효과까지 누릴 수 있습니다. 이러한 도구들은 데이터베이스의 효율성을 극대화하고, 개발자와 사용자 모두에게 더 나은 경험을 제공하는 데 기여합니다.

728x90