Database

[Database] μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)

quedevel 2023. 3. 26. 15:36
728x90
λ°˜μ‘ν˜•

🎯 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)


μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 내에 미리 μž‘μ„±λœ SQL μ½”λ“œ λΈ”λ‘μœΌλ‘œ, 일련의 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” 반볡적으둜 μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ΄λ‚˜ λ³΅μž‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μœ μš©ν•˜λ©°, μ‹€ν–‰ 속도와 λ³΄μ•ˆμ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.


μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure) μ‚¬μš©λ²•


DELIMITER $$

CREATE PROCEDURE `get_employee` (
    IN employee_id INT
)
BEGIN
    SELECT * FROM employees WHERE id = employee_id;
END $$

DELIMITER ;

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” get_employeeλΌλŠ” μ΄λ¦„μ˜ μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μƒμ„±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” employee_idλΌλŠ” μž…λ ₯ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” 직원 정보λ₯Ό μ‘°νšŒν•˜λŠ” SQL을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ μƒμ„±λœ μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ‹€μŒκ³Ό 같이 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CALL get_employee(1);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” employee_id에 1을 μž…λ ₯ν•˜μ—¬ employees ν…Œμ΄λΈ”μ—μ„œ idκ°€ 1인 직원 정보λ₯Ό μ‘°νšŒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ μ—¬λŸ¬ 번 ν˜ΈμΆœλ˜λ―€λ‘œ, μ‹€ν–‰ 속도와 λ³΄μ•ˆμ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ, λ„€νŠΈμ›Œν¬ λŒ€μ—­ν­μ„ 쀄이고 데이터 μœ νš¨μ„±μ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)의 μž₯단점


⭐️ ν”„λ‘œμ‹œμ €μ˜ μž₯점

  1. μ„±λŠ₯
    • μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” 컴파일된 ν˜•νƒœλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ 내에 μ €μž₯λ˜μ–΄ 있기 λ•Œλ¬Έμ—, 일반 SQL 쿼리보닀 더 λΉ λ₯΄κ²Œ μ‹€ν–‰λ©λ‹ˆλ‹€. 특히, 반볡적으둜 μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€.
  2. λ³΄μ•ˆμ„±
    • μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ, μ™ΈλΆ€μ—μ„œ 직접 SQL 쿼리λ₯Ό μ‹€ν–‰ν•˜λŠ” 것보닀 λ³΄μ•ˆμ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€. λ˜ν•œ μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ μ ‘κ·Ό κΆŒν•œμ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±
    • μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 내뢀에 μ €μž₯λ˜μ–΄ μžˆμœΌλ―€λ‘œ, λ‹€λ₯Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ„ μ‰½κ²Œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. μœ μ§€ λ³΄μˆ˜μ„±
    • μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œλ₯Ό ν•œ κ³³μ—μ„œ 관리할 수 μžˆμœΌλ―€λ‘œ, μœ μ§€ λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ©λ‹ˆλ‹€.

πŸ’€οΈ ν”„λ‘œμ‹œμ €μ˜ 단점

  1. ν•™μŠ΅ λΉ„μš©
    • μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ³„λ„μ˜ μ–Έμ–΄λ‘œ μž‘μ„±λ˜κΈ° λ•Œλ¬Έμ—, SQL 쿼리λ₯Ό μž‘μ„±ν•˜λŠ” 것보닀 ν•™μŠ΅ λΉ„μš©μ΄ 높을 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μœ μ—°μ„±
    • μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œλ§Œ 싀행될 수 μžˆμœΌλ―€λ‘œ, λ‹€λ₯Έ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. 디버깅
    • μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 일반적으둜 μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ³„λ„μ˜ 도ꡬλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  4. μœ μ§€λ³΄μˆ˜ 및 개발자 μ˜μ‘΄μ„±
    • μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μž‘μ„±ν•œ κ°œλ°œμžκ°€ 쑰직을 λ– λ‚˜κ±°λ‚˜, 업무λ₯Ό λ³€κ²½ν•˜λ©΄ μ €μž₯ ν”„λ‘œμ‹œμ €μ˜ μœ μ§€λ³΄μˆ˜λ‚˜ 변경이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•