Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC PreparedStatement의 장점과 한계 완벽 정리

JDBC PreparedStatement란?

PreparedStatement는 JDBC에서 SQL 쿼리를 미리 컴파일하여 재사용할 수 있도록 지원하는 인터페이스입니다. 일반 Statement보다 성능과 보안 면에서 여러 이점을 제공하지만, 동시에 몇 가지 한계도 존재합니다.

PreparedStatement의 장점

1. 향상된 실행 성능

SQL 문이 여러 번 반복적으로 컴파일되고 실행되는 것을 방지하기 때문에, PreparedStatement는 일반 Statement보다 훨씬 빠른 속도를 보여줍니다. 쿼리가 한 번만 컴파일된 후 데이터베이스에 캐시되어 재사용될 수 있습니다.

2. 고급 데이터 타입의 손쉬운 처리

PreparedStatement 인터페이스가 제공하는 다양한 Setter 메서드(setBlob, setClob, setObject 등)를 활용하면 BLOB, CLOB, OBJECT와 같은 고급 데이터 타입에 값을 간편하게 삽입할 수 있습니다.

3. SQL 인젝션 공격 방지

Setter 메서드를 통해 값을 설정하면 쿼리 내부에 따옴표나 특수 문자가 직접 포함되는 것을 막을 수 있습니다. 이로 인해 악의적인 SQL 코드가 주입되는 SQL 인젝션(SQL Injection) 공격으로부터 안전하게 보호됩니다.

PreparedStatement의 한계

1. 단일 SQL 문만 실행 가능

PreparedStatement 객체는 한 번에 하나의 SQL 문만 나타낼 수 있습니다. 따라서 하나의 PreparedStatement 객체로는 오직 하나의 문장만 실행할 수 있습니다.

2. 플레이스홀더에 복수 값 허용 안 됨

인젝션 공격을 방지하기 위한 보안 메커니즘 때문에, 하나의 플레이스홀더(?)에는 두 개 이상의 값을 바인딩할 수 없습니다. 예를 들어 IN 절에 여러 개의 값을 전달해야 할 경우 추가적인 처리가 필요합니다.

정리

PreparedStatement는 성능 최적화와 SQL 인젝션 방지라는 강력한 장점을 제공하는 반면, 단일 문장 실행과 플레이스홀더당 하나의 값이라는 제약이 있습니다. 따라서 반복 실행되는 쿼리나 사용자 입력을 다루는 애플리케이션에서는 PreparedStatement를 적극적으로 활용하는 것이 권장됩니다.