2010년 2월 4일 목요일

스프링에서 SQL 로그 사용하기 (log4jdbc,log4sql)

개발을 하면서 정말 중요한 부분중 하나가 디버깅 입니다.
로직을 잘세워서 코딩을 빨리 하는 사람보다 다소 느리지만
디버깅에 능한 사람과 비교 해볼때
후자인 경우가 아웃풋이 훨씬 빨리 나옵니다.
즉 생산성과 삽질을 줄이기 위해서는 디버깅에 능해야
된다는 얘기죠. ㅋㅋ
오늘은 그중에서 개발에 대부분을 차지하는 SQL 디버깅
방법에 대해서 말씀 드리겠습니다.
여러 SQL 로그관련 오픈 소스가 있습니다.
그중에서log4jdbc,log4sql 사용 방법에 대해서
말씀 드리겠습니다. p6spy는 그닥 추천 드리고 싶지가 않네요
사실 log4j만 설치를 해도 sql로그를 찍을 수 있습니다.
하지만 sql따로 바인딩 데이터 따로 출력이 됩니다.
예)
select * from emp where empno = ?
param[empno] = 0001

물론 고맙긴 하지만 어느 세월에 쿼리랑 데이터를 조합해서
쿼리툴에 질의 합니까 . 우리가 원하는건 바로 이런
로그일 것입니다.
select * from emp where empno = '0001'
이런 로그를 지원하는 log4jdbc와 log4sql에 대해서
스프링에서 사용방법을 설명 드리겠습니다.

log4jdbc를 사용 하기 위해서는 아래와 같은 참조 라이브러리가
필요 합니다.

<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-api</artifactid>
<version>1.5.10</version>
</dependency>

<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-log4j12</artifactid>
<version>1.5.10</version>
</dependency>
<dependency>
<groupid>log4j</groupid>
<artifactid>log4j</artifactid>
<version>1.2.14</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

다운로드 사이트(http://code.google.com/p/log4jdbc/downloads/list)
접속해서 최근 버전 "jar"파일을 다운 받습니다.

Maven과 Nexus를 우영하는 팀이면 3rd 라이브러리로 등록해서 사용
하면 유용할 것 같습니다.
위에 라이브러리를 클래스 패스를 설정하고
아래와 같이 스프링 설정을 합니다.
<bean id="dataSource-common" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy">
<property name="url">
<value>jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:BEYONDJ2EE</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</property>
</bean>

2 Line : 드라이버는 반드시 "net.sf.log4jdbc.DriverSpy" 선언 해야 합니다.
4 Line : JDBC URL 설정시 " jdbc:log4jdbc:oracle" 선언 해야 합니다.

log4.properties 파일에 아래와 같이 설정 합니다.
log4j.logger.jdbc.sqltiming=info,stdout
※ SQL 로그 출력 화면




설치는 매우 간단 합니다.
별다른 라이브러리 참조 없이 라이브러리만 다운 받아서
클래스 패스를 설정 하면 설치가 완료 됩니다.
다운로드 사이트(http://sourceforge.net/projects/log4sql/files/)
접속 해서 최신버전을 다운 로드 받습니다.

압축을 해제 해서 "log4sql.jar" 라이브러리를 클래스 패스 설정
합니다.설치는 간단 합니다.
이제 아래와 같이 스프링 빈 설정을 합니다.

<bean id="dataSource-common" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>core.log.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:BEYONDJ2EE</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>

3 Line : "core.log.jdbc.driver.OracleDriver"로 설정 합니다.
6 Line : JDBC URL 설정은 일반 설정과 동일 합니다.
"jdbc:oracle:thin:@127.0.0.1:1521:BEYONDJ2EE"
※ SQL 로그 출력 화면



  • 드라이버 지원
실무에서 가장 많이 사용하는 Oracle JDBC위로 설명 했고 기본적으로
모든 DBMS를 지원 가능 합니다.
좀더 자세한 사항은 각 사이트에서 정보를 얻기 바랍니다.

  • 운영의 포인트
log4jdbc 와 log4sql 둘다 일장 일단이 있습니다.
log4jdbc
- 장점 : log4j의 기능을 사용할수 있음
- 단점 : sql로그가 한줄로 찍혀서 직관적이지 않음

log4sql
- 장점 : 설치가 간단하고 ,sql로그가 직관적으로 나옴
- 단점 : 내부적으로 System.out.println 콘솔출력함

그래서 저는 개발시에는 log4sql 실제 운영
시에는 log4jdbc를 사용하고 있습니다.

댓글 없음:

댓글 쓰기