본문 바로가기
DB/MySQL

(MySQL/DB) 프로시저

by windy7271 2023. 3. 3.
728x90
반응형

프로시저

SQL 쿼리를 미리 작성하여 컴파일 한 후 저장한 객체이다.

여러 쿼리를 한 번에 수행하는 것이다

 

프로시저는 데이터 베이스의 향상되며, 반복적으로 사용되는 SQL쿼리를 매번 실행하는 것 보다 프로시저를 사용한것이 좋다.

 

함수와 유사한 느낌이다.

 

함수는 클라이언트에서 처리하며, 리턴값이 필수이고, 리턴값은 하나만 변환가능하다.

하지만 프로시저는 서버로 보내서 처리하며, 리턴값은 선택하고, 리턴값은 여러개 반환된다.

SQL처리하는 위치에서 차이이며, 프로시저가 더 빠른 성능을 보인다.

 

프로시저는 언제 사용해?? ++ 장점

  • 자주 반복되는 작업을 할 경우
  • 복잡한 작업을 할 경우
  • 보안성을 높여야 할 경우
  • 성능을 높여야 할 경우

예를 들면 회원가입시 포인트도 같이 주는것

이 프로시저는 회원가입과 동시에 지급할 포인트를 계산하여 포인트를 지급한다. >> 

프로시저를 통해 동시에 이뤄지므로 성능면에서 뛰어나다.

프로시저를 사용하는 이유가 뭐야??

  • 하나의 요청으로 여러 SQL문 실행
  • 네트워크 소요 시간 줄인다.
  • 보수성 뛰어나다
  • 개발 업무를 구분하여 개발할 수 있다.

 

프로시저는 트랜잭션을 지원하며, 프로시저 내에서 트랜잭션을 처리할 수 있다.

또한, 프로시저는 매개변수를 사용하여 인자를 전달할 수 있습니다

 

단점은 뭐야??

  • 복잡성:  쿼리 작성하는 것보다 복잡하다
  • 이식성: db마다 프로시저 구현하는 방식이 다르다
  • 디버깅: 프로시저가 오류가 있을 경우, 디버깅이 쉽지 않다.
  • 제한된 유연성: 미리 정의된 작업 이외의 다른 작업을 수행하기 위해서는 새로운 프로시저를 만들어야함

 

트랜잭션 : 데이터베이스의 하나의 논리적인 작업단위

특징

  • 원자성(Atomicity): 트랜잭션이 전부 실행되거나 전부 않아야 합니다.
  • 일관성(Consistency): 트랜잭션 전후 데이터의 일관성이 유지되어야 합니다.
  • 격리성(Isolation): 트랜잭션 수행 중 다른 트랜잭션의 연산이 끼어들지 못하도록 보장합니다.
  • 지속성(Durability): 트랜잭션이 성공적으로 완료됐을 경우, 결과가 영구적으로 반영되어야 합니다.

사용자 업데이트 하는 프로시저를 만든다고 칠때 프로시저는 해당 사용자의 id,password,생일 등을 받아 db에 저장가능하다.

이렇게 만든 프로시저는 필요할 때 마다 사용 할 수 있으며, 반복된 코드를 줄일 수 있다. 

 

 프로시저를 실행하는 도중에 어떤 오류가 발생하면, 이전에 실행된 작업들이 모두 롤백되어 데이터 일관성을 유지할 수 있습니다.

 

어떻게 만들어 ??

CREATE PROCEDURE register_member(IN member_name VARCHAR(255), IN email VARCHAR(255))
BEGIN
  -- 회원 정보 등록
  INSERT INTO members(name, email) VALUES (member_name, email);
  
  -- 포인트 지급
  UPDATE members SET points = points + 100 WHERE email = email;
END;

 

register_member 라는 이름을 가진 프로시저를 만드는데

매개변수로 사용될 인자들을 넘긴다. 위 코드로는 member_name, email 을 넘긴다.

members 테이블에 name, email 에 저 두개를 넘긴다.

members 테이블에 potins 에 100 포인트를 더해준다.

 

In / Out

 

CREATE PROCEDURE calculate_salary(IN employee_id INT, OUT salary INT)
BEGIN
  SELECT salary INTO salary FROM employees WHERE id = employee_id;
  SET salary = salary * 1.1;
END;


위 프로시저는 employee_id를 IN 매개변수로 받아 해당 id를 가진 employees 테이블의 salary 값을 조회한다.
그리고 salary 값을 1.1배로 증가시켜 OUT 매개변수인 salary에 대입한다.
이렇게 하면 salary 값의 계산 결과를 호출자에게 반환할 수 있다.

 

 

프로시저 목록 확인
show procedure status;

프로시저 내용 확인
show create procedure 프로시저이름

프로시저 삭제
drop procedure 프로시저 이름
반응형

댓글