스프링 부트
[스프링] Statement 대신 PreparedStatement를 사용해야 하는 이유
illlilillil
2022. 4. 19. 22:15
PreparedStatement를 사용해야 하는 이유
- Statement는 캐시를 사용하지 않고 PreparedStatement는 캐시를 사용해 담긴 객체들을 재사용한다. 반복적이고 많은 쿼리를 날릴때 PreparedStatement가 성능이 좋다.
- statement는 불편한 연결 과정과 처리를 쿼리마다 반복해야 한다. 가독성도 좋지 못하고 비효율적이다. connection 뿐만 아니라 statement, resultSet 모두 처리를 해야 한다.
Connection connection = null;
try {
connection = dataSource.getConnection();
if(connection != null) {
System.out.println("DB 연결 성공!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(connection != null) {
try {
connection.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
- SQL Injection 공격 방지 - 악의적으로 SQL문을 실행시켜 데이터베이스를 해킹하는 공격이다.
- PreparedStatement는 쿼리가 컴파일되고 캐시된 이후에 객체화되고 문자열이 아닌 파라미터이기 때문에 공격자가 임의로 SQL을 넣을 수 없다.
정리해보자면 두 가지 이유가 있다.
- 성능 - 재사용성
- 보안 - SQL Injection 방지
하지만 캐시 데이터도 한계가 있기 때문에 그에 맞는 적절하게 쿼리를 사용해야 한다.
참고자료
Statement보다 Preparedstatement을 사용해야 하는 이유(성능, 보안 측면)
SQL 서버 엔진이 쿼리를 수행할 때 마다 다음의 과정을 거친다.구문 분석 및 정규화 단계 : 쿼리 문법이 제대로 작성되었는지 확인하고 해당 테이블과 칼럼이 데이터베이스에 존재하는지 확인한
velog.io