프레임워크니 ORM이니... 날로 복잡해져가는 우리 웹 개발환경에서 SQL을 확인하려고 System.out으로 디버깅 하던
시대는 이미 지나갔습니다. 성능도 성능이거니와 이제는 인라인 코드를 입력할 곳도 없어져버렸습니다.
물론, 다행히도 프레임워크에서 지원하면 출력 가능하기는 하지만, PreparedStatement는 또 ...
log4sql은 이런 가려운 부분을 시원하게 긁어 줍니다.
JDBC 드라이버의 이름을 log4sql에서 제공하는 이름으로 샤샤삭 바꾸기만 하면 됩니다.
근데, 어디에도 CUBRID 지원 드라이버는 없더군요. -.-;
없으면 만들면 되지...라는 생각에 소스를 받아서 보았습니다.
근데, ... 드라이버 만드는 게 일도 아니더군요.
그래서 드라이버만 만들어서 공유할 게 아니라 방법까지 공개하려고 합니다. ^^;
우선 홈페이지에서 log4sql을 다운로드 받습니다.
http://log4sql.sourceforge.net/index_kr.html
다운로드 받아서 압축을 풀어보면 log4sql.jar파일과 log4sql-src.jar파일이
곱게 들어 있습니다.
jar xvf log4sql-src.jar
하시면, core로 시작하는 소스를 보실 수 있습니다.
우리가 작업해야할 파일은 신규추가 1개, 변경 1개 입니다.
core/log/jdbc/DriverLoggables.java 를 열어보시면...
수많은 드라이버가 정의되어 있으실 겁니다.
여기 마지막에 살짝~ 큐브리드 드라이버를 등록해 둡니다.
그러면, 이 드라이버를 래퍼할 클래스를 만들 차례 입니다.
core/log/jdbc/driver 요기에다가 CUBRIDDriver.java를 하나 만듭니다.
보시면 아시겠지만, 이 친구를 우리의 webapp에서 땡겨쓸 겁니다.
JDBC이든, Spring이든, iBatis이든 간에...
대신에
요렇게만 바꾸면 된다는 거죠.
이제 테스트 해보시면^^ SQL을 쉽게 뽑아보실 수 있습니다.
PreparedStatement를 사용해도 입력되는 파라미터가 SQL에 팍팍 박혀서 나오니 Copy & Paste 해서
CUBRID Manager에서 실행해보시면 어디서 에러가 있는지 쉽게 알 수 있을 겁니다.
참, log4sql.jar 압축을 풀어보시면 properties파일이 하나 있습니다.
이를 동일한 위치로 복사해야 합니다. 안그러면 실행이 안되실 겁니다.
만약, iBatis에서 테스트할 경우에는 sqlmap 설정에 poolPreparedStatements를 false로 해야 에러 없이
실행됩니다.
CUBRIDDriver.java와 DriverLoggables.java 파일은 첨부합니다.
시대는 이미 지나갔습니다. 성능도 성능이거니와 이제는 인라인 코드를 입력할 곳도 없어져버렸습니다.
물론, 다행히도 프레임워크에서 지원하면 출력 가능하기는 하지만, PreparedStatement는 또 ...
log4sql은 이런 가려운 부분을 시원하게 긁어 줍니다.
JDBC 드라이버의 이름을 log4sql에서 제공하는 이름으로 샤샤삭 바꾸기만 하면 됩니다.
근데, 어디에도 CUBRID 지원 드라이버는 없더군요. -.-;
없으면 만들면 되지...라는 생각에 소스를 받아서 보았습니다.
근데, ... 드라이버 만드는 게 일도 아니더군요.
그래서 드라이버만 만들어서 공유할 게 아니라 방법까지 공개하려고 합니다. ^^;
우선 홈페이지에서 log4sql을 다운로드 받습니다.
http://log4sql.sourceforge.net/index_kr.html
| 눈이 어두워서 링크 한참 찾았습니다. log4sql에 대하여 메뉴의 페이지 중앙쯔음에 있습니다. |
다운로드 받아서 압축을 풀어보면 log4sql.jar파일과 log4sql-src.jar파일이
곱게 들어 있습니다.
jar xvf log4sql-src.jar
하시면, core로 시작하는 소스를 보실 수 있습니다.
우리가 작업해야할 파일은 신규추가 1개, 변경 1개 입니다.
core/log/jdbc/DriverLoggables.java 를 열어보시면...
수많은 드라이버가 정의되어 있으실 겁니다.
여기 마지막에 살짝~ 큐브리드 드라이버를 등록해 둡니다.
public final String CUBRID_DRIVER="cubrid.jdbc.driver.CUBRIDDriver";
그러면, 이 드라이버를 래퍼할 클래스를 만들 차례 입니다.
core/log/jdbc/driver 요기에다가 CUBRIDDriver.java를 하나 만듭니다.
package core.log.jdbc.driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import core.log.jdbc.DriverLoggables;
import core.log.logger.SL;
public class CUBRIDDriver extends
DriverLoggables {
public CUBRIDDriver() {
setDriver(CUBRID_DRIVER);
}
static {
try {
DriverManager.registerDriver(new CUBRIDDriver());
} catch(SQLException e) {
SL.getInstance().logError(e);
}
}
}
import java.sql.DriverManager;
import java.sql.SQLException;
import core.log.jdbc.DriverLoggables;
import core.log.logger.SL;
public class CUBRIDDriver extends
DriverLoggables {
public CUBRIDDriver() {
setDriver(CUBRID_DRIVER);
}
static {
try {
DriverManager.registerDriver(new CUBRIDDriver());
} catch(SQLException e) {
SL.getInstance().logError(e);
}
}
}
보시면 아시겠지만, 이 친구를 우리의 webapp에서 땡겨쓸 겁니다.
JDBC이든, Spring이든, iBatis이든 간에...
cubrid.jdbc.driver.CUBRIDDriver
대신에
core.log.jdbc.driver.CUBRIDDriver
요렇게만 바꾸면 된다는 거죠.
이제 테스트 해보시면^^ SQL을 쉽게 뽑아보실 수 있습니다.
PreparedStatement를 사용해도 입력되는 파라미터가 SQL에 팍팍 박혀서 나오니 Copy & Paste 해서
CUBRID Manager에서 실행해보시면 어디서 에러가 있는지 쉽게 알 수 있을 겁니다.
참, log4sql.jar 압축을 풀어보시면 properties파일이 하나 있습니다.
이를 동일한 위치로 복사해야 합니다. 안그러면 실행이 안되실 겁니다.
만약, iBatis에서 테스트할 경우에는 sqlmap 설정에 poolPreparedStatements를 false로 해야 에러 없이
실행됩니다.
<property name="poolPreparedStatements" value="false" />
CUBRIDDriver.java와 DriverLoggables.java 파일은 첨부합니다.
CUBRIDDriver.java