구분 | 정적 SQL (Static SQL) | 동적 SQL (Dynamic SQL) |
정의 | SQL 문이 미리 정의되고 컴파일된 후 실행되는 SQL | 실행 시점에서 SQL 문이 생성되고 실행되는 SQL |
SQL 문 생성 시점 | 애플리케이션 개발 또는 컴파일 시점 | 애플리케이션 실행 시점 |
실행 방식 | 미리 컴파일된 SQL 문을 실행 | 실행 시점에서 SQL 문을 조합하여 실행 |
보안 | SQL 인젝션에 강함 (미리 정의된 쿼리 사용) | SQL 인젝션 위험이 있음 (입력값을 직접 조합할 경우) |
성능 | 일반적으로 빠름 (미리 컴파일된 계획 사용) | 비교적 느림 (매번 SQL 구문을 분석하고 실행 계획을 생성) |
유연성 | 고정된 SQL 문만 실행 가능 | 다양한 조건과 동적으로 변경되는 SQL 실행 가능 |
사용예시
- 정적 SQL
- 정해진 구조의 SQL 문을 실행할 때 사용
- 성능이 중요한 트랜잭션 시스템에서 선호됨
SELECT * FROM employees WHERE department_id = 10;
- 동적 SQL
- 사용자의 입력값에 따라 SQL 문이 변경될 때 필요
- 다양한 조건을 처리해야 하는 경우 사용
- 예: 사용자가 선택한 필드만 조회하는 경우
SET @sql = 'SELECT ' || column_name || ' FROM employees;'; EXECUTE IMMEDIATE @sql;
정적 SQL과 동적 SQL 선택 기준
- 정적 SQL: 보안이 중요하고 성능이 중요한 경우(예: 금융 시스템, 미리 정의된 보고서)
- 동적 SQL: SQL 문이 실행 중에 결정되어야 하는 경우(예: 검색 필터 적용, 유연한 데이터 조회)
정적 SQL을 기본으로 사용하되, 필요한 경우 동적 SQL을 신중하게 사용해야 합니다.