티스토리 뷰
Procedure
프로젝트를 하다가 데이터베이스와 관련된 글들을살펴보면 간혹 프로시저에 대한 내용들이 나온다. 매번 그냥 넘겨짚어서 아 이런게 있구나 했지만 알아두면 좋을것 같아서 따로 정리해보기로 했다.
프로시저란
간단하게는 프로그램을 여러개의 단위로 분해한것을 프로시저라고 한다.
보통 기능에따라 분해되는 단위로 프로시저라고 일컫는데, 이를 세부적으로는 서브 프로시저와 함수 프로시저로 구분한다고한다.
서브 프로시저
프로시저를 수행후 결과값을 반환하지 않는 프로시저를 말한다.
[Private][Public][Static] Sub 프로시저명 [Args]
[명령문]
[Exit Sub]
[명령문]
End Sub
위는 서브 프로시저의 구문 형태를 나타내고있다.
Private, Public같은 경우 프로시저의 유효범위, Static은 정적 프로시저인지, Args는 서로다른 프로시저간의 정보 교환 수단으로 사용된다. 프로시저 수행 중간에 Exit Sub 명령을 만나게되면 프로시저를 빠져나온다.
프로시저의 유효범위를 생략하면 디폴트로 Public이다.
서브 프로시저는 더 구체적으로 사건(Event) 프로시저와 사용자정의 프로시저로 구분된다.
사건(Event) 프로시저
해당 사건이 발생하면 자동적으로 실행된다 (ex: click, drag..)
사용자 정의 프로시저
호출시에만 실행된다, 이벤트 프로시저는 어떤 객체에 이벤트가 발생하면 생성되는 프로시저로, 프로시저명이 객체명_이벤트()로 표현된다.
서브 프로시저를 호출 할 때는 다음과 같은 형식을 이용한다.
[Call] 호출할 프로시저 명 [Args]
함수 프로시저
함수 프로시저는 사용자가 정의하여 사용하는 사용자 정의 함수를 말하는데, 결과값을 호출 프로시저에게 반환하는 특징을 갖고있다.
[Private][Public][Static] Function 함수이름 [Args][As 자료형]
[명령문]
[Exit Function]
[명령문]
End Function
As 자료형은 함수가 수행을 완료한 후 반환할 결과 값의 자료형을 나타낸다.
함수 프로시저를 호출하는 형식은 다음과 같다.
변수=함수이름(매개변수 리스트)
함수 프로시저에서 호출된 프로시저로 반환되는 형식은 다음과 같다
함수이름 = 결과 값
여기까지 프로시저에 대한 개념을 알아보았다. 솔직히 말해서 개발하면서 흔히 사용하는 함수랑 무슨 차이가 있는가 싶었다.
그래서 더 검색해보고 공부해본 결과.. 프로시저란것은 결국 어떤 행동을 수행하기 위한 일련의 작업 순서를 말하는것인데, 이런 점들만 생각을 해보면 기존에 함수를 통해서 구현한 코드또한 프로시저일수 있는것이다. (다만 좀더 원시적인 용어로써 받아들여질 뿐)
그리고 한가지 중요하게 구분되어야 할 점이 있는데, 처음 내가 궁금했던 프로시저에 대한 의미는 사실 Stored Procedure라는 구분된 개념이라는 점이다.
저장 프로시저(Stored Procedure)
저장 프로시저는 데이터베이스에서 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 일반적인 RDBMS에 저장되고, 영구저장모듈(Persistent Storage Module)이라고도 불린다. (SP라고도 불리고..)
이런 저장 프로시저를 활용하는 이유는 다음과 같다.
개발 측면
- 반복적인 작업을 피할 수 있다.
- 함수의 특징과도 같은..
- 개발 언어에 비의존적이다
- SP는 RDBMS에 종속된 개념이므로
- 확장 및 유지보수가 간편하다
- DB관련 작업을 수정할때 프로시저만 건드리면 되기 때문
- 프로그램 에러 확률이 줄어든다
- 이부분은 사실 경험해보지 않아서 잘은 모르겠다
성능 측면
-
최적화 및 캐싱
-
SP는 최초 실행될 때 최적화된 상태로 컴파일이 되고 이후 DB에 캐싱되어 저장된다. 캐싱이후에는 최적화와 컴파일 작업을 다시 수행하지 않는다.
-
-
네트워크 트래픽을 감소 시킨다.
- 개발단에서 날리던 쿼리를 DB 서버에서 자체적으로 처리하니 트래픽이 크게 감소된다
보안 측면
SP에서 참조하고 있는 테이블에 접근 권한을 설정할 수 있다. (자바 언어의 특징인 은닉성과 같은 특징을 갖는다고 생각해보면 될것같다. getter를 통해서 실제 데이터에 접근하는 등..)
참고 링크 : https://itability.tistory.com/51
'Back-end' 카테고리의 다른 글
[Spring] Servlet이란? (0) | 2019.04.09 |
---|---|
[Back-end] 메이븐이란? (0) | 2019.01.29 |
[SpringFramework]Application.java 에 대하여 (0) | 2019.01.28 |
[JPA]JPA Criteria & Specification (0) | 2019.01.15 |
[Back-end] jwt token 통신과정 (0) | 2019.01.14 |