본문 바로가기
공부/Database

[MySQL] Procedure 사용법

by 웅대 2024. 9. 30.
728x90
반응형

Procedure란?

Procedure는 여러 개의 쿼리 문을 한 번의 실행으로 실행시킬 수 있게 해준다.

 

만약 Procedure를 사용하지 않고 여러 개의 쿼리문을 실행할 경우 무슨 문제가 발생할까?

 

만약 데이터베이스가 클라우드에 배포되어 있고 애플리케이션 서버가 여러 개의 쿼리문을 보낸다면 이 쿼리문을 처리하는 속도는 네트워크의 영향을 받는다.

 

그에 비해 Procedure는 여러 개의 쿼리 문을 묶어서 서버에서 한 번에 실행하기 때문에 네트워크의 영향을 덜 받는다.

 

단점은 다음과 같다.

 

프로시저에 비즈니스 로직이 들어가기 때문에 연산이 많다면 cpu 사용량이 늘어나 성능이 저하될 수 있다.

 

또한 복잡하고 가독성이 좋지 않기 때문에 유지 보수 비용이 늘어난다.

 

장점

  1. 네트워크의 트래픽을 줄일 수 있다.
  2. 프로시저에만 접근 권한을 부여하여 보안을 강화할 수 있다.

 

단점

  1. 쿼리문에 비즈니스 로직이 들어간다.
  2. 유지 보수 비용이 높아진다.

Procedure 사용법

 

한 번 User 테이블에 여러 개의 데이터를 넣는 쿼리를 Procedure로 작성해보자.

 

여러 데이터를 넣는 User 테이블은 다음과 같다.

CREATE TABLE User(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30),
    age INT
);

 

이제 프로시저를 생성해보자.

 

먼저 DELIMITER를 세미 콜론에서 더블 슬래시로 변경해보자.

 

DELIMITER //

 

바꿔주는 이유는 프로시저 내부의 SQL 문의 delimiter와 구분하기 위해서이다.

 

SQL의 delimiter는 세미 콜론을 사용하는데 만약 delimiter를 바꿔주지 않는다면 SQL 문의 세미 콜론을 프로시저의 끝으로 인식할 수 있기 때문이다.

 

이제 프로시저를 생성하자.

CREATE PROCEDURE InsertSampleUsers()
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= 10 DO
        INSERT INTO User (name, age) VALUES (CONCAT('User', i), FLOOR(20 + RAND() * 30)); 
        SET i = i + 1;
    END WHILE;
END //

 

user에는 숫자를 붙여서 구분하고 나이에는 랜덤 값을 넣어주고 있다.

 

delimiter를 세미 콜론에서 더블 슬래시로 바꿨기 때문에 세미 콜론에서 끝나지 않고 마지막 줄의 더블 슬래시까지 프로시저로 인식한다.

 

프로시저를 생성했으면 delimiter를 다시 세미 콜론으로 변경한다.

DELIMITER ;

 

CALL 을 통해 procedure를 호출한다.

CALL InsertSampleUsers();

 

728x90
반응형

댓글