. DAO에서 PreparedStatement를 사용하면 SQL의 보안에는 충실하지만 정작 디버깅시 variable을 알아먹을 수가 없어서 에로사항이 꽃피게 된다.

. 그렇다고 할당받은 변수를 그냥 소스상에 박아 넣고 로깅하게 되면 알아먹기는 편하지만 보안상 문제가 발생하고, 퍼포먼스도 떨어진다고 하는데...솔직히 잘은 모르겠다- _-;

. PreparedStatement를 로깅해주는 방법에는 몇가지가 있지만 ibm에서 제시한 LoggableStatement를 사용하는 방법이 가장 깐쫀하다.
( http://www.ibm.com/developerworks/java/library/j-loggable.html , [번역])



. 첨부된 class를 Library에 등록하고, 사용법은 다음과 같다.
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
int fooVal = 99;
String barVal = "zommoc";

Connection conn = dataSource.getConnection();
sql.append(" Select foo, bar From foorbar Where foo < ? and bar = ? ");

pstmt = new LoggableStatement(conn, sql.toString());
pstmt.setInt(1, fooVal);
pstmt.setString(2, barVal);

ResultSet rset = pstmt.executeQuery();
// parse result ...


. 그리고 얘를 콘솔에 로깅할 때는 아래처럼 처리해 주면 된다.
try {
   //블라블라~
} catch (SQLException e) {
   //블라블라~
} finally {
   Exception e = new Exception();
   StackTraceElement trace = e.getStackTrace()[0];
   Debug.logWrite(trace.getClassName()+"."+trace.getMethodName(), ((LoggableStatement)pstmt).getQueryString(), true, false);
   ConnectionFactory.release(conn,pstmt,rset);
}

* Log찍어주는 Debug class는 싸제라서...그냥 System.out.println 해도 됨.

. 이밖에도 p6spy 라는 framework도 존재하는데, 얘는 좀 쓰기 구찮다. 그냥 이거 쓰자;

Posted by 좀모씨

댓글을 달아 주세요


블로그 이미지
Under Construction
좀모씨
Yesterday4
Today6
Total242,585

달력

 « |  » 2019.9
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

최근에 달린 댓글

최근에 받은 트랙백

글 보관함