저장프로시저와 트리거

저장프로시저(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 15442
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [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 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
403 [엠바카데로 Feature Friday][개발팁] VCL 멀티-컬럼(Multi-Column) 리스트 박스 관리자 2019.05.24 590
402 이 달의 기술자료 - 2016년 09월 file 험프리 2016.08.25 590
401 [발표자료] 20151019 David I 초청 워크샵: 윈도우 애플리케이션 개발자를 위한 DeepDive! 관리자 2015.10.20 589
400 [도서/PDF/소스코드] 델파이 Begin...End - 13장. ADO를 사용한 데이터베이스 프로그래밍 관리자 2019.08.20 589
399 [고객사례-솔루션, 델파이] 비디오 오피스(VideoOffice) - 화상회의 솔루션 관리자 2020.03.25 586
398 이 달의 기술자료 - 2021년 04월 험프리 2021.03.25 584
397 [프로그래밍 애피타이저] 1장. 컴퓨터프로그램이란 ? file 김원경 2020.04.06 584
396 그라데이션이 적용된 멋진 스타일을 적용하고 싶다면 - 스텔라(Stellar) FMX 스타일 관리자 2019.09.17 584
395 [도서/PDF/소스코드] 델파이 Begin...End - 10장. 보고서 작성하기 관리자 2019.08.19 584
394 [10.3 리오][업데이트1] Boost 라이브러리를 C++빌더 10.3.1부터 사용할 수 있습니다! 관리자 2019.05.16 584
393 [발표자료] 20151124 온라인세미나: 델파이 코드 마이그레이션 Step by Step 관리자 2015.11.25 580
392 이 달의 기술자료 - 2018년 01월 험프리 2017.12.28 579
391 C++ 언어와 C++빌더의 23년! 관리자 2020.03.13 577
390 [개발환경] 깃허브에 저장소 생성 및 연동하기(3) 험프리 2019.06.20 576
389 RAD스튜디오 로드맵 - 2017년 9월 관리자 2017.10.23 576
388 [XE8] IDE 설정값을 내보내고 불러올 수 있어, 일관된 IDE 설정을 유지할 수 있습니다. file Humphery 2015.07.28 575
387 [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 14. TMemo 콘트롤 관리자 2019.03.29 575
386 엔터프라이즈 커넥터로 VCL 애플리케이션에서 '구글 시트' 데이터 조회 및 편집하기 험프리 2019.10.04 574
385 [도서/PDF/소스코드] 델파이 Begin...End - 19장. 컴포넌트 작성 관리자 2019.08.20 574
384 [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 15. TMemo 콘트롤 (계속) 관리자 2019.03.29 573