MySQL - 저장 프로시저: 초보자 가이드

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL 저장 프로시저의 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 처음 도전하는 분이라도 걱정하지 마세요; 저는 친절한 안내자로서 단계별로 설명해 드릴 테니까요. 커피 한 잔을 손에 쥐고, 이제 시작해 볼까요!

MySQL - Stored Procedure

MySQL 저장 프로시저

마법의 책을 가지고 있다고 상상해 보세요. 동일한 마법을 반복적으로 부르는 대신, 한 번 작성하고 필요할 때마다 사용할 수 있습니다. MySQL에서 저장 프로시저는 바로 이와 같은 개념입니다 - 저장하고 재사용할 수 있는 SQL 문제 모음입니다.

저장 프로시저는 무엇인가요?

저장 프로시저는 필요할 때마다 호출할 수 있는 미리 준비된 SQL 코드입니다. 마치 반복적으로 사용할 수 있는 신뢰할 수 있는 레시피를 가지고 있는 것과 같습니다.

프로시저 생성

우리는 첫 번째 저장 프로시저를 생성해 보겠습니다. 간단한 하나로 "Hello, World!"를 출력하는 것으로 시작해 보겠습니다. 프로그래밍의 전통이니까요!

DELIMITER //

CREATE PROCEDURE HelloWorld()
BEGIN
SELECT 'Hello, World!';
END //

DELIMITER ;

이를 설명해 보겠습니다:

  1. DELIMITER //: 이는 델리미터를 ;에서 //로 변경합니다. 프로시저 내에 세미콜론이 포함되어 있기 때문에, MySQL이 각 줄을 별도로 실행하지 않도록 하기 위함입니다.
  2. CREATE PROCEDURE HelloWorld(): 이 줄은 우리의 프로시저를 생성하고 "HelloWorld"라는 이름을 지정합니다.
  3. BEGINEND: 이 키워드는 프로시저 본문을 감싸います.
  4. SELECT 'Hello, World!';: 이는 프로시저가 실행할 실제 SQL 문입니다.
  5. DELIMITER ;: 이는 델리미터를 다시 ;로 변경합니다.

이 프로시저를 호출하려면 다음과 같이 합니다:

CALL HelloWorld();

그러면 "Hello, World!"가 결과 셋에 나타날 것입니다.

저장 프로시저 파라미터 유형

이제 조금 더 흥미를 더해 보겠습니다. 저장 프로시저는 파라미터를 받을 수 있어 더 유연합니다. 세 가지 유형의 파라미터가 있습니다:

파라미터 유형 설명
IN 입력 파라미터 (기본)
OUT 출력 파라미터
INOUT 입력 및 출력에 사용할 수 있음

세 가지 유형을 모두 사용하는 프로시저를 생성해 보겠습니다:

DELIMITER //

CREATE PROCEDURE CalculateRectangle(
IN length DECIMAL(10,2),
IN width DECIMAL(10,2),
OUT area DECIMAL(10,2),
INOUT perimeter DECIMAL(10,2)
)
BEGIN
SET area = length * width;
SET perimeter = 2 * (length + width);
END //

DELIMITER ;

이 예제에서:

  • lengthwidth는 IN 파라미터입니다.
  • area는 OUT 파라미터입니다.
  • perimeter는 INOUT 파라미터입니다 (초기 값을 입력하고 새로운 값을 출력받습니다).

이 프로시저를 호출하려면 다음과 같이 합니다:

SET @p = 0;
CALL CalculateRectangle(5, 3, @a, @p);
SELECT @a AS area, @p AS perimeter;

이렇게 하면 5x3 직사각형의 면적과 둘레를 계산합니다.

저장 프로시저 삭제

때로는 우리는 옛날 프로시저와 작별해야 합니다. 걱정하지 마세요, 그렇게 슬퍼 보이지 않습니다! 프로시저를 삭제하려면 DROP 명령을 사용합니다:

DROP PROCEDURE IF EXISTS HelloWorld;

이 명령은 HelloWorld 프로시저가 존재하면 삭제합니다. IF EXISTS 부분은 프로시저가 존재하지 않을 때 오류를 방지합니다.

저장 프로시저의 장점

저장 프로시저는 단순히 멋진 것만이 아니라, 매우 유용합니다! 다음은 몇 가지 장점입니다:

  1. 성능 향상: 프로시저는 한 번 컴파일되고 실행 형식으로 저장되므로 더 빠릅니다.
  2. 네트워크 트래픽 감소: 여러 가지 질문을 보내는 대신, 프로시저 한 번 호출로 대체할 수 있습니다.
  3. 재사용성: 한 번 작성하고 여러 번 사용할 수 있습니다!
  4. 보안: 사용자에게 테이블에 대한 직접 접근을 허용하지 않고 프로시저에 대한 접근을 허용할 수 있습니다.

저장 프로시저의 단점

하지만, 인생의 모든 것처럼, 저장 프로시저도 완벽하지 않습니다. 다음은 몇 가지 단점입니다:

  1. 이동성 제한: 프로시저는 사용 중인 데이터베이스 시스템에 특정합니다.
  2. 디버깅 어려움: 프로시저를 디버깅하는 것은 표준 SQL보다 더 어려울 수 있습니다.
  3. 리소스 소모: 복잡한 프로시저는 상당한 서버 리소스를 소모할 수 있습니다.

클라이언트 프로그램을 사용한 저장 프로시저

마지막으로, 클라이언트 프로그램에서 저장 프로시저를 어떻게 사용할 수 있는지 살펴보겠습니다. 간단한 Python 예제를 보겠습니다:

import mysql.connector

# 데이터베이스에 연결
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# 저장 프로시저 호출
args = (5, 3, 0, 0)
result_args = cursor.callproc('CalculateRectangle', args)

# 결과 출력
print(f"Area: {result_args[2]}")
print(f"Perimeter: {result_args[3]}")

# 연결 닫기
cursor.close()
cnx.close()

이 스크립트는 MySQL에 연결하고 CalculateRectangle 프로시저를 호출하고 결과를 출력합니다.

이제 당신은 MySQL 저장 프로시저의 세계로 첫 걸음을 뗐습니다. 연습이 왕이니, 자신감을 가지고 자신만의 프로시저를 만들어 보세요. 누가 알랍니까? 당신은 다음 데이터베이스 마법사가 될 수도 있습니다! 행복하게 코딩하세요!

Credits: Image by storyset