본문 바로가기
Database

Statement와 PreparedStatement

by byeongoo 2021. 10. 17.

1. PreparedStatement

데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능을 말한다.

 

2. PreparedStatement 동작 방식

PreparedStatement는 위와 같이 4단계로 나누어져있다. 이중 parse 부분을 컴파일한채로 캐시에 저장하고 데이터가 bind 될 때 마다 patch까지 실행이 완료되고 sql을 재사용할 때 캐시에 저장되어 있는 부분을 가져다 나머지 3단계만 실행한다.

 

또한 바인딩 된 데이터는 SQL 문법이 아닌 내부의 인터프리터나 컴파일 언어로 처리하므로 문법적인 의미를 가질 수 없다. 

 

즉, parse부분에서 이미 쿼리의 문법적인 처리 부분이 수행되어 있고 바인딩 단계에서 입력된 부분은 쿼리로 인식하지 않는다. 그래서 sql injection에 좋다.

 

3. Statement의 동작 방식 

Statement는 prepare과 달리 4가지 단계를 항상 실행하며 결과 값을 반환한다. 반복적인 쿼리를 사용한다면 PreparedStatement가 DB에 적은 부하를주며 성능이 더 좋다.

 

이 방식은 사용자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안적 약점을 가지고 있다. 이를 대비하기 위해서 PreparedStatement를 이용하는 것이 바람직하다.

 

4. mybatis 에서 $와 #의 차이

#의 경우는 PreparedStatement 방식이고 $의 경우는 Statement 방식으로 동작한다. 

 

REFERENCE

https://diqmwl-programming.tistory.com/82

 

[시큐어 코딩] #1 SQL 삽입 / preparedStatement란

1. Statement / preparedStatement란 #1) PreparedStatement의 동작방식 preparedStatement는 다음과 같이 4가지 단계로 이루어져있다. 이중 parse 부분을 컴파일한채로 캐시에 저장하고 데이터가 bind될때까지..

diqmwl-programming.tistory.com

https://webstone.tistory.com/56

 

Statement와 PreparedStatement의 차이점

일단 Statement와 PreparedStatement의 차이점을 알기 전에 prepared Statement가 무엇인지에 대해 알아보자. PreparedStatement란:데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은..

webstone.tistory.com

https://github.com/infomuscle/blog/tree/master/java/210914_MyBatis_%23%EA%B3%BC_$%EC%9D%98_%EC%B0%A8%EC%9D%B4 

 

GitHub - infomuscle/blog: Blog Posts Written in Markdown

Blog Posts Written in Markdown. Contribute to infomuscle/blog development by creating an account on GitHub.

github.com

 

'Database' 카테고리의 다른 글

[Database] HASH JOIN 최적화  (0) 2021.11.14
[Database] SORT MERGE JOIN 최적화  (0) 2021.11.14
[Database] 데이터베이스 I/O 원리 및 최적화  (0) 2021.11.14
[Database] Nested Loop 최적화  (2) 2021.11.14
[Database] 정규화 정리  (0) 2021.10.24