거누의 개발노트

🎯 정적 SQL(Static SQL)과 동적 SQL(Dynamic SQL) 비교 본문

정보관리기술사

🎯 정적 SQL(Static SQL)과 동적 SQL(Dynamic SQL) 비교

Gogozzi 2025. 3. 18. 11:42
반응형

1. 서론

데이터베이스를 설계하고 운영할 때, SQL 쿼리는 정적 방식과 동적 방식 두 가지로 나눌 수 있다. 이를 적절히 선택하지 않으면 성능 저하, 보안 문제, 유지보수 어려움이 발생할 수 있다. 본 답안에서는 정적 SQL과 동적 SQL의 개념과 차이점, 실무 적용 방안을 비교 분석한다.


🔍 2. 본론

🛠️ 2.1 정적 SQL(Static SQL)

정의:

  • SQL 문장이 컴파일 시점에 고정되어 실행 시 변경되지 않는 SQL.
  • 주로 Prepared Statement 또는 Stored Procedure 형태로 작성된다.

특징:

  • 변수 값만 바뀌고 SQL 구조는 변하지 않음
  • 컴파일 시 최적화된 실행 계획(Execution Plan) 생성 → 성능 향상
  • SQL Injection 공격에 강함 (파라미터 바인딩 덕분)

예제:

SELECT * FROM users WHERE user_id = ?;

장점:

✔️ 성능 우수: 미리 컴파일된 실행 계획 재사용

✔️ 보안 강화: SQL Injection 방어 (파라미터 바인딩)

✔️ 유지보수 용이: 쿼리 구조가 고정되어 가독성, 유지보수성 향상

단점:

유연성 부족: 조건, 테이블, 컬럼이 변경되면 새로운 쿼리 필요

복잡한 조건 처리 한계: 조건이 여러 개로 분기될 때 코드가 길어짐


🔧 2.2 동적 SQL(Dynamic SQL)

정의:

  • SQL 문장이 실행 시점에 생성되는 SQL
  • 사용자 입력, 조건에 따라 SQL 구조 자체가 변동될 수 있음

특징:

  • 쿼리 구조 자체를 문자열로 조합하여 생성
  • 다양한 조건 처리 가능
  • 실행 시마다 새로운 실행 계획이 생성되므로 오버헤드 발생 가능

예제:

php
복사편집
$sql = "SELECT * FROM users WHERE " . $condition;

장점:

✔️ 유연성 높음: 조건, 테이블, 컬럼 변경에 대응 가능

✔️ 복합 검색 지원: 다양한 조건, 다중 검색 쿼리에 유리

✔️ 관리 시스템, 레포트 생성 등에 적합 (쿼리 구조가 상황에 따라 바뀔 때)

단점:

성능 저하: 실행 계획 재사용 불가 → 매번 새로운 계획 생성

SQL Injection 위험: 입력값이 직접 삽입되면 보안 취약점 발생 가능

가독성 저하: 복잡한 쿼리 문자열 조립 시 코드 난독화 우려


🔥 2.3 정적 SQL vs 동적 SQL 비교표

항목 정적 SQL (Static SQL) 동적 SQL (Dynamic SQL)

쿼리 작성 시점 컴파일 시 고정 실행 시 생성
쿼리 유연성 낮음 (고정된 구조) 높음 (조건, 테이블 변경 가능)
성능 빠름 (미리 실행 계획 재사용) 느림 (매번 실행 계획 생성)
SQL Injection 방어 가능 (파라미터 바인딩) 위험 (입력값 조작 시 취약)
가독성/유지보수성 높음 복잡해질 가능성 있음
적용 사례 반복 조회, 트랜잭션 처리 보고서, 검색 조건이 다양할 때

🛠️ 2.4 실무 적용 전략

① 정적 SQL 추천 상황

  • 반복 실행되는 동일 구조 쿼리: 예) 로그인, 제품 목록 조회
  • 트랜잭션 처리: 데이터 정합성 보장이 중요한 경우
  • 보안이 중요한 경우: 예) 사용자 인증, 민감 정보 조회

② 동적 SQL 추천 상황

  • 복합 검색 조건이 빈번한 경우: 예) 쇼핑몰의 상품 필터 검색
  • 보고서 생성: 조회 조건이 수시로 바뀌는 경우
  • 관리자 기능: 다양한 조건에 따라 쿼리 조합이 필요한 경우

③ 보안 강화 전략 (동적 SQL일 때)

  • Prepared Statement 적용: 동적 SQL도 파라미터 바인딩 강제
  • 입력 값 검증: 숫자, 문자열 타입 체크
  • 화이트리스트 방식 적용: 허용된 값만 허용 (테이블/컬럼 변경 방지)

🎯 3. 결론

정적 SQL과 동적 SQL은 유연성 vs 성능/보안이라는 트레이드오프 관계를 가진다. 정보관리기술사로서 설계 시 성능 요구사항, 유지보수성, 보안성을 종합 고려하여 상황에 맞는 SQL 방식을 선택해야 한다.

👉 핵심 정리:

  • 정적 SQL: 성능 우수, 보안 강화 → 반복 조회, 트랜잭션 처리에 적합
  • 동적 SQL: 유연성 높음 → 복합 검색, 보고서 생성에 적합
  • 보안 이슈 관리: 동적 SQL 사용 시 Prepared Statement, 입력 검증 필수
반응형
Comments