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

저장 프로시저(Stored Procedure)의 장점과 JDBC 호출 예제 총정리

저장 프로시저란 무엇인가?

저장 프로시저(Stored Procedure)는 데이터베이스 서버에 미리 컴파일되어 저장되는 SQL 문의 집합입니다. 반복적으로 실행해야 하는 작업을 하나의 프로시저로 묶어두면 성능과 유지보수성 면에서 큰 이점을 얻을 수 있습니다.

저장 프로시저의 주요 장점

  • 빠른 응답 속도 — 저장 프로시저는 한 번 컴파일된 후 데이터베이스에 저장되기 때문에, 프로시저를 호출할 때마다 빠른 응답 속도를 기대할 수 있습니다.

  • SQL 문의 일괄 실행 — 필요한 모든 SQL 문을 하나의 프로시저 안에 그룹화하여 한 번에 실행할 수 있습니다.

  • 서버 측 처리로 인한 성능 향상 — 프로시저는 클라이언트보다 처리 속도가 빠른 데이터베이스 서버에 저장됩니다. 따라서 복잡한 쿼리를 프로시저로 실행하면 전체적인 처리 속도가 향상됩니다.

  • 코드 중복 제거 — 프로시저를 활용하면 동일한 코드를 반복해서 작성할 필요가 없으며, 저장 함수(Stored Function) 호출과 같은 추가 SQL 기능도 함께 사용할 수 있습니다.

  • 손쉬운 유지보수 — 한 번 컴파일된 저장 프로시저는 여러 애플리케이션에서 재사용할 수 있습니다. 변경이 필요할 경우 애플리케이션 코드를 수정하지 않고 프로시저만 수정하면 되므로 유지보수가 매우 편리합니다.

  • Java와의 상호 운용성 — Java 코드에서 PL/SQL 저장 프로시저를 호출할 수 있고, 반대로 PL/SQL에서 Java 저장 프로시저를 호출하는 것도 가능합니다.

예제: 저장 프로시저 생성 및 호출하기

먼저 다음과 같은 구조를 가진 Employees 테이블이 생성되어 있다고 가정해 보겠습니다.

+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| Name     | varchar(255) | YES  |     | NULL    |       |
| Salary   | int(11)      | NO   |     | NULL    |       |
| Location | varchar(255) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

그리고 Employees 테이블에 데이터를 삽입하는 myProcedure라는 이름의 저장 프로시저가 있다고 가정합니다.

Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45))
   -> BEGIN
   -> INSERT INTO Employees(Name, Salary, Location) VALUES (name, sal, loc);
   -> END //

다음 JDBC 프로그램은 위에서 생성한 저장 프로시저를 CallableStatement를 통해 호출합니다.

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Example {
    public static void main(String args[]) throws SQLException {
        // 드라이버 등록
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 연결 설정
        String mysqlUrl = "jdbc:mysql://localhost/testdb";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");
        // CallableStatement 준비
        CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
        cstmt.setString(1, "Amit");
        cstmt.setInt(2, 3000);
        cstmt.setString(3, "Hyderabad");
        cstmt.execute();
        cstmt.setString(1, "Kalyan");
        cstmt.setInt(2, 4000);
        cstmt.setString(3, "Vishakhapatnam");
        cstmt.execute();
    }
}

실행 결과

Connection established......

프로그램 실행 후 Employees 테이블의 내용을 확인해 보면, 아래와 같이 새로 추가된 두 개의 행을 확인할 수 있습니다.

+-----------+--------+----------------+
| Name      | Salary | Location       |
+-----------+--------+----------------+
| Amit      | 3000   | Hyderabad      |
| Kalyan    | 4000   | Vishakhapatnam |
+-----------+--------+----------------+

마무리

이처럼 저장 프로시저는 성능 최적화, 코드 재사용, 유지보수성 향상 등 다양한 장점을 제공합니다. 특히 반복적인 데이터베이스 작업이 많거나 여러 애플리케이션에서 동일한 로직을 공유해야 하는 환경이라면 저장 프로시저를 적극적으로 활용해 보시기 바랍니다.