Statement와 PreparedStatement의 차이점은 무엇인가요?
분야: 백엔드
JDBC에서 Statement와 PreparedStatement는 모두 SQL 실행을 담당하지만, 사용 방식과 성능, 보안 측면에서 차이가 존재합니다.
Statement 클래스는 문자열 연결을 이용해 SQL을 동적으로 구성해야 합니다. 이러한 특성으로 인해 SQL 인젝션 공격에 취약하다는 단점이 있습니다.
Statement stmt = conn.createStatement();
ResultSet rs = 30")" >stmt.executeQuery("select * from users where age > 30");
반면, PreparedStatement는 동적으로 파라미터를 바인딩할 수 있는 기능을 제공합니다. 값을 바인딩하면 내부적으로 이스케이프 처리하기 때문에 SQL 인젝션 공격을 방지할 수 있습니다.
String sql = "select * from users where age > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 30);
ResultSet rs = pstmt.executeQuery();
또한, 쿼리 구조를 미리 확정하고 플레이스홀더를 활용하여 값을 바인딩하는 PreparedStatement를 사용하면 SQL 구문 분석 결과를 캐싱할 수 있어 반복 실행 시 Statement보다 성능이 높은 것으로 알려져 있습니다.