SSAFY - 공유Day 발표

민성재·2021년 12월 28일
0
post-thumbnail

MySQL 프로시저 실습

Stored Procedure (저장 프로시저) 는 MySQL 이 제공하는 기능인데, 테이블과 마찬가지로 DB 개체중의 한가지이며 DB 내부에 저장됩니다.

주로 사용하는 동작 쿼리를 모듈화하여 필요할때 호출만 하면 간단하게 사용할 수 있도록 하는 기능입니다.

여러 쿼리를 프로시저 하나에 등록하여 동시에 수행할 수 있다는 것이 중점입니다.

또한, 분기문(if, case) 루프(while) 등을 통해 간단한 프로그래밍이 가능하기에 전통적인 SQL이 갖는 약점을 보완할 수 도 있다.

단, 로직이 복잡해진다면 디버깅이 힘들고 MySQL 서버단에 프로시저가 저장되는 구조이기에 서버 부하가 증가될 수 있다.(5줄 넘어가면 보통 버그 많아짐..)


프로시저의 문법

  • CREATE PROCEDURE
  • BEGIN ~ END


    프로시저의 문법은 두 부분으로 나뉘는데

    CREATE PROCUDURE에서는 프로시저의 이름과 파라미터 선언이 이루어집니다.
    BEGIN ~ END 에서는 수행할 쿼리 OR 로직을 넣습니다.

위의 사진에서 저는 CREATE 부분에 proc_user_insert라고 프로시저 이름을 지정하고
원래 테이블이 가지는 레코드인 id, name, campus, class, gi 에 대해 각각 파라미터를 선언했습니다.

그리고 BEGIN ~ END 부분에서 파라미터들을 미리 만들어둔 ssafy_table에 insert 하는 쿼리를 넣어뒀습니다.

다음과 같이 CALL '프로시저 명' (파라미터들); 이라는 문법으로 프로시저 콜을 하면
정상적으로 테이블에 INSERT가 되어있는 것을 확인할 수 있습니다.

프로시저의 장단점

[장점]

  1. DB 보안 향상

    자체 보안 설정 기능을 통해 단위 실행 권한을 부여할 수 있습니다.

  2. 롤백 기능

    로직 내부에 롤백기능을 추가할 수 있어 안정성이 올라간다.

  3. 네트워크 소요 시간 절감

    만약 동일한 쿼리를 100번 이상 반복하여 호출한다면, 서버에서 반복적으로 호출하는 것 보다, DB단에서 반복 호출하여 결과물을 출력하는 것으로 소요 시간을 줄일 수 있습니다. 또한 쿼리 수정시 별도의 컴파일 작업이 필요하지 않습니다.

  4. 로직 구현

    SQL 쿼리는 절차적 기능을 제공하지 않지만, SP는 IF, WHILE 같은 제어문을 허용합니다.

  5. 개발 업무 구분

    순수하게 어플리케이션 개발과 DBMS 관련 코드를 개발하는 조직이 별도로 구분되어 있으면, DBMS 코드를 개발하는 조직에서는 트랜잭션 단위로 데이터베이스 관련 처리를 하는 스토어드 프로그램을 만들어 API처럼 제공하고, 애플리케이션 개발자는 스토어드 프로그램을 호출해서 사용하는 형태로 역할을 구분해서 개발을 진행할 수 있습니다.


[단점]
  1. 낮은 처리 성능

    문자, 숫자열 연산에 프로시저를 사용하면 오히려 C, JAVA보다 느린 성능을 볼 수 있습니다. 또한 복잡한 로직을 처리할 수는 없고 버그가 잦아집니다.

  2. 유지 보수의 어려움

    설치, 배포, 버전 관리 등이 어렵습니다.

profile
민성재 개발 블로그

0개의 댓글