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 방지
하지만 캐시 데이터도 한계가 있기 때문에 그에 맞는 적절하게 쿼리를 사용해야 한다.
참고자료
'스프링 부트' 카테고리의 다른 글
[스프링부트] 트랜잭션 격리 수준 (0) | 2022.07.13 |
---|---|
[스프링부트] Event 발행과 @EventListener에 대해 알아보자 (0) | 2022.07.06 |
[인텔리제이] tdd 템플릿 만들기 (0) | 2022.04.11 |
[스프링] 빈 등록 Bean, Configuraition, Component 비교 (0) | 2022.04.06 |
DTO vs VO vs Entity 비교 (0) | 2022.04.04 |
댓글