Statement


title: 2026-03-15 author: 강병호 (이름) date: 2026-03-15 (날짜) category: TIL/강병호/2026/03 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

Statement vs PreparedStatement

JDBC에서 SQL을 실행할 때 사용하는 두 인터페이스는 동작 방식과 보안성에서 큰 차이를 보입니다.

1. 동작 방식의 차이

Statement: SQL 문장을 실행할 때마다 매번 구문 분석(Parsing), 컴파일, 실행의 과정을 거칩니다. 쿼리에 변수가 포함될 경우 문자열 더하기(+) 방식을 사용하므로 코드가 복잡해집니다.

PreparedStatement: SQL 문을 미리 컴파일하여 캐시에 저장해둡니다. 실행 시에는 ‘플레이스홀더(?)’에 값만 바인딩하여 실행하므로 구조가 고정적이고 깔끔합니다.

2. 성능 (Caching)

동일한 구조의 쿼리를 반복해서 실행할 때 PreparedStatement가 훨씬 유리합니다.

데이터베이스는 처음에 분석된 쿼리 실행 계획을 재사용하므로, 매번 쿼리를 분석해야 하는 Statement보다 처리 속도가 빠릅니다.

3. 보안성 (SQL Injection 방지)

가장 결정적인 차이점은 보안입니다.

Statement: 사용자가 입력한 값이 쿼리의 일부로 직접 포함되기 때문에, 악의적인 SQL 구문을 삽입하는 SQL 인젝션(SQL Injection) 공격에 그대로 노출됩니다.

PreparedStatement: 입력값을 단순히 ‘데이터’로만 취급하며 내부적으로 특수 문자를 이스케이프(Escape) 처리합니다. 따라서 입력값에 SQL 명령어가 포함되어 있어도 실행되지 않고 문자열로 처리되어 안전합니다.

results matching ""

    No results matching ""