반응형

log4sql은 많이 알려지진 않았지만 상당히 유용한 sql 로거입니다. 만든 분은 송인섭이라는분인데 한국분이신것 같습니다.

 기존에 우리는 sql을 디버깅 하기 위해서 대부분 System.out.println()을 사용했습니다. log4j를 이용해서 sql을 콘솔에 찍기도 하고 jdbc관련 클래스를 만들어서 사용하는 경우에도 결국엔 System.out.println()을 사용하게 됩니다. 하지만 sql을 이렇게 콘솔로 표현하게 되면 여러가지 불편한 점들이 생깁니다.
 가장 큰 문제점이 바로 소스는 소스대로, 콘솔은 콘솔대로 가독성이 떨어지게 됩니다. 소스상에서 System.out을 사용하게되면 개발이 끝나도 운영에 들어가게되면 이 부분을 주석처리하거나 다른 설정을 하게됩니다.
 또한 콘솔에서 보여질때 sql을 소스상에서 들여쓰기를 해주지 않았다면 단순한 sql은 괜찮지만 복잡한 sql은 볼때마다 매번 들여쓰기를 해주어야 한다는 단점이 있습니다. log4sql은 이러한 문제를 해결하기 위해서 간단히 드라이버 설정만 바꿔주면 System.out.println()을 사용하지 않아도, 소스상에서 들여쓰기를 해주지 않아도 콘솔에 예쁘게 들여쓰기가 된 sql을 보여줍니다.

log4sql이 뭔가요?

간단하게 log4sql이 무엇인지 백번 설명을 하기보다는 한번 보는게 확실히 이해하기 쉬울꺼 같습니다.
사용자 삽입 이미지
저 노란색 박스안에 나타난 내용이 log4sql에서 자동으로 찍어준 내용입니다. sql이 실행된 시간과 실행된 메소드, sql이 실행되는데 소요된 시간, 실행된 sql을 자동으로 들여쓰기를 해서 보여주고 있습니다.

log4sql의 장점

1. 자동 들여쓰기
일반적으로 콘솔에 들여쓰기가 된 sql을 보려면 다음과 같은 코드를 작성해야 했습니다.
1
2
3
4
StringBuffer  var11 = new StringBuffer();<BR>
var11.append("SELECT * \n");<BR>
var11.append(" FROM   emp \n");<BR>
var11.append(" WHERE  deptno = '30' \n");<BR>
하지만 더이상 이런 부분은 신경 쓰지않아도 됩니다. log4sql을 사용한다면 말이죠.

2. 페이지 반응속도가 느리다구요?
log4sql은 쿼리가 실행되는데 걸린 시간을 표시해줍니다. 어느 부분이 느린지 어느 쿼리가 느린지 콘솔을 보기만 하면 알 수 있습니다.

3. 이 쿼리가 어디서 날린 쿼리지?
log4sql은 쿼리가 실행된 메소드도 표시해 줍니다. 하지만 쿼리를 날리는 클래스를 별도로 두고 해당 클래스를 이용해서 쿼리를 날리게 되면 log4sql도 어쩔수 없답니다.^^;;

어떻게 사용하나요?

간단합니다. JDBC 관련 설정에서 드라이버 설정만 바꿔주면 됩니다. 예를 들어 오라클을 사용하는 경우 기존에 'oracle.jdbc.drirver.OracleDriver' 드라이버를 사용했다면 'core.log.jdbc.driver.OracleDriver'로 바꿔주기만 하면 됩니다. 이제 log4sql을 사용할 준비가 된겁니다. 이제 WAS를 올리고 콘솔을 한번 보세요. sql이 깔끔하게 정리되어서 나타날꺼에요.^^
다른 디비를 사용하시는 경우에는 log4sql 홈페이지에서 확인하시면 됩니다.

다음에는 log4sql의 상세 설정에 대해서도 알아보도록 하겠습니다.

반응형
반응형

개발환경에서 JAVA + ORACLE + JSP 일반적인 환경에서

ORACLE은 일반적으로 PL/SQL을 사용한다

그런데,,,

이 PL/SQL을 사용하다보면 JAVA + JSP를 통한 debugging 을 하기가 굉장히 어렵고

제대로 변수가 입력되었는지... 잘 동작하는지 찾기 어렵다.

그래서... 인터넷 검색을 하다보니

log4j 처럼

log4sql이라는 lib가 있다는 것을 알았다...

프로젝트 홈 : http://log4sql.sourceforge.net/index_kr.html

  Download log4sql-7.0.8



홈페이지에서 보면,

개발을 할경우 우리는 무수히 많은 프레임웍과 도구들을 사용 합니다.
View계층, Model계층 그리고 Controller또는 DataAcess계층에서 많은 도구들과 프레임웍은
현재 거의 모든 layer들에 걸쳐서 사용되고 개발되어지고 있습니다.
이런경우 개발자에게 중요한것중의 하나는 비즈니스 로직인 PL/SQL작업을 하는 것 입니다.
모든 PL/SQL작업은 SQL을 작성하고 실행한 후에 버그가 존재하가나 원하는 결과가 나오지 않을경우 수정하는 것이며
이런작업은 반복적으로 수행됩니다.
이런 경우에 우리는 jdbc또는 Connection Pooling(Apache DBCP) 또는 support 2PC (JTA,JOTM)등을 사용합니다.
또한 우리는 데이터 접근계층의 프레임웍으로 IBATIS나 SpringFramework을 사용할 경우 springJDBC또는 HIBERNATE등을 사용합니다.
이런 상황에서 우리는 의문을 갖게 됩니다. '내가 작성한 SQL이 정상적으로 작동한 것인가?', '내가 입력값으로 넣어준 값들이 제대로 등록된 SQL인가?'
SQL을 확인하고자 개발 소스의 구석구석에 System.out.println(...)으로 확인을 할 것입니다.
개발이 종료된 시점에 주석으로 가려진 가독성이 떨어지는 소스는 유지보수담당자에게 머리아픈 소스가 될 것이고
운영상에 문제가 발생할 경우 해당 SQL을 다시 확인하는 복잡한 작업이 반복될 것입니다.
이런경우를 경험한 개발자라면 log4sql은 간단한 설정으로 많은 편리함을, 개발의 즐거움을 당신에게 드릴것 입니다.

기본 apache common lang lib를 의존한다. : http://commons.apache.org/lang/

오픈 소스이며 apache 라이센스를 따른다 : http://www.apache.org/licenses/LICENSE-2.0





특징들

1.쉬운 설정.
log4sql은 굉장히 간단한 설정을 지원합니다.
개발자들이 할 일은 log4sql-xxx.jar파일을 클래스패스에 복사한 후에
사용하고 있는 driver-class 이름을 log4sql에서 지원하는 driver-class명으로만 바꿔주시면 됩니다.

 2.개발성 향상.
 log4sql은 SQL파라미터 매치된 로그뿐 아니라, 로그의 위치와 걸린시간 그리고 수행결과(INSERT,UPDATE,DELETE)를 보여드립니다.

 3. SQL실행시간을 가장 정확히 파악합니다.
log4sql은 실제 서비스와 동일한 시점의 순수한 SQL실행 시간만을 나타냅니다.
즉 이것은 Connection을 얻어오거나, Connection Pooling기법을 사용하더라도, 실제 작성된 SQL이 DBMS에 전달된 후 결과 값을 받아오기까지의 걸린 시간만을 측정하여
성능에 이상이 있는 SQL등을 쉽게 확인 할 수 있습니다.
 
 4. Application의 성능과 실행에 영향을 주지 않습니다.
 log4sql은 내부적인 문제가 존재하더라도 실제 Application에 영향을 주지는 않습니다.
내부적인 문제가 발생할 경우 해당로그는 설정변경으로 확인이 가능하며, 동시접속사용자가 많은경우 log4sql은 비동기 모드로의 전환이 실행환경에서 가능하도록 설계되었습니다.

5.어떤 유형의 프로젝트라도 적용이 가능합니다.
 JDK1.4이상의 아래의 JDBC드라이버 리스트를 사용하는 어떤 프로젝트라도 사용이 가능합니다.

[ORACLE DRIVER CLASS] 'oracle.jdbc.drirver.OracleDriver'
[MYSQL DRIVER CLASS] 'com.mysql.jdbc.Driver' or 'org.gjt.mm.mysql.Driver'
[SYBASE DRIVER CLASS] 'com.sybase.jdbc2.jdbc.SybDriver'
[DB2 DRIVER CLASS] 'com.ibm.db2.jcc.DB2Driver'
[INFOMIX DRIVER CLASS] 'com.informix.jdbc.IfxDriver'
[POSTGRESQL DRIVER CLASS] 'org.postgresql.Driver'
[MAXDB DRIVER CLASS] 'com.sap.dbtech.jdbc.DriverSapDB'
[FRONTBASE DRIVER CLASS] 'com.frontbase.jdbc.FBJDriver'
[HSQL DRIVER CLASS] 'org.hsqldb.jdbcDriver'
[POINTBASE DRIVER CLASS] 'com.pointbase.jdbc.jdbcUniversalDriver'
[MIMER DRIVER CLASS] 'com.mimer.jdbc.Driver'
[PERVASIVE DRIVER CLASS] 'com.pervasive.jdbc.v2.Driver'
[DAFFODILDB DRIVER CLASS] 'in.co.daffodil.db.jdbc.DaffodilDBDriver'
[JDATASTORE DRIVER CLASS] 'com.borland.datastore.jdbc.DataStoreDriver'
[CACHE DRIVER CLASS] 'com.intersys.jdbc.CacheDriver'
[DERBY DRIVER CLASS] 'org.apache.derby.jdbc.ClientDriver'
[ALTIBASE DRIVER CLASS] 'Altibase.jdbc.driver.AltibaseDriver'
[MCKOI DRIVER CLASS] 'com.mckoi.JDBCDriver'
[JSQL DRIVER CLASS] 'com.jnetdirect.jsql.JSQLDriver'
[JTURBO DRIVER CLASS] 'com.newatlanta.jturbo.driver.Driver'
[JTDS DRIVER CLASS] 'net.sourceforge.jtds.jdbc.Driver'
[INTERCLIENT DRIVER CLASS] 'interbase.interclient.Driver'
[PURE JAVA DRIVER CLASS] 'org.firebirdsql.jdbc.FBDriver'
[JDBC-ODBC DRIVER CLASS] 'sun.jdbc.odbc.JdbcOdbcDriver'
[MSSQL 2000 DRIVER CLASS] 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
[MSSQL 2005 DRIVER CLASS] 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
[CUBRID DRIVER CLASS] 'cubrid.jdbc.driver.CUBRIDDriver'



사용법

 1.log4sql-xxx.jar파일을 클래스패스에 복사하십시요.
log4sql-xxx.zip파일은 sourceforge에서 다운로드한 후 압축을 해제합니다.
그리고나서 압축을 해제한 폴도에 가서 log4sql-xxx.jar을 복사한후 SQL로그를 보고자하는 어플리케이션을 lib디렉토리에 복사합니다.

 2.Driver Class이름을 변경합니다.
만약 Oracle Driver를 사용하신다면 driver-class의 설정은 아마도 아래와 같을 것입니다. <driver class='oracle.jdbc.driver.OracleDriver'>와 같다면 <driver class='core.log.jdbc.driver.OracleDriver'>로 변경하면 됩니다.
아래의 리스트는 log4sql에서 지원하고 있는 driver의 리스트 입니다.



JDBC TYPE Origin Your Driver Class -> log4sql Driver Class
[ORACLE DRIVER CLASS] oracle.jdbc.drirver.OracleDriver -> core.log.jdbc.driver.OracleDriver
[MYSQL DRIVER CLASS] com.mysql.jdbc.Driver' or'org.gjt.mm.mysql.Driver -> core.log.jdbc.driver.MysqlDriver
[SYBASE DRIVER CLASS] com.sybase.jdbc2.jdbc.SybDriver -> core.log.jdbc.driver.SybaseDriver
[DB2 DRIVER CLASS] com.ibm.db2.jcc.DB2Driver -> core.log.jdbc.driver.DB2Driver
[INFOMIX DRIVER CLASS] com.informix.jdbc.IfxDriver -> core.log.jdbc.driver.InfomixDriver
[POSTGRESQL DRIVER CLASS] org.postgresql.Driver -> core.log.jdbc.driver.PostgresqlDriver
[MAXDB DRIVER CLASS] com.sap.dbtech.jdbc.DriverSapDB -> core.log.jdbc.driver.MaxDBDriver
[FRONTBASE DRIVER CLASS] com.frontbase.jdbc.FBJDriver -> core.log.jdbc.driver.FrontBaseDriver
[HSQL DRIVER CLASS] org.hsqldb.jdbcDriver -> core.log.jdbc.driver.HSQLDriver
[POINTBASE DRIVER CLASS] com.pointbase.jdbc.jdbcUniversalDriver -> core.log.jdbc.driver.PointBaseDriver
[MIMER DRIVER CLASS] com.mimer.jdbc.Driver -> core.log.jdbc.driver.MimerDriver
[PERVASIVE DRIVER CLASS] com.pervasive.jdbc.v2.Driver -> core.log.jdbc.driver.PervasiveDriver
[DAFFODILDB DRIVER CLASS] in.co.daffodil.db.jdbc.DaffodilDBDriver -> core.log.jdbc.driver.DaffodiLDBDriver
[JDATASTORE DRIVER CLASS] com.borland.datastore.jdbc.DataStoreDriver -> core.log.jdbc.driver.JdataStoreDriver
[CACHE DRIVER CLASS] com.intersys.jdbc.CacheDriver -> core.log.jdbc.driver.CacheDriver
[DERBY DRIVER CLASS] org.apache.derby.jdbc.ClientDriver -> core.log.jdbc.driver.DerbyDriver
[ALTIBASE DRIVER CLASS] Altibase.jdbc.driver.AltibaseDriver -> core.log.jdbc.driver.AltibaseDriver
[MCKOI DRIVER CLASS] com.mckoi.JDBCDriver -> core.log.jdbc.driver.MckoiDriver
[JSQL DRIVER CLASS] com.jnetdirect.jsql.JSQLDriver -> core.log.jdbc.driver.JsqlDriver
[JTURBO DRIVER CLASS] com.newatlanta.jturbo.driver.Driver -> core.log.jdbc.driver.JturboDriver
[JTDS DRIVER CLASS] net.sourceforge.jtds.jdbc.Driver -> core.log.jdbc.driver.JTdsDriver
[INTERCLIENT DRIVER CLASS] interbase.interclient.Driver -> core.log.jdbc.driver.InterClientDriver
[PURE JAVA DRIVER CLASS] org.firebirdsql.jdbc.FBDriver -> core.log.jdbc.driver.PureJavaDriver
[JDBC-ODBC DRIVER CLASS] sun.jdbc.odbc.JdbcOdbcDriver -> core.log.jdbc.driver.JdbcOdbcDriver
[MSSQL 2000 DRIVER CLASS] com.microsoft.jdbc.sqlserver.SQLServerDriver -> core.log.jdbc.driver.MssqlDriver
[MSSQL 2005 DRIVER CLASS] com.microsoft.sqlserver.jdbc.SQLServerDriver -> core.log.jdbc.driver.Mssql2005Driver
[CUBRID DRIVER CLASS] cubrid.jdbc.driver.CUBRIDDriver -> core.log.jdbc.driver.CUBRIDDriver






설정하기

 우리는 log4sql_conf.jsp페이지를 통해서 보다 쉬운 운영상의 설정페이지를 제공합니다.
 
log4sql-xxx.zip파일을 sourceforge싸이트에서 다운로드한 후에 압축을 풀게되면 log4jsq_conf.jsp파일을 [log4sql-xxx.zip]/log4sql_conf.jsp에서 볼 수 있습니다.
log4sql_conf.jsp파일을 개발하고 있는 어플리케이션의 context-root에 복사하세요
(만약 개발중인 어플리케이션 서버의 context_root이름이 'site-root'이고 context_root까지의 디렉토리 구조가 'c://application/domain/site_root'와 같다면 log4sql_conf.jsp를 'c://application/domain/site_root/log4sql_conf.jsp'처럼 복사하세요)
그런 후에 log4sql_conf.jsp을 브라우져로 열기 위해서 'http://개발ip:개발port/site_root/log4sql_conf.jsp'처럼 접근합니다.

log4sql_sql.jsp의 형태는 아래와 같은 그림이 보여질것 입니다.


l환경설정에 사용되어지는 속성값들은 log4sql_configuration.properties에 위치하고 있으며,
항상 같은 설정이 적용되어지길 원할경우 [log4sql-xxx.jar]/core/log/log4sql_configuration.properties의 위치에서 해당항목의 값을 변경하시면 됩니다.


 1.Log Level(log4sql_configuration.properties 파일에서 'log.level'항목을 참조함).
Log Level은 로그를 남길경우의 우선 순위를 얘기하며, Log4j를 알고계신다면 쉽게 이해가 되실겁니다.
log4sql의 로그는 기본적으로 모두 DEBUG의 형태로 되어있으므로 DEBUG값 이상으로 로그레벨을 변경하게 되면 정상적인 로그를 남기지 않게 됩니다.
로그레벨의 종류는 DEBUG=0,INFO=1,WARNING=2,FATAL=3, ERROR=4, LOGGING_OFF=5와 같으며,
SQL수행도중에 구문문제 또는 잘못된 파라미터 INDEX에러가 발생하게 되면 자동으로 해당 SQL과 원인(Root cause Exception trace)를
ERROR 로그레벨로 남기게 되며, 모든 로그(Error 로그포함)를 남기지 않으려면 로그레벨을 LOGGING_OFF로 변경하시면 됩니다.

 2.Select Fix(log4sql_configuration.properties 파일에서 'query.logging.position.fixed.select'항목을 참조함).
 SELECT SQL에만 해당됩니다.
log4sql은 많은경우에 사용되어질 수 있도록 만들어 졌습니다.
따라서 우리는 log4sql을 사용하는 어플리케이션에서 어떠한 프레임웍을 사용하는지, 어떤 서버에서 실행되는지 알수가 없습니다.
문제가 있는 SQL일경우 사용자는 DEBUGING을 해야 할 것입니다. 그러기 위해선 어떤 클래서에서, 어떤 메소드에서 실행이 되었는지 알아야합니다.
log4sql은 SQL을 실행시킨 패키지와 클래스 그리고 어떤 메소드의 몇번째 라인에서 실행이 되었는지 실행된 시간과 함께 나타내 줍니다.
하지만, 위와같은 이유로 적합한 위치가 아닐수도 있으므로 log4sql은 적합한 위치를 사용자가 선택할 수 있도록 모든 실행에 참여한 클래스와 메소드들의 항목을 모두 보여줍니다.

 3.Select Position(log4sql_configuration.properties파일에서 'query.logging.position.select'항목을 참조함).
 2번 항목에서 적합하다고 생각되는 항목의 번호를 Select Position에 입력한 후 확인 버튼을 클릭하거나, 영구적으로 변경을 원하는 경우는 log4sql_configuration.properties에서 query.logging.position.select항목의 값으로 변경하시면 됩니다

 4.None Select Fix(log4sql_configuration.properties파일에서 'query.logging.position.fixed.none_select'항목을 참조함).
 INSERT, UPDATE, DELETE SQL에만 해당됩니다.
log4sql은 많은경우에 사용되어질 수 있도록 만들어 졌습니다.
따라서 우리는 log4sql을 사용하는 어플리케이션에서 어떠한 프레임웍을 사용하는지, 어떤 서버에서 실행되는지 알수가 없습니다.
문제가 있는 SQL일경우 사용자는 DEBUGING을 해야 할 것입니다. 그러기 위해선 어떤 클래서에서, 어떤 메소드에서 실행이 되었는지 알아야합니다.
log4sql은 SQL을 실행시킨 패키지와 클래스 그리고 어떤 메소드의 몇번째 라인에서 실행이 되었는지 실행된 시간과 함께 나타내 줍니다.
하지만, 위와같은 이유로 적합한 위치가 아닐수도 있으므로 log4sql은 적합한 위치를 사용자가 선택할 수 있도록 모든 실행에 참여한 클래스와 메소드들의 항목을 모두 보여줍니다

 5.None Select Position(log4sql_configuration.properties파일에서 'query.logging.position.none_select'항목을 참조함).
4번 항목에서 적합하다고 생각되는 항목의 번호를 Select Position에 입력한 후 확인 버튼을 클릭하거나, 영구적으로 변경을 원하는 경우는 log4sql_configuration.properties에서 query.logging.position.select항목의 값으로 변경하시면 됩니다.

 6.View Parameter Position(log4sql_configuration.properties파일에서 'query.logging.view.position'항목을 참조함).
 PreparedStatement를 사용할 경우 원하는 결과가 나오지 않을경우 해당 파리미터의 값이 적당하게 메치되었는지 궁금하게 됩니다.
이럴경우 개발자들은 난감한 상황에 접하게 됩니다. log4sql은 모든 파라미터가 결합된 SQL로그를 보여줍니다.
하지만, SQL문자열에 직접 입력된 값이 존재할 경우 개발자는 어떤값이 입력된 값인지, 어떤값이 문자열에 존재하는 값인지 혼동을 할 수 있습니다.
View Parameter Position값을 'true'로 변경할 경우 SQL log에서 입력된 값의 좌측에 '/**P*/'와 같은 표시를 보여줍니다. .

 7.View Internal Error(log4sql_configuration.properties파일에서 'query.logging.view.internal.exception'항목을 참조함).
 log4sql은 내부적인 문제가 있더라도 실제 SQL의 실행에는 영향을 미치지 않습니다.
log가 출력되지 않는 비정상적인 경우에 View Internal Error의 값을 'true'로 변경할 경우 내부적인 오류라면 오류의 내용을 출력할 것입니다.
이 내용은 사용자에게 고맙지 않은 경우일 것이나, 해당 내용을 log4sql개발팀에게 보내준다면 보다 견고한 버젼으로의 변경이 용이할 것입니다.

 8.Log To Asynchronous(log4sql_configuration.properties파일에서 'query.logging.asynchronous'항목을 참조함).
 log4sql은 SQL로그의 출력에 있어서 두가지 방법을 사용합니다. 동기적인 경우(Log To Asynchronous의 값을 'false'로 변경할 경우)모든 SQL로그는 순차적으로 실행이 될 것입니다.
이경우 log4sql에서의 모든 작업이 수행된 후에 다음 작업을 수행 할 것입니다.(많은 동시접속자가 존재하는 많은 로그가 출력되고 있는 상황에서 성능에 영향을 줄 수가 있습니다.
하지만 개발시 소수의 개발자에 의해서 디버그 용도로 실행되고 있을경우는 거의 영향을 주지 않습니다.) 비동기적인 경우(Log To Asynchronous의 값을 'true'로 변경할 경우)모든 SQL로그는 항상 순차적으로 실행되지 않습니다.
이경우 log4sql에서의 모든 작업과 SQL로그를 남기는 작업은 별도의 Thread로 동작할 것입니다.(많은 동시접속자가 존재(300tps)하는 많은 로그가 출력되고 있는 상황에서 성능을
보장하여 줄 것이나 이경우 로그는 순차적으로 남기지 않습니다.)

 9.View Appointed Package(log4sql_configuration.properties파일에서 'query.logging.view.appoint'항목을 참조함).
 아마도 개발자 혼자서 모든 개발을 진행하는 일은 흔치 않을것입니다.
따라서 log4sql은 개발자가 개발하고 있는 패키지 혹은 클래스 혹은 메소드에 한해서만 로그를 남길수 있습니다.
설정의 방법은 아래의 내용을 참조하세요.

[예약된 기호들]*..* : 모든 패키지를 의미합니다, * : 모든 클래스를 의미합니다, (..) : 모든 메소드들을 의미합니다
View Appointed Package의 값을 *..*.*.(..)로 입력한다면 실행 되고있는 모든 SQL로그가 보여질 것 입니다.
parttern 1 : *..*.*.(..) (모든 로그가 보여집니다.)
parttern 2 : net.*..*.*.(..) ('net'으로 시작되는 패키지 하위의 SQL모든 클래스의 로그가 출력됩니다.)
parttern 3 : *..*.Package_name.*..*.*.(..) ('Package_name'이 중간에 포함된 패키지의 로그가 보여집니다.)
parttern 4 : *..*.Package_name.*.(..)('Package_name'으로끝나는 모든 패키지의 로그가 보여집니다.)
parttern 5 : *..*.Class_name.(..) (클래스 이름이 'Class_name'인 곳의 로그가 보여집니다.)
parttern 6 : *..*.Package_name.Class_name.(..) (패지지가 'Package_name'로 종료되고 클래스 이름이 'Class_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 7 : *..*.Package_name.*..*.Class_name.(..) (패키지가 'Package_name'을 포함하고 있고 클래스 이름이 'Class_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 8 : *..*.Package_name.Class_name.Method_name (패키지의 이름이 'Package_name'로 종료되며, 클래스의 이름이 'Class_name'이고 메소드의 이름이 'Method_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 9 : *..*.Package_name.*..*.Class_name.Method_name (패키지의 이름이 'Package_name'을 포함하고 있고 클래스 이름이 'Class_name'이고 메소드 이름이 'Method_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 10 : *..*.Class_name.Method_name (모든 패키지에서 클래스 이름이 'Class_name'이고 메소드 이름이 'Method_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 11 : *..*.Package_name.*.Method_name (패키지 이름이 'Package_name'로 종료되고 메소드 이름이 'Method_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 12 : *..*.Package_name.*..*.*.Method_name (패키지 이름에서 'Package_name'를 포함하고 있고 메소드 이름이 'Method_name'인 곳의 SQL 로그가 출력됩니다.)
parttern 13 : *..*.*.Method_name (모든 패키지와 모든 클래스 중에서 메소드 이름이 'Method_name'인 곳의 SQL모든 로그가 출력됩니다.)
parttern 14 : net.sourceforge.log4sql.Class_name.Method_name (패키지가 'net.sourceforge.log4sql'이고 클래스 이름이 'Class_name'이고 메소드 이름이 'Method_name'인 곳의 SQL로그가 출력됩니다.)


p.$. : 아직 사용해 보진 않았다... 사용해야 하는데... 우선 간략하게 정리해본다... 쿠쿠... 시간나면 더 추가 ㄱ ~



반응형
반응형



#cs

처리순서 : 1. 메시지를 띄워 64비트 수동 버전으로 안내함.

#ce
; 설치 경로
$InstallDir = "C:\Program Files\fasoo DRM\"

; 메시지 띄우기
msgbox(0,"FASOO WEB DRM", "전자바우처 윈도우즈 7 64bit용 수동설치 버전입니다." & Chr(13) & "www.socialservice.or.kr 에서 모듈 설치후 오류시에만 사용해 주세요^^");

; 파수 dll 파일 등록
RunWait("regsvr32 f_webdc.dll", $InstallDir);
RunWait("regsvr32 f_webdm.dll", $InstallDir);
RunWait("regsvr32 f_websn.dll", $InstallDir);
RunWait("regsvr32 f_swv.dll", $InstallDir);

; reg Server 등록
RunWait("fswbroker.exe /regserver", $InstallDir);

반응형
반응형





GUI 모드 사용법

In just 3 steps, your application will be ready to run on Vista/Win7

  • Select the application using browse button.
  • Set one of the privilege required for your application from selection box.
  • Check the "Yes" button if your application interacts with high privilege applications.
Once you have made the settings, click on "Make It" button. Now your application will automatically run as per the privilege set rather than usual "standard user" account.
 












콘솔 모드 사용법

Console tool makes it easy to automate the process. For example you can use it as post build step to make the application Vista/Win7 UAC compliant. Here is the typical usage information.
 
VistaUACMakerConsole [-d <description>] [-p <priv level>] [-ui] {exe_path}

Options:
   -d  Description of the project ( Default : My project )
   -p  Privilege level required. possible values : admin, invoker, highest
       admin = administrator
       invoker = same as parent process
       highest = Highest possible level for the user
   -ui Specify if the executable interacts with higher windows.
       (Default action is not to set this flag)

Example:
    VistaUACMakerConsole -d "Vista project" -p admin "c:\project.exe"
 























주소 : http://securityxploded.com/downloadfile.php?id=8111

반응형
반응형

TMAX 홈페이지에서 얻어왔음..


반응형

'Language > JSP' 카테고리의 다른 글

JSP 2.0 프로그래밍 소스  (0) 2011.10.12
JSP WEB shell  (0) 2010.05.10
JSP 파일 읽기  (0) 2009.12.03
웹 상에서 바로 엑셀로 저장하기  (0) 2009.03.06
반응형

답변입니다.
 
먼저 확인하는 내용입니다.
1. http://inho21.com/ 요청과 http://inho21.com/TEMS/ 라는 요청들에 대한 Context 간 Session 공유로 확인합니다.
2. http://inho21.com 라는 도메인으로 요청이 들어오며, 이는 웹서버를 통하여 들어온다고 확인합니다.
 
올려주신 설정은 확인하였습니다.
먼저 WEBMain.xml에서 context간 Session 공유에서 단일 도메인이기 때문에 <session-cookie> 설정은 없어도 됩니다.
======================================================================================
      <session-config>
         <distributable>true</distributable>
         <shared>true</shared>
         <timeout>600</timeout>
         <reload-persistent>true</reload-persistent>
      </session-config>
   </context-group>
   <session-server>
      <primary-server>hoya21</primary-server>
   </session-server>
</web-container>
======================================================================================
 
그리고 JEUSMain.xml에서 세션 서버를 설정하셨고, WEBMain.xml에서 <distributable>true</distributable> 로 설정하셨기 때문에 중앙집중식으로 세션 서버를 사용하시고, 이에 대하여 Container간 단일 Session Server를 사용하게 됩니다.
 
이와 같이 되었다면 다음 jeuadmin `hostname` -Uadministrator -P{설치시 암호} 를 실행하여,
console 관리툴에 들어가시기 바랍니다.
그 후, st -s 를 입력하셨을 경우(한개의 컨테이너 일 경우)
Context(Application) 갯수인 2개가 나오지 않고, 1개로 나오는지를 확인하시기 바랍니다.
1개로 나와야 두개의 Context가 하나의 Session Server를 사용하고 있다는 것입니다.
 
이후, 각 Context간 Session이 공유되는지를 확인하시기 바랍니다.
 
감사합니다.
 
 
ps. 샘플 소스로 Session.jsp 라는 소스를 올립니다. 세션이 공유 되고 있다면, 한 브라우저에서 /Session.jsp 호출 후, /TEMS/Session.jsp 호출시 하나의 JSessionID로 나와야 하며, 뒤에 호출된 것에 대해서 isNew() 값은 false로 나와야 합니다.
 
Session.jsp
======================================================================================
<%@ page language="java" session="true" contentType="text/html; charset=euc-kr" %>
<%
    out.println("test <br>");
    out.println("Session ID : "+session.getId() + "<br>");
    out.println("Session Creation Time : "+new java.util.Date(session.getCreationTime()) + "<br>");
    out.println("Session Last Access Time : "+new java.util.Date(session.getLastAccessedTime()) + "<br>");
    out.println("Session TimeOut : "+session.getMaxInactiveInterval() + "<br>");
    out.println("Session is new? "+session.isNew() + "<br>");
%>
======================================================================================
 
 
 

<질문 내용>
 
JEUS6.0 #Fix6
동일안 컨테이너에 컨텍스트 구분만 해서 사용합니다.
사용 컨텍스트 : '/', '/TEMS' 2개
node name : hoya21
가상도메인 : inho21.com
 
 
제목을 '세션공유에 대한 x차 질문입니다.' 라고 해서 계속 세팅을 하고 있습니다.
이전답변에서는 동일한 컨테이너에 컨텍스트를 등록하면 세션공유가 된다고 했던것 같은데...
4차 답변에서는 동일한 컨테이너 일지라도 컨텍스트간 세션공유가 되지 않는다..라는 답변이 있었고,
이것을 해결할려면 patch를 받아야 한다고 했습니다.
 
현재는 개발중 테스트 목적으로 개발자 노트북에 JEUS를 설치해서 동작 확인 및 설정을 하고 있습니다.
해서 JEUS6.0 #Fix6을 받아 설치하고, 같이 제공하는 patch를 설치했습니다.
데모버젼에서는 세션공유가 안되고, 정식라이센스를 발급 받은 서버에서만 세션공유를 위한 patch파일을
배포하는것인지 알고 싶습니다.
 
개발자의 입장에서 세션공유 테스트를 하려면 더이상 어찌 해야하는지도 답변을 주시면 감사하겠습니다.
 
--------------------------------------------아래---------------------------------------------
 
- JEUSMain.xml
   <node>
      <name>hoya21</name>
        <!-- Session Server Setting -->
        <session-server>
          <type>primary</type>
          <resolution>60000</resolution>
          <connect-timeout>5000</connect-timeout>
          <read-timeout>20000</read-timeout>
          <passivation-to>-1</passivation-to>
          <removal-to>1800000</removal-to>
          <check-to>30000</check-to>
        </session-server>

- WEBMain.xml
      <session-config>
         <!-- This Option is JEUS Session Server Use : Default - false -->
         <!-- If this Option is true, All Context Group Use JEUS Session Server -->
         <distributable>true</distributable>
         <!-- If this Option is true, All Context Group Share Session -->
         <!-- This Option is All Context Group Application Share Session : Default - false -->
         <shared>true</shared>
         <timeout>600</timeout>
         <reload-persistent>true</reload-persistent>
         <session-cookie>
            <jsessionid-name>JSESSIONID2</jsessionid-name>
            <domain>.inho21.com</domain>
         </session-cookie>
      </session-config>
   </context-group>
   <!-- Session Clustering Setting for No Node Clustering -->
   <session-server>
      <primary-server>hoya21</primary-server>
   </session-server>
</web-container>
 
출처 : http://technet.tmax.co.kr/kr/inquiry/qna/jeus/readBoardForm.do?bbsCode=qna_jeus&fc=inquiry&sc=inquiry_qna&tc=inquiry_qna_jeus&currentPage=1&seqNo=41849&categoryId=&productCode=&range=10&searchType=TITLE&searchText=%EA%B3%B5%EC%9C%A0





















JEUS Enterprise버전에서는 SessinServer를 제공합니다.
데모라이센스를 사용하시는 경우 기능제약이 없으므로 설정이 가능합니다.
 
JEUS Server안내서 9장과 JEUS Web Container안내서 8장을 참조하시어 SessionServer를 설정하시면
세션 공유가 가능합니다.
 
== JEUSMain.xml 파일
<jeus-system>
    . . .
    <node>
        . . .
        <session-server>
            <session-manager>
                <name>session1</name>
                <passivation-to>1800000</passivation-to>
                <removal-to>3600000</removal-to>
            </session-manager>
        </session-server>
        . . .
    </node>
 
위와 같이 Session Manager를 설정해 두고
 
== WEBMain.xml 파일 (3개의 컨테이너에 동일하게 설정)
<?xml version="1.0"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
        . . .
    <session-cluster>
        <session-server>
            <server-name>session1</server-name>
            <connect-timeout>120000</connect-timeout>
            <read-timeout>120000</read-timeout>
        </session-server>
    </session-cluster>

와 같이 설정하시면 사용이 가능합니다.
 
위의 설정은 간략히 설정한 것입니다.
세부적인 옵션과 용도는 매뉴얼을 참고하시기 바랍니다.
 
 
 
----------------------------------------------------------------
안녕하세요
session 공유 대한 문의 드립니다.
 
현재 사용중이 jeus(jeus 5.0)에 컨테이너 3개를 설정하여
 
웹사이트를  3개를 운영 하려고 합니다. 웹 사이트 1 에  로그인후 session 을 유지 하면서
 
웹사이트 1~ 3 까지 공유하여 세션이 끈어지지 않게 할수 없는지 궁금합니다.


출처 :  http://technet.tmax.co.kr/kr/inquiry/qna/jeus/readBoardForm.do?bbsCode=qna_jeus&fc=inquiry&sc=inquiry_qna&tc=inquiry_qna_jeus&currentPage=4&seqNo=38491&categoryId=&productCode=&range=10&searchType=TITLE&searchText=%EA%B3%B5%EC%9C%A0
반응형

'WAS > JEUS' 카테고리의 다른 글

JAVA Melody Jeus 추가  (0) 2019.12.02
제우스에서 log4sql 사용하기  (0) 2011.03.15
JEUSMain.xml Datasource 암호 설정  (0) 2011.01.13
IBM JVM 튜닝 - 3  (0) 2009.08.24
제우스 환경 설정 부분  (0) 2009.03.05
반응형

IBM JVM의 heap 영역에는 LOA(Large Object Area)라는 영역이 있다.

기본적으로 전체 Heap size의 5%를 차지하는데, AP의 특성상 비교적 큰 객체(5MB이상)의 생성이

빈번한 경우에는 이 영역을 늘려줄 필요가 있다.

-Xloratio0.3

위와 같이 옵션을 적용하면 Java Heap 메모리중 LOA영역을 30% 잡게 된다.

위 옵션적용에 따른 GC로그 형태 변화는 다음과 같다.

1) 일반적으로 Heap 메모리만 설정한 경우
      위에서와 같이 전체 Java Heap 메모리와 free Heap 메모리만 나옵니다.
 jeusic@dtotch1[TEST] /sw/jeusic> java -verbose:gc -Xms64m -Xmx64m  a            
[ JVMST080: verbosegc is enabled ]
[ JVMST082: -verbose:gc output will be written to stderr ]
  <GC[0]: Expanded System Heap by 65536 bytes
  <GC(1): GC cycle started Tue Jun 12 10:32:59 2007
  <GC(1): freed 269696 bytes, 98% free (66059528/67041792), in 14 ms>
  <GC(1): mark: 7 ms, sweep: 1 ms, compact: 6 ms>
  <GC(1): refs: soft 0 (age >= 32), weak 0, final 1, phantom 0>
  <GC(1): moved 4571 objects, 489408 bytes, reason=4>
 
 
 
  2) -Xratio 옵션 적용한 경우
      위에서와 같이 전체 Java Heap 메모리와 free Heap 메모리이외에 LOA영역이 별도로 나옵니다.
 
jeusic@dtotch1[TEST] /sw/jeusic> java -verbose:gc -Xms64m -Xmx64m  -Xloratio0.2 a
[ JVMST080: verbosegc is enabled ]
[ JVMST082: -verbose:gc output will be written to stderr ]
  <GC[0]: Expanded System Heap by 65536 bytes
  <GC(1): GC cycle started Tue Jun 12 10:33:35 2007
  <GC(1): heap layout: (52651168/53633432) (13408360/13408360)  /0><== LOA 영역 별도 표시
  <GC(1): freed 269696 bytes, 98% free (66059528/67041792), in 14 ms>
  <GC(1): mark: 6 ms, sweep: 2 ms, compact: 6 ms>
  <GC(1): refs: soft 0 (age >= 32), weak 0, final 1, phantom 0>
  <GC(1): moved 4571 objects, 489408 bytes, reason=4>

Heap 메모리가 충분한대도 GC가 빈번하게 일어나고 있고,
또한 비교적 큰 객체(5MB정도)를 생성할때 빈번하게 Allocation Failure 가 일어나는 경우에
-Xratio 옵션을 적용하면 문제를 해결 할 수 있다.

 

 

출처 : http://ijbaek.tistory.com

반응형

'OS > AIX' 카테고리의 다른 글

AIX VNC 설정하기  (2) 2012.07.26
AIX 칩입 확인 해보자 !  (0) 2011.03.23
날짜 관련 얻기  (0) 2011.03.02
AIX 5.3 OPENSSH INSTALL  (0) 2011.02.16
bff 파일 설치 (AIX)  (0) 2010.12.08
반응형


-- BASH 쉘 (linux  계열)
lastweek=$(date --date "1 week ago" +%Y%m%d)

-- CSH 쉘(AIX 계열)

lastweek=`TZ=KORST+168 date +%Y%m%d`


ALL $LASTWEEK $TODAY ALL /BizMaster/data $TODAY

반응형

'OS > AIX' 카테고리의 다른 글

AIX 칩입 확인 해보자 !  (0) 2011.03.23
IBM JVM -Xloratio 옵션  (0) 2011.03.03
AIX 5.3 OPENSSH INSTALL  (0) 2011.02.16
bff 파일 설치 (AIX)  (0) 2010.12.08
IBM AIX 용 JAVA 다운로드 주소  (0) 2010.12.07
반응형

출처 : http://cafe.naver.com/prodba

sysdba로 접속하여 알아낸다...

또한 결과는 alert.log로 찍힌다 ~

$> sqlplus '/as sysdba'

sql>


create trigger logon_denied_to_alert
after servererror on database
declare
message varchar2(4000);
begin
    select 'ip='||sys_context('userenv','ip_address')||',host='||sys_context('userenv ','host')||',osuser='||SYS_CONTEXT('USERENV', 'OS_USER')
    into message
    from dual;
IF (ora_is_servererror(1017)) THEN
message := to_char(sysdate,'Dy Mon dd HH24:MI:SS YYYY') || ' logon denied for ' || message;
sys.dbms_system.ksdwrt(2,message);
end if;
end;
/
반응형

'Database > ORACLE' 카테고리의 다른 글

오라클 TRANSLATE  (0) 2011.03.31
오라클 자격증 신청 절차  (0) 2011.03.28
테이블 정의서 추출 생성 스크립트  (0) 2011.01.06
ORACLE SESSION Monitoring SQL  (0) 2011.01.05
오라클 공부 방법  (0) 2010.12.08
반응형

프로폐셔널 : proplus.ww
엔터프라이즈 : enterprise.ww

폴더안에 있는 config.xml 파일을 연다


<!-- <Display Level="none" CompletionNotice="no" SuppressModal="yes" AcceptEula="yes" /> -->
디스플레이 레벨을 NONE 으로  -  설치유형 선택 : 지금설치, 사용자 설치 버튼이 안나옴.

<!-- <PIDKEY Value="이곳이 시디키 넣는곳" /> -->

회사명과 이름을 적당히 넣는다.



메뉴 화면이 익숙치 않고 리소스를 많이 차지하는 느낌이 들어서 오피스 2007을 좋아하지는 않지만 많은 사람들이 사용하는 프로그램이다 보니 자동설치방법을 정리해 보겠습니다.

1. 오피스2007 파일을 구한 다음 적당한 폴더에 푼 후 command prompt 에서 아래그림처럼 "setup /admin"하고 엔터를 칩니다.

2.잠시기다리면 아래와 같은 화면이 나옵니다.
3. 그냥확인을 누른 후 아래화면에서 좌측부분의 "라이선싱 및 사용자 인터페이스"를 클릭합니다.
4. 제품키를 입력합니다. (여기서는 저작권법에 따라 보이지 않게 처리했습니다)
5. 동의함에 체크 클릭하고 수준표시는 기본으로 정합니다.
6. 아래그림처럼 모달 표시안함에 체크하고 좌측편에 있는 "기능 설치 상태 설정"을 클릭합니다.
7. 아래와 같은 화면이 나오면 "+" 표시를 눌러 기능을 펼칩니다.
8. 아래그림처럼 클릭한 후 사용하지 않는 프로그램을 모두 "사용할 수 없음"으로 바꿔 줍니다.
9. 보통은 아래 그림과 같이 워드, 엑셀, 파워포인트 정도만 사용합니다.
10.추가기능으로 바탕화면에 필요한 엑셀 아이콘을 만들어 보겠습니다. 다른 아이콘도 이 방법을 응용하시면 됩니다. 관리화면 왼편의 "바로가기 구성"을 클릭 -> 엑셀을 선택 -> 추가를 클릭합니다.
11. 아래그림처럼 대상은 "Microsoft Office Excel 2007" 로 위치는 "DesktopFolder"로 지정하고 확인을 클릭합니다.
12. 이제 지정도구는 마무리 하겠습니다. 저장을 클릭합니다.
13. 저장할 파일이름은 임의로 저장하면 되겠으나, 여기서는 추후에 적용할 자동설치를 위해 "set2007" 로 정하겠습니다.
14. 마지막으로 창을 닫으려고 하면 아래와 같은 화면이 나옵니다 .확인을 클릭하세요.
15. 폴더를 보면 아래 그림과 같이 set2007.MSP 파일이 보이면 자동설치를 위한 관리파일이 제대로 만들어진 것 입니다.
16. 설치시에 서비스팩2를 자동으로 설치되도록 하려면 Updates 폴더에 msp 파일을 넣어주기만 하면 자동적으로 설치가 됩니다.
여기서는 서비스팩2와 관련 핫픽스를 다운받을 수 있는 파일을 첨부합니다. 적당한 폴더에 o2k7up2.exe  파일을 풀고 배치파일을 실행하면 updates 폴더가 생기고 그 안에 msp 파일들이 생깁니다. 생성된 updates 폴더를 오피스 폴더로 복사하면 됩니다.

17. 마지막 문제는 이렇게 해도 자동설치가 안되고 아래그림과 같은 화면에서 "지금 설치"를 눌러줘야 진행이 된다는 것입니다.
편의상 자동으로 지금설치를 눌러주도록 오토잇으로 만든 autoset.exe  파일을 첨부합니다. 오피스 원본이 있는 폴더에 압축을 풀어주면 되겠습니다. 이 파일 때문에 위에서 관리파일 이름을 set2007.msp 로 정한 것입니다.

설명은 길지만 간단한 작업입니다. 성공하시길^^*

출처 : http://pd007.egloos.com/2959477
반응형

+ Recent posts