Ⅰ. 정적 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 패널 |
'데이터베이스' 카테고리의 다른 글
| 트랜잭션(Transaction) 에 대해 알아보겠습니다. (0) | 2025.07.21 |
|---|---|
| OLTP (Online Transaction Processing) 와 OLAP(Online Analytical Processing) 에 대해 알아보겠습니다. (1) | 2025.07.16 |
| 데이터베이스에 사용되는 인덱스(Index)에 대해 알아보겠습니다. (1) | 2025.06.27 |
| Microsoft SQL Server에서 사용되는 OPENQUERY에 대해 알아보겠습니다. (0) | 2025.03.24 |
| mysqldump에 대해 알아보겠습니다. (0) | 2025.02.07 |