저장프로시저와 트리거

저장프로시저(Stored Procedure)? 

 

DB 내부에 저장된 일련의 SQL 명령문들을 하나의 함수처럼 실행하기 위한 쿼리의 집합입니다.

 

DB 작업을 진행함에 있어서 항상 하나의 쿼리문으로 자신이 원하는 데이터 처리를 할 수는 없습니다. 어떤 일은 여러 줄의 쿼리로 해결해야 합니다. 그런데 그 `어떤 일`이 여러 곳에서 필요하다면? 그 때마다 여러 줄의 쿼리 문을 다 작성하는 것이 바람직한 방법일까요?

 

일반 프로시저와 같이 코드의 중복이 많아지면 프로그램 사이즈도 커지고, 수정이 필요한 경우 다 수정해야 하는 번거로움이 있으며 데이터베이스 서버 쪽에서도 각 클라이언트에서 날라오는 SQL문을 각각 분석하고 실행해야 하기 때문에 네트워크 트래픽이 증가합니다. 그래서 업무적으로 자주 사용되는 SQL 들을 서버 쪽에 루틴으로 미리 작성하여 실행될 때 최적화된 상태로 컴파일이 되어 서버 측에 저장되는데 이를 저장프로시저라고 합니다.

 

저장 프로시저를 사용하면 상대적으로 다음과 같은 장점들이 있습니다.

 

 

저장프로시저의 장점

 

·         코드의 중복을 피할 수 있습니다.

 

·         소스의 재 컴파일 없이 확장 및 유지 보수가 간편해 집니다.

 

·         프로그램 에러 확률이 크게 줄어듭니다.

 

·         성능향상

           저장프로시저는 앞에서 언급한 것처럼 최초 실행될 때 최적화된 상태로 컴파일이 되고 이후에 DB에 캐쉬 되어   

           저장됩니다. 캐쉬에 저장되면 최적화와 컴파일 작업을 다시 하지 않는다. 따라서 하나의 저장프로시저가 여러 번   

           사용될 때 성능에 향상이 있습니다.

 

·         네트워크 트래픽이 감소합니다.

      저장프로시저를 사용하면 SQL문이 서버에 저장됩니다. SP를 사용하면 수백 개의 SQL문이 필요한 일도 서버에서   SP로 처리 하기 때문에 쿼리문 자체를 전달하지 않아도 됩니다이 때 각각의 클라이언트는 매개변수만 전달합니다.

 

 

저장프로시저1.png

 

 

 

 

 

 

 

 

 

 

 

 

 

트리거(Trigger)?

 

트리거(Trigger) 영어로 방아쇠라는 뜻인데, 방아쇠를 당기면 그로 인해 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아갑니다

 

이처럼 데이터베이스에서도 트리거(Trigger) 특정 테이블에 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다.

 

즉 ! 저장프로시저처럼 사용자가 직접 호출하는 것이 아니라, 데이터베이스에서 자동적으로 호출하는 것이 가장 특징입니다.

 

트리거(Trigger)는 테이블과 뷰 데이터베이스 작업을 대상으로 정의할 수 있으며전체 트랜잭션 작업에 대해 발생되는 트리거(Trigger)와 각행에 대해 발생되는 트리거(Trigger)가 있습니다.

 

 

트리거(Trigger) 적용되는

 

부서별 사원관리 시스템에서 특정 부서를 삭제해야 하는 경우, 그 부서에 해당하는 직원들은 여러 명이 있을 수 있습니다. 그러면 그 부서만 삭제된다면 부서가 없는 사원들이 생겨서 참조 무결성 오류가 발생하게 될 것입니다. 아니면 한 명 한 명의 사원들을 일일이 삭제하는 명령어를 실행해야 합니다. 이러한 작업을 데이터베이스 서버의 트리거로 작성하여 부서를 지우게 전에 해당 부서의 사원들을 지울 수 있도록 트리거 루틴으로 작성합니다.

 

 

또 다른 예로 다음과 같은 상황에서 트리거(Trigger)를 사용할 수 있습니다. 어떤 쇼핑몰에 하루에 수만 건의 주문이 들어옵니다. 주문데이터는 주문일자, 주문상품, 수량, 가격이 있으며, 수천 명의 임직원이 일자 별, 상품별 총 판매수량과 총 판매가격으로 구성된 주문 실적을 실시간으로 온라인상에 조회를 했을 때, 한 사람의 임직원이 조회할 때마다 수만 건의 데이터를 읽고 계산해야 합니다. 만약 임직원이 수만 명 이고, 데이터가 수백만 건이라면, 또 거의 동시다발적으로 실시간 조회가 요청된다면 시스템 퍼포먼스가 떨어질 것입니다.

 

따라서 트리거(Trigger)를 사용하여 주문한 건이 입력될 때마다, 일자 별 상품별로 판매수량과 판매금액을 집계하여 집계자료를 보관하도록 만들어줍니다.

 

 

패키지

 

어떠한 특정 목적을 가진 함수의 집합 등을 모아서 패키지로 묶는 다는 개념입니다.패키지는 다른 개발 언어와 유사하게 정의 또는 선언부(Package)와 구현부(Package Body)를 분리하여 관리합니다.

 

 

참고: 저장프로시저나 트리커 및 패키지를 만드는 SQL 문법은 데이터베이스 별로 다를 수 있습니다. 저희는 교육에서 인터베이스를 사용하면 저장프로시저가 작성되어 있는 데이터베이스를 사용할 것입니다. 하지만 개인 프로젝트 진행 시에는 본인 프로젝트에 맞춰서 저장프로시저와 트리거등을 작성하여 사용한다면 배우신 부분을 복습할 뿐만 아니라 훨씬 더 실제 프로젝트에 맞춰 진행하시는 것입니다.

 

다운 로드 : 9장 저장프로시저와트리거.pdf

 


프로그래밍을 제대로 공부해보고 싶다면, 다음 순서로 진행하시는 것을 권장합니다.

 

  1. 프로그래밍 애피타이저 시리즈
  2. [동영상] 데브기어 델파이 기초 시리즈
  3. [오프라인 강의] 델파이/C++빌더 기초 강화
  4. [오프라인 강의] 델파이/C++빌더 윈도우 프로그래밍

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15438
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13961
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39255
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174699
1223 [델파이 문법] 클래스와 객체 #16 file 관리자 2012.06.26 6339
1222 [동영상 강의] 델파이 기본 교육_20.스토어드 프로시저 관리자 2012.08.07 6328
1221 인터베이스 (InterBase) 매뉴얼 및 튜토리얼 관리자 2012.06.15 6327
1220 RAD Studio XE3와 SQLite 관리자 2012.10.09 6325
1219 [REST API] 다음 Kakao > 로컬 > 주소검색 연동하기 [2] 험프리 2017.09.18 6309
1218 [세미나자료] 인터베이스(InterBase) in Action, Live! file 관리자 2012.05.10 6261
1217 [C++빌더 XE3 비디오 31] dbExpress와 ClientDataSet을 사용해 SQL 데이터베이스 C++ 파이어몽키 앱 만들기 관리자 2013.01.09 6250
1216 안드로이드 API를 파이어몽키에서 사용하기(Toast 메세지 구현) file Humphery 2013.12.17 6220
1215 [환경설정] 아마존 EC2 이용해 윈도우 서버 환경 구축하기 [1] file 험프리 2017.04.13 6213
1214 [델파이 문법 시리즈] #7. 제네릭 - 클래스 변수, 표준함수 file 관리자 2012.04.02 6210
1213 파이어몽키 모바일에서 사용자 파일 배포 및 사용 file 험프리 2013.12.27 6199
1212 델파이 에서 안드로이드로 박병일 2012.01.06 6196
1211 [동영상강의] 델파이 기본 교육_11.메뉴 작성 컴포넌트 설명 관리자 2012.06.20 6182
1210 RAD스튜디오나 델파이만으로 (별도 맥 컴퓨터 없이) 아이폰 앱을 만들고 앱스토어에 올릴 수 있습니다. 관리자 2013.05.30 6160
1209 David I의 31 XE3 퀵 비디오 - 윈도우8 스타일 사용하기 관리자 2012.10.08 6159
1208 [동영상강의] 델파이 기본 교육_14.메모장 만들기3 (스프래쉬 화면과 리포지토리) 관리자 2012.07.06 6159
1207 PrintDialog 를 사용하지 않고 프린트 하기 박병일 2011.12.22 6155
1206 [델파이 문법] 프로시저와 함수 #7 file 관리자 2012.08.13 6134
1205 [10.2 도쿄] 델파이/C++빌더 리눅스 개발환경 설정하기 [1] file 험프리 2017.02.21 6125
1204 [델파이 문법] 문법 요소 #13 file 관리자 2012.11.20 6109