본문 바로가기

WEB의 속삭임/Server단의 외침

[Java][성능]Statement 와 PreparedStatement의 차이

* 몰랐던 사실을 하나 배웠다. Statement와 PreparedStatement 차이 

* 나는 두개를 그동안 구분 해서 사용했다. 인자가 필요한것은 PreparedStatement를 인자가 없는 것은 Statement을 사용했다.

* 하지만 사용하는 이유가 나는 SQL인젝션을 방어 하기 위한 용도로, 또 소스코드를 깔끔하게 위해서(가독성)을 위해 사용 했었다. 하지만 성능상에도 이유가 있었다.



* Statement 와 PreparedStatement의 성능상의 차이

 Statement 와 PreparedStatement를 사용하게 되면 그냥 디비에 바로 요청 하는 것이 아니라 캐쉬를 확인 한후에 동일한 명령이 있으면 캐쉬에서 꺼내어 DataBase에 접근을 하고, 캐쉬가 없으면 실행 계획을 세우고 JDBC를 로드하여 DataBase에 접근을 한다. 그런데, PreparedStatement를 사용하면 수시로 변화가 되는 인자 값이 히든값으로 그대로 캐쉬에 저장 되어, 캐쉬에 들어 있는 실행계획의 재사용률이 올라가서 결국은 JDBC로드 또한 줄어 든다는 것이다. 오! 감동 ㅠ.ㅠ  하지만 Statement를 사용하면 인자 값을 계속해서 SQL에 결합되어 호출하게 될것이고, 매치되는 캐쉬가 줄어들어 JDBC로드를 매번 하고 실행계획을 매번 세워야 되는 경우가 발생한다. 그러므로 CPU가 피곤 해질것이다. 

 또하나! 중요한것은 이 캐쉬는 DataBase를 확장한 개념이기 때문에, 어플리케이션이 여러개 생성 되더라도, 서로 공유 해서 사용한다는 것이다. 이뜻은 웹처럼 스레드가 분리되더라도 니꺼 내꺼 구분 하지 않고, 캐쉬에서 꺼내서 사용하니, 그 성능 차이는 대형 프로그램일수록 클것이라는 것이다.

 아 요런거 하나하나 알면 알수록 재미 있어~~




'WEB의 속삭임 > Server단의 외침' 카테고리의 다른 글

[JAVA][Spring]Factory  (0) 2014.08.01
[Spring][기초]DI패턴  (0) 2014.07.31