https://extsdd.tistory.com/114
자 우리가 저번까지 DB에서 데이터를 조회해보고 잘 되는지 확인헀다.
하지만 쿼리를 조회하더라도 Console창에 찍히는게 없어서, 실제로 어떤 구문이 실행됐는지, 결과는 나왔는지 알 수가 없어 빠른 분석이 불가능했다.
하지만 Log4j2.xml을 수정해서 쿼리를 조회할때 어떤 쿼리를 조회하는지, 결과는 어떤지 알 수 있게 해보자.
1. Log4jdbc-remix 라이브러리 추가
자 본인 프로젝트에 있는 pom.xml을 열어보자. 저번 시간까지는 그냥 전자정부 프레임워크가 미리 설정해두었던 log4jdbc 라이브러리를 추가해놨었지만, 저 라이브러리 말고 log4j2-remix 라이브러리로 바꿔주자. 위에 나온건 주석처리하고 아래 코드를 그 밑에 추가해주자.
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.6</version>
</dependency>
그럼 위 사진과 같이 변했을 것이다. 기존 lof4jdbc 라이브러리는 주석처리해주고 밑에 새로 log4jbc-remix 라이브러리를 넣어줬당 ㅎㅎ저장을 해주면 라이브러리가 추가된다.
2. log4j2.xml 수정
자 리소스 열기(Ctrl+Shift+R)를 이용해 log4j2.xml 을 열어주자.
위와 같은 코드로 작성되어 있을텐데 보면 로그 레벨들이 다 Info위주라 많은 정보들을 안보여주고 있다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc" level="OFF" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.apache.commons.digester" level="ERROR" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="jdbc.sqlonly" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="jdbc.resultsettable" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework.web" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
위 코드를 통째로 복붙하고 저장해준다.
3. context-datasource.xml 수정
자 리소스 열기(Ctrl+Shift+R)를 이용해 context-datasource.xml을 열어주자.
자 데이터 소스가 저렇게 선언되어 있을텐데. 이제 코드를 수정해서 저 dataSource를 가로채서 log4jdbc가 더 상세히 로그를 남길 수 있도록 수정할 것이다.
<bean id="dataSource_main" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://127.0.0.1:3306/cp_service_db" />
<property name="username" value="root"/>
<property name="password" value="비밀번호"/>
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSource_main" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="\n"/>
</bean>
</property>
</bean>
저 빨간 박스 부분만 드레그해서 위 코드로 바꿔주자.
저런식으로 바뀌었을텐데 바뀐걸 보면 기존 dataSource로 id가 할당된 친구를 dataSource_main으로 바꿔줬고, 원래 필요했던 dataSource는 Log4jdbc한테 주고 위에 이름바꿨던 dataSource_main을 참조하는 것을 알 수 있다. 저장해주자!
4. 결과 확인
자. 프로젝트를 Clean하고 Debug모드로 서버를 실행하고, 테스트로 http://localhost:8080/reqUrl.do?reqParam=3요청을 해보자.
콘솔 로그를 보면, 1번 박스에 어떤 쿼리를 조회하는지 2번 박스에 실제 ?에 Mapping이 되서 실제로 DB에서 조회되는 쿼리가 먼지, 3번 박스에는 그 쿼리 조회결과는 어떤지가 콘솔창에 찍히게 된다.
만약 요청을 처리할때 조회되는 데이터가 이상하다 싶을때는 어떤 쿼리가 실행되는지, 저 쿼리문을 긁어서 HeidiSql같은 툴로 실제로 DB에서 돌려보고 하면 디버깅 실력이 쑥쑥 늘어날 수 있다.
#스프링 #전자정부프레임워크 #데이터베이스 #쿼리 #조회결과 #콘솔 #출력 #Log4j2 #Log4jdbc #결과출력