[소프트웨어개발] 프로시저

thingzoo·2024년 2월 6일
0
post-thumbnail

프로시저

개념

  • 데이터베이스 내에 저장되어, 호출을 통해 실행되거나 특정 이벤트/시간에 자동으로 실행되는 일련의 SQL 쿼리 집합
  • 복잡한 연산이나 트랜잭션 처리 등을 모듈화하여 재사용 가능

역할

  • 데이터 무결성 보장
  • 복잡한 비즈니스 로직 실행
  • 유지 보수 용이성

저장형 객체

저장 함수(Stored Function)

  • 특정 연산을 수행하고 결과값 반환
  • IN 매개변수만 사용 가능, 반환값 데이터타입 명시
  • SQL 쿼리 내 호출해 사용

저장 프로시저(Stored Procedure)

  • 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행, 0개이상 결과 반환
  • 매개변수를 받고, 복잡한 트랜잭션/연산 수행하는 이름있는 PL/SQL 블록
  • IN, OUT, INOUT 매개변수를 통해 데이터를 전달/반환

저장 패키지(Stored Package)

  • 서로 관련된 PL/SQL 프로시저와 함수 모음
  • 선언부와 본문으로 구성

트리거(Trigger)

  • 데이터베이스 테이블에 특정 조작이 발생할 때 자동으로 실행되는 프로시저
  • 데이터 삽입/수정/삭제 등의 이벤트에 반응
  • 테이블 레벨에서 작동하며, 일반적으로 데이터 무결성 유지를 위해 사용

트리거의 종류

  • 행 트리거(Row Trigger)
    • FOR EACH ROW 옵션 사용
    • 지정된 테이블의 각 행에 대한 변경 사항을 감지하고 반응
    • INSERT, UPDATE, DELETE 와 같은 DML 작업 마다 반응
  • 문장 트리거(Statement Trigger)
    • 특정 SQL 문장에 의해 발생하는 이벤트에 대해 한 번만 실행, 개별 행에 대한 참조없이 작동

ORM(Object-Relational Mapping) 프레임워크

개념

  • 객체지향 프로그래밍과 관계형 데이터베이스 간 호환성 격차를 해결하기 위한 프로그래밍 기법
  • 애플리케이션의 클래스와 데이터베이스의 테이블 사이의 매핑을 제공함으로써 객체지향 프로그램엥서 데이터베이스를 더 쉽게 사용할 수 있게 해줌

장단점

  • 장점
    • 개발자가 비즈니스 로직에 더 집중 할 수 있도록 도움
    • 코드의 재사용성 및 유지보수성 향상
    • 데이터베이스 시스템과의 결합도를 낮춰, 데이터베이스 변경이나 마이그레이션 용이
  • 단점
    • 복잡한 쿼리나 특화된 데이터베이스 기능 사용 시, ORM의 제한으로 구현 어려움
    • 프로시저를 많이 사용하는 시스템에서는 ORM의 객체지향적 장점을 제대로 활용하기 어려움

매핑 기술 비교

  • SQL Mapper
    • SQL을 명시하여 단순히 필드를 매핑시키는 것이 목적
    • SQL 문장으로 직접 데이터베이스 데이터를 다룸
    • 예: iBatis, Mybatis, jdbc Template 등
  • OR Mapping
    • 객체를 통해 간접적으로 데이터베이스를 다룸
    • 객체와 관계형 데이터베이스의 데이터를 자동 매핑
    • SQL가 아닌 직관적인 코드로 데이터 조작 가능
    • 예: JPA(Java Persistent API), Hibernate

쿼리 성능 측정

SQL 처리 흐름

  1. 구문 분석(Parsing)
  • SQL문이 이전에 실행되었는지 확인하고, 처음 실행된 경우 구문 분석 수행
  1. 실행 단계
  • 요청된 데이터가 버퍼 캐시에 있는지 확인하고, 없는 경우 데이터를 읽어 캐시에 저장
  1. 인출(추출) 단계
  • 데이터를 버퍼 캐시에서 읽고, 요청한 클라이언트에게 전송
  • SELECT문에서만 사용됨

SQL 성능 최적화를 위한 유틸리티

  • SQL Trace, TKPROF(Trace Kernel PROFile), EXPLAIN PLAN

SQL 성능 개선 절차

  1. 문제 있는 SQL 식별
  2. 옵티마이저 통계 확인
  3. SQL문 재구성
  4. 인덱스 재구성
  5. 실행계획 유지 관리
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글