본문 바로가기

디버깅/Spring mvc (Maven, Mybatis)

[Spring] Mybatis SQL Log 출력 모듈 추가하기

반응형


보통 ORM.. 자바에서는 JPA를 이용한 관계형 데이터 베이스가 아니라면.. 스프링 웹 프로젝트는 쿼리를 기반으로 한 OOP가 주력 패러다임 일 것이다. 그말은 작성해야 하고 디버깅 해야 할 SQL의 양이 상당하고 피할수가 없다는 것인데.


스프링 프로젝트에 기본 세팅에는 SQL Logging이 켜져 있지 않다. 이 글에선 Console 창에 Mybatis 에서 어떤 쿼리가 실행되는지. 쿼리에 어떤 매개변수를 받고.. 실행된 쿼리에서 어떤 데이터를  반환받는지 등을 콘솔에서 바로바로  볼 수 있게 세팅 할 것이다. (statement, preparedstatement)


물론 LIST나 MAP의 형태로 받은 데이터를 logger로 출력해도 비슷하게 볼 수 있으나, 그 데이터가 조금만 늘어도 한줄로 길게 출력 되어 생산성이 상당히 떨어지는 것을 보기 좋게 출력해준다. (물론 이것도 컬럼이 많아 진다면 옆으로 길게 늘어지는건 피할 수 없다 ^^;



아주 간단히 요약하자면 다음의 과정이다.

  1. pom.xml에 'log4jdbc-remix' dependency 추가
  2. jdbc 즉 데이터베이스 연결을 담당하는 자바빈에서 log4jdbcProxyDataSource 추가.
  3. 이때 보통 dataSource로 지칭하는 기존의 jdbc 자바빈을 dataSourceSpied로 변경
  4. 새로 추가한 log4jdbcProxyDataSource 자바빈을 dataSource로 지칭하고, constructor-arg의 ref값을 dataSourceSpied로 지정
  5. 마지막으로 log4j.xml에서 logger 추가 jdbc.resultsettable 
  6. 이때 logger는 root 태그보다 위에 있어야 하며 root태그 밑으로 둘 경우 에러가 날수 있음 (태그의 순서와 관련이 있으나 서버는 정상 구동 가능)


예제 코드

https://github.com/liante0904/bimProject/blob/master/src/main/resources/config/spring/context-database.xml



참고 출처

http://addio3305.tistory.com/66

http://rudalson.tistory.com/entry/Log4J-%EC%84%A4%EC%A0%95%EC%97%90%EB%9F%AC-The-content-of-element-type-log4jconfiguration-must-match-rendererappendercategoryloggerrootcategoryFactory

반응형