Notice
Recent Posts
Recent Comments
Link
코코무의 코딩캔버스
[JDBC] Statement와 PreparedStatement의 차이점 본문
오랜만에 다시 JDBC를 공부하며 이전에는 짚고 넘어가지 않았던 Statement와 PreparedStatement의 차이점을 알아보려 합니다.
Statement와 PreparedStatement는 둘 다 JDBC API에서 데이터베이스와 상호 작용하기 위해 사용되는 인터페이스입니다. 그러나 사용 목적과 기능에는 중요한 차이점이 있습니다.
Statement
- 기본 사용 목적: 일반적인 SQL 쿼리를 실행하는 데 사용됩니다.
- SQL 쿼리 작성: 쿼리를 실행할 때마다 SQL 쿼리 문자열을 포함하여야 합니다.
- 효율성: 매번 실행할 때마다 데이터베이스에서 쿼리 구문 분석 및 컴파일이 수행됩니다.
- SQL 인젝션 취약성: 사용자 입력을 포함하는 SQL 쿼리를 직접 작성하면 SQL 인젝션 공격에 취약할 수 있습니다.
- 예제:
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE age > 30");
PreparedStatement
- 기본 사용 목적: 자주 사용되는 SQL 쿼리를 미리 컴파일하고 재사용할 수 있게 하며, 특히 동적 파라미터를 포함하는 쿼리에 유용합니다. 또한 SQL Injection 공격에 대응하는 보안 목적으로 사용합니다.
- SQL 쿼리 작성: 쿼리를 작성할 때 매개변수를 플레이스홀더(?)로 지정하고, 실행 시에 실제 값을 바인딩합니다.
- 효율성: 쿼리가 미리 컴파일되므로 동일한 쿼리를 여러 번 실행할 때 성능이 향상됩니다.
- SQL 인젝션 방지: 매개변수화된 쿼리를 사용함으로써 SQL 인젝션 공격을 방지할 수 있습니다.
- 예제:
String query = "SELECT * FROM users WHERE age > ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setInt(1, 30); ResultSet rs = pstmt.executeQuery();
SQL Injection: 웹 애플리케이션의 보안 취약점을 공격자가 이용하여 데이터베이스에 비정상적인 SQL 명령어를 주입하여 실행시키는 공격 기법
요약
- Statement는 단순하고 정적 쿼리 실행에 적합하며, 매번 SQL 구문 분석 및 컴파일이 필요합니다.
- PreparedStatement는 동적 파라미터를 포함하는 쿼리와 자주 사용되는 쿼리에 적합하며, 미리 컴파일되어 성능이 향상되고 SQL 인젝션 공격에 대한 보안이 강화됩니다.
'JDBC' 카테고리의 다른 글
[JDBC&JSP/MySQL] mysql-connector를 사용한 이클립스 연동 및 세팅 (0) | 2024.07.22 |
---|---|
[JDBC/Oracle] ojdbc를 사용한 이클립스 연결 및 셋팅 순서 (0) | 2024.01.17 |
[JDBC] JDBC 사용을 위한 코드 작성 방법 (0) | 2024.01.16 |
[JDBC/Oracle] Eclipse에서의 JDBC 사용을 위한 사전 준비(오라클) (0) | 2024.01.16 |