Java JDBC의 PreparedStatement와 Statement
👉 기본 개념
- PreparedStatement와 Statement는 Java JDBC API에서 제공하는 인터페이스
- 데이터베이스에 SQL 명령을 보내고 실행하는 데 사용
👉 PreparedStatement
- 기본 사용법
PreparedStatement
는 Statement
를 상속받는 인터페이스로, SQL 쿼리를 미리 컴파일하고 쿼리 실행 시에만 매개변수를 전달할 수 있음
- 파라미터화된 쿼리
- 쿼리에 파라미터를 사용할 수 있어서 동적인 쿼리 생성에 유용
- 예를 들어,
SELECT * FROM users WHERE name = ?
와 같이 사용할 수 있음
- 성능과 보안
- 성능 측면에서는 쿼리가 미리 컴파일되어 있어, 같은 쿼리를 반복해서 실행할 때
Statement
보다 빠를 수 있음
- 보안 측면에서는 사용자 입력이 파라미터로 전달되므로 SQL 인젝션 공격에 대한 보안이 강화
👉 Statement
- 기본 사용법
Statement
인터페이스는 SQL 쿼리를 실행하는 데 사용
- 간단하고 직접적인 SQL 명령을 실행할 때 적합
- 데이터베이스에 보내고 싶은 정확한 SQL 문장을 작성하고, 그대로 실행
- 매번 실행할 때마다 전체 SQL 문을 작성해야 하므로, 만약 사용자의 입력에 따라 다른 SQL을 실행해야 한다면, 프로그램에서 SQL 문을 문자열로 조합해야 함
- 동적 쿼리
- 매번 SQL문을 직접 작성해야 하므로 동적 쿼리를 생성할 때 사용될 수 있음
- 성능과 보안
- 성능 측면에서는 매번 쿼리를 컴파일해야 하므로
PreparedStatement
보다 느릴 수 있음
- 보안 측면에서 SQL 인젝션 공격에 취약할 수 있음
- 사용자 입력을 직접 쿼리에 포함시키면 위험할 수 있기 때문에 사용할 때 주의가 필요
👉 MyBatis에서의 사용
- MyBatis는 내부적으로 SQL 쿼리를 실행할 때 PreparedStatement를 사용하여 SQL을 효율적으로 실행하고 SQL 인젝션과 같은 보안 문제를 방지
- MyBatis의 XML 설정 파일이나 어노테이션을 통해 SQL 쿼리를 정의할 때, 파라미터와 결과 매핑을 편리하게 설정할 수 있으며, 이는 내부적으로 PreparedStatement의 파라미터 바인딩을 활용하는 것
