Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저와 함수(STORED PROCEDURE vs FUNCTION)의 차이점 완벽 정리

MySQL에는 데이터베이스 내부에 로직을 미리 작성해 두고 재사용할 수 있는 저장 프로시저(Stored Procedure)함수(Function)라는 두 가지 객체가 있습니다. 이름은 비슷하지만 호출 방식, 반환 값, 활용 범위 등에서 뚜렷한 차이가 있기 때문에 상황에 맞게 선택하는 것이 중요합니다.

1. 저장 프로시저(Stored Procedure)

저장 프로시저는 MySQL에서 CALL 문을 통해 별도로 실행하는 프로그램 단위입니다. 하나의 프로시저 안에 여러 SQL 문과 제어문을 담을 수 있어 복잡한 비즈니스 로직을 처리하는 데 적합합니다.

  • 호출 방식: CALL 프로시저명() 형태로 독립적으로 호출합니다.
  • 반환 값: OUT 파라미터나 결과 집합(ResultSet)을 통해 여러 개의 값을 반환할 수 있습니다.
  • 기본 반환 값: 별도로 지정하지 않으면 기본적으로 0을 반환합니다.
  • SQL 쿼리 사용: SELECT 문 같은 일반 SQL 쿼리 안에서는 직접 사용할 수 없습니다.
  • 컴파일 방식: 사전 컴파일(precompile) 방식을 기반으로 하므로 반복 실행 시 성능상 이점이 있습니다.

2. 함수(Function)

함수는 SQL 문장 내부에서 직접 호출할 수 있다는 점이 가장 큰 특징입니다. 주로 계산이나 데이터 변환처럼 하나의 값을 도출하는 용도로 사용됩니다.

  • 호출 방식: SELECT, WHERE 절 등 SQL 문장 안에서 바로 호출합니다.
  • 반환 값: RETURN 문을 사용하며 단 하나의 값만 반환합니다. 이 값은 스칼라뿐 아니라 테이블 형태일 수도 있습니다.
  • SQL 쿼리 사용: 일반 SQL 쿼리 내에서 자유롭게 활용할 수 있습니다.
  • 컴파일 방식: 사전 컴파일 방식이 아니며, 호출 시점에 실행됩니다.

3. 핵심 차이점 한눈에 보기

구분 저장 프로시저 함수
호출 방식 CALL 문으로 호출 SQL 문장 내에서 호출
반환 값 개수 여러 개 가능 하나만 가능
기본 반환 값 0 RETURN 문으로 지정한 값
SQL 쿼리 내 사용 불가능 가능
컴파일 방식 사전 컴파일 기반 사전 컴파일 아님

4. 어떤 것을 선택해야 할까?

여러 SQL 문을 묶어 트랜잭션 단위로 처리하거나, 다수의 결과를 한 번에 받아야 하는 경우에는 저장 프로시저가 적합합니다. 반면, SELECT 문에서 계산된 값을 바로 사용하거나 컬럼 값을 변환해야 하는 경우에는 함수를 사용하는 것이 좋습니다. 두 객체의 특성을 정확히 이해하고 활용하면 데이터베이스 코드의 재사용성과 유지보수성을 크게 높일 수 있습니다.