TIL_저장 프로시저_241123

2024. 11. 23. 23:52·Spring 단기심화 2기

💡 저장 프로시저(Stored Procedure)

일련의 SQL문장을 선언해서 MySQL에 저장하고, 해당 SQL문을 함수처럼 사용하는 것으로 만들어 두기만 하면 함수처럼 호출하여 편하게 사용할 수 있다.

사용 이유

  • 저장 프로시저는 사용자들에게 데이터에 대한 제한적인 접근을 허용케하는 전통적인 수단이다.
  • 쿼리 분석기와 같은 도구를 이용할 경우 원하는 어떠한 작업도 수행가능하므로, 사용자들은 SELECT, INSERT, UPDATE 혹은 DELETE 같은 문장을 직접 실행할 수 있는 권한을 가져서는 안된다.
  • 성능을 향상시키기 위해서이다. 저장 프로시저가 최초로 실행 되면, SQL 서버는 해당 프로시저에 대한 실행계획을 생성, 이 실행 계획이 캐쉬에 저장된다.
  • 50줄 이상의 복잡한 Select 문장이 있으며, 각 실행시 마다 Where 절 조건문이 조금씩 변한다고 가정해 보자. 이 문장을 저장 프로시저에 넣을 경우, 네트워크를 통해 전달되는 데이터 소통량이 상당히 감소하게 되며, 해당 프로시저가 자주 실행될 수록 성능향상 효과가 증대된다.
  • 단일 행을 반환하는 SQL 문장을 실행시키고 싶을 경우에, SQL 문만 사용 하면 결과 집합을 레코드셋으로 반환 받아야 한다. 하지만, 저장 프로시저를 사용할 경우에는 성능이 월등한 출력매개변수의 사용이 가능하다.
  • 단일 쿼리에 대한 실행시간의 차이는 무시할 수 있겠지만, 신규 사용자 등록 같은 단순 insert 작업을 SQL 서버에 수만번 해야한다면, 결과 집합으로 값을 받는 것에 비해 @key를 출력매개변수로 반환하는 경우의 이점은 엄청나게 커지게 된다.

기본 문법

  • 생성
    • 파라미터 선언은 프로시저명() 안에서 선언하고 SQL문과 변수 선언은 BEGIN~END 사이에 작성
    • SELECT 사용 시에는 조회한 컬럼(데이터)을 반드시 INTO로 변수 안에 넣어줘야 함
    • 프로시저 내부에서 사용하는 SQL문은 일반 SQL문 이기 때문에 세미콜론(;)으로 문장을 끝내야함
    📌 DELIMITER
  • 프로시저 작성이 완료되지 않았음에도 SQL문이 실행되는 것을 막기 위해 사용
  • $$ DELIMITER; CREATE PROCEDURE `proc_user_insert`( -- 파라미터 선언 param_id varchar(255) param_name varchar(255) param_campus varchar(255) param_class varchar(255) param_gi varchar(255) ) BEGIN -- 변수 선언 (현재는 없음) -- 쿼리문 insert into ssafy_user(id, name, campus, class, gi) values(param_id , param_name, param_campus, param_class, param_gi); END $$ DELIMITER;
  • 호출
    • CALL 프로시저명(파라미터); 로 손쉽게 사용
  • CALL proc_user_insert('1', '2', '3', '4', '5');
저작자표시 비영리 변경금지

'Spring 단기심화 2기' 카테고리의 다른 글

TIL_@Transactional_241125  (0) 2024.11.25
TIL_Docker-241124  (0) 2024.11.24
TIL_Transaction_241122  (0) 2024.11.22
TIL_JWT_241121  (1) 2024.11.21
TIL_람다와스트림_241119  (0) 2024.11.19
'Spring 단기심화 2기' 카테고리의 다른 글
  • TIL_@Transactional_241125
  • TIL_Docker-241124
  • TIL_Transaction_241122
  • TIL_JWT_241121
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도메인 모델
    코드 계약
    DIP
    역할
    타입
    책임
    티스토리챌린지
    코드트리
    애그리거트 루트
    코딩트리조별과제
    오블완
    객체
    추상화
    유스케이스
    도메인 주도 개발 시작하기
    매핑 구현
    애그리거트
    모듈화
    가독성
    캡슐화
    객체지향의 사실과 오해
    일반화
    리포지터리
    협력
    specification
    책임-주도 설계
    good code bad code
    코딩테스트
    메시지
    인터페이스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
TIL_저장 프로시저_241123
상단으로

티스토리툴바