본문 바로가기
스프링 부트

[스프링] Statement 대신 PreparedStatement를 사용해야 하는 이유

by illlilillil 2022. 4. 19.

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

 

댓글