본문 바로가기

컴터생각

Java, PreparedStatement 쿼리문 확인하기..

 

자바 코딩을 할 일이 생겼는데, 쿼리문을 날리는데 Prepared Statement를 사용하면 좋다는 생각이 나서 사용해보기로 했다.. 평소엔 신경도 쓰지 않던 내용을 일도 많고 바쁜데 하필 적용시켜보겠다고 생각을 했는지는 모르겠다.. 하긴, 물론 이렇게 한다고 해서 시간이 더 걸리거나 어려운 방법은 아니다..

Prepared Statement는 DB 서버가 쿼리문을 캐쉬해두어 성능을 높일 수 있게 해주는 알고리즘을 개선 시키기 위해 등장한 것으로, 패러미터가 계속해서 바뀌는 쿼리문도 캐쉬를 해둘 수 있도록 하기 위해 고안된 것이다.. 즉, 변화되는 부분을 ? 로 처리해두고 실제 실행될때는 실행될때마다 다른 값이 매칭되어 실행되도록 하는 방식이다.. 솔직히 정말로 빠른지 어떤지는 직접 느껴보지는 못했다..

사용자 삽입 이미지


일반적인 쿼리문 날리는 것과 별반 다를바 없지만, 쿼리문 작성할때 변경되어야 하는 부분을 ?로 표시하여 작성을 하고, 그 부분의 값을 setParam 함수 호출을 통해 값을 할당한다는 부분이 조금 다른 부분이다.. setParam 이라는 함수 내부에서는

psmt.setString(1, 변수값);

과 같이 몇번째 ?를 어떤 값으로 바꿔야 하는지를 명시하는 코드가 들어가 있다..

사실, 그냥 막 쿼리 날리는 것과 이렇게 수정하는 것과의 차이는 거의 없고 어려운 일이 아니기 때문에 여기까지는 좋았다.. 그런데 사용중 쿼리문이 에러가 나는 현상이 발생.. 로그를 찍어서 어떤 쿼리문이 날아가고 있는지 보고 싶은데, 이런 젠장.. PraparedStatement의 쿼리 내용을 찍을 수 있는 방법이 없는거다..

자바에서 기본적으로 제공해주는 방법이 있을 것으로 알았다.. ToString으로 하면 될 줄 알았는데, 너무 순진한 생각이었다.. 결국, 자바에서 기본적으로 제공되는 방법으로 Prepared Statement의 실제 실행된 쿼리문 모습을 알아낼 수는 없다는 것을 알게되었다..

검색을 통해 찾은 사이트에서 방법을 알아낼 수 있었다.. (참조 : PreparedStatement - ? 치환해서 로그찍는 소스, 소스 수정에 필요한 파일 다운로드 : LoggableStatement.java) 이런 기능은 자바가 기본으로 제공해주는 Prepared Statement 클래스에 들어가 있으면 좋겠구만 말이지..

사용자 삽입 이미지

 

이렇게 수정하고 나면, Prepared Statement로 작성된 쿼리문도 최종 수행된 쿼리문이 어떤 모습으로 날아갔는지 확인해 볼 수 있게된다.

 

 

쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 있습니다.

728x90