저장프로시저와 트리거

저장프로시저(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 15417
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13960
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16496
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22048
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23267
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18921
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39245
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174696
1398 N 윈도우와 맥 개발 시작을 위한 파이어몽키 코스북: 무료 다운로드 제공(385페이지) 관리자 2013.04.05 152328
1397 ComPort(시리얼 통신) 컴포넌트 설치안내 [11] file 험프리 2013.12.04 107147
1396 [REST API] REST 기반 파일 업로드와 다운로드 구현하기 험프리 2020.08.31 83042
1395 델파이 튜토리얼 자습서 이용 안내 관리자 2014.09.01 71936
1394 이 달의 기술자료 - 2014년 11월 험프리 2014.10.13 54120
1393 이 달의 기술자료 - 2014년 6월 file 험프리 2014.06.05 50357
1392 Find the O/S Language Type c2design 2014.07.30 47764
1391 RAD Studio Resource Center 박병일 2012.01.26 46451
1390 CD-ROM 열고 닫기 박병일 2011.12.22 44762
1389 [Android] 폰번호 가져오기 [1] 타락천사 2014.09.05 38535
1388 이 달의 기술자료 - 2014년 12월 file 험프리 2014.11.26 32457
1387 RAD Studio XE6 Update1 발표 [1] Humphery 2014.06.20 29462
1386 델파이XE2 파이어몽키 기반 아이폰앱 개발에서 제스춰를 인식시키는 방법 박병일 2012.01.25 23255
1385 [10.4 시드니 신기능] 새로운 VCL TEdgeBrowser 컴포넌트 험프리 2020.05.18 22909
1384 SendMessage 함수를 이용한 메세지 전송 관리자 2012.01.05 18255