프로시저
개념
- 데이터베이스 내에 저장되어, 호출을 통해 실행되거나 특정 이벤트/시간에 자동으로 실행되는 일련의 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 처리 흐름
- 구문 분석(Parsing)
- SQL문이 이전에 실행되었는지 확인하고, 처음 실행된 경우 구문 분석 수행
- 실행 단계
- 요청된 데이터가 버퍼 캐시에 있는지 확인하고, 없는 경우 데이터를 읽어 캐시에 저장
- 인출(추출) 단계
- 데이터를 버퍼 캐시에서 읽고, 요청한 클라이언트에게 전송
- SELECT문에서만 사용됨
SQL 성능 최적화를 위한 유틸리티
- SQL Trace, TKPROF(Trace Kernel PROFile), EXPLAIN PLAN
SQL 성능 개선 절차
- 문제 있는 SQL 식별
- 옵티마이저 통계 확인
- SQL문 재구성
- 인덱스 재구성
- 실행계획 유지 관리