Java JDBC의 PreparedStatement와 Statement

LeeYulhee·2024년 1월 20일
0

👉 기본 개념


  • PreparedStatement와 Statement는 Java JDBC API에서 제공하는 인터페이스
  • 데이터베이스에 SQL 명령을 보내고 실행하는 데 사용



👉 PreparedStatement


  • 기본 사용법
    • PreparedStatementStatement를 상속받는 인터페이스로, 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의 파라미터 바인딩을 활용하는 것
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN