저장프로시저와 트리거

저장프로시저(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 15441
공지 [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
383 델파이 개발자를 위한 파이썬 file 관리자 2020.09.23 569
382 [업데이트][핫픽스][10.2.2] RTL 호환성패치 및 안드로이드 애니메이션 문제 해결 - 2018년 2월 패치 file 험프리 2018.02.20 569
381 도커(Docker) 제대로 활용하기 험프리 2020.02.07 568
380 기술자료 TOP 7 - 개발자들이 가장 많이 클릭한 기술자료는? (2019년 상반기) 관리자 2019.06.25 566
379 [10.4 시드니 신기능 Deep Dive] 겟잇 패키지 매니저의 새로운 기능들 관리자 2020.06.22 565
378 주요 OS 시장 점유율 - 윈도우와 안드로이드! file 관리자 2019.11.19 565
377 프로젝트 경험을 통해 터득한 효과적인 마이그레이션 프로세스 file 험프리 2020.01.22 563
376 [시애틀] 스타일북 컴포넌트에 여러개의 플랫폼 스타일을 담을 수 있습니다. Humphery 2015.09.04 563
375 [도서/PDF/소스코드] 델파이 Begin...End - 17장. DataSnap REST 관리자 2019.08.20 562
374 [10.3 리오] 기타 컴파일러, 데이터, RTL 개선사항 험프리 2018.12.06 562
373 RAD 스튜디오에서 iOS 12에 대응 험프리 2018.09.27 559
372 [10.3 리오][업데이트 2] 새로운 RAD서버 관리 콘솔 관리자 2019.08.28 558
371 [10.4 시드니][업데이트 2] What's NEW! 신기능 자세히 보기 관리자 2021.02.26 557
370 [마이그레이션][팁] 배치파일(커맨드 명령어)을 이용해 손쉽게 소스파일 갯수를 파악할 수 있습니다. 관리자 2019.04.11 555
369 [데모 영상] 델파이 프로젝트에 구글 시트 연동하기 (엔터프라이즈 커넥터 활용) 관리자 2019.11.08 555
368 [베를린 U1] TGrid가 네이티브 렌더링을 지원해 더 부드럽고 강력한 기능을 제공합니다. file 험프리 2016.09.20 555
367 [고객사례-유틸리티, 델파이] TreeSize - 하드 디스크 공간 관리 프로그램 관리자 2020.02.18 554
366 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 8장(실습). TFrame [1] 관리자 2020.02.04 554
365 [고객사례-위치확인, 배터리 문제 해결, 모바일, 델파이] WhereontheMap [1] 관리자 2018.03.29 553
364 [다음 버전 정보] C++11을 32비트 윈도우 앱 개발에서 사용할 수 있습니다. Humphery 2015.08.25 553