데이터베이스

정적 SQL과 동적 SQL 에 대해 알아보겠습니다.

forward error correction Circle 2025. 7. 1. 08:50
반응형

Ⅰ. 정적 SQL과 동적 SQL의 개념

   ⅰ. 정적 SQL (Static SQL) 이란?

         : 애플리케이션 컴파일 시점에 SQL 문장이 고정되고 사전 컴파일·최적화되어 실행 계획이 미리 생성되는 방식
   
    ⅱ. 정적 SQL (Static SQL) 특징

        ■ SQL 문장이 애플리케이션 컴파일 시점에 고정
        ■ 사전 컴파일 및 옵티마이저 최적화를 거쳐 실행 계획이 미리 생성
        ■ 주로 성능과 보안이 중요한 시스템에서 사용
    ⅲ. 동적 SQL (Dynamic SQL) 이란?

         : 런타임에 SQL 문장을 문자열로 조립해 실행하며, 실행 시점에 SQL 구문 분석·최적화 과정을 거쳐 실행 계획을 생성

    ⅳ. 동적 SQL (Dynamic SQL) 특징
        ■ SQL 문장이 문자열 형태로 런타임에 조립되어 실행
        ■ 실행 시마다 SQL을 파싱, 분석, 최적화 후 실행 계획이 생성
        ■ 사용자 입력 기반의 유연한 쿼리 처리에 적합

Ⅱ. 정적 SQL과 동적 SQL 차이점 비교

항목 정적 SQL 동적 SQL
SQL 확정 시점 컴파일 시점 실행 시점
실행 계획 처리 사전 컴파일 및 캐시 활용 매번 파싱 및 실행 계획 생성
유연성 낮음 (쿼리 구조 고정) 높음 (조건, 테이블, 컬럼 동적 조합 가능)
성능 빠름 (하드 파싱 최소화, 커서 재사용) 느림 (파싱/최적화 반복으로 오버헤드 발생)
보안 안전 (SQL Injection 위험 낮음)  취약 (입력값 검증 미흡 시 공격 노출)
유지보수 용이 (가독성, 디버깅 수월)  어려움 (문자열 조합 실수, 오류 추적 복잡)

Ⅲ. 정적 SQL과 동적 SQL 내부 동작 메커니즘

 ⅰ. 정적 SQL의 처리 흐름
     1) 프리컴파일(Precompile)
         : SQL 문과 호스트 변수 타입 검증
     2) 실행 계획 생성 및 캐싱
         : 옵티마이저가 최적의 실행 계획 생성, Shared Pool에 저장
     3) 커서 오픈 및 실행
         : 이미 최적화된 계획 사용으로 빠른 실행
 ⅱ. 동적 SQL의 처리 흐름
     1) SQL 문자열 동적 생성
         : 사용자 입력 및 조건에 따라 SQL 조립
     2) 구문 및 시맨틱 분석
         : 런타임 파싱 및 문법/논리 오류 검출
     3) 실행 계획 생성 또는 검색
         : 캐시에 존재하지 않으면 새롭게 계획 생성
     4) SQL 실행
         : EXECUTE IMMEDIATE, sp_executesql 등 API 통해 실행

Ⅳ. 정적 SQL과 동적 SQL 장·단점 비교

 ⅰ. 정적 SQL

정적 SQL
장점 1) 성능 우수: 실행 계획 재사용 가능, 하드 파싱 최소화
2) 보안 강력: SQL Injection 공격에 매우 강함
3) 유지보수 용이: 쿼리 구조 고정, 디버깅 간단
단점 1) 유연성 부족: 런타임 조건 반영 어려움
2) 쿼리 중복: 조건에 따른 여러 쿼리문 개별 작성 필요

  ⅱ. 동적 SQL

동적 SQL
장점 1) 높은 유연성: 테이블/조건/필드 모두 런타임 조립 가능
2) 재사용성 향상: 다양한 조건 처리 가능, 코드 축소 효과
단점 1) 성능 저하 우려: 반복 파싱·최적화로 오버헤드
2) 보안 취약성 존재: 미흡한 입력 필터링 시 SQL Injection 노출
3) 유지보수 어려움: 문자열 오류, 가독성 저하, 디버깅 복잡

Ⅴ. 정적 SQL과 동적 SQL 실무 적용 사례

적용 유형 실무 사례
정적 SQL 1) 일괄 배치 처리
2) 재무·의료 시스템
3) 정형 리포트
4) 보안 민감 시스템
동적 SQL  1) 사용자 정의 리포트
2) 검색 필터 다변화
3) 다중 DB 관리 도구
4) Admin 패널

 

반응형