이미지 로그 설정
본 장에서는 ProObject 이미지 로그 기능의 기본적인 설정과 커스터마이징하는 방법에 대해서 설명한다.
1. 개요
이미지 로그는 ProObject의 애플리케이션 속한 서비스 그룹에서 서비스 수행 중 재시도와 거래 처리 데이터를 담기 위해 사용된다. 입출력 정보를 그대로 전달함으로써 서비스가 실패하는 경우 다시 서비스의 재시도를 시도한다.
실패한 거래의 경우 입출력 정보를 함께 조회하면 디버깅에 도움을 줄 수 있으며 잘못된 요청이 어떻게 들어왔는지 검사할 수도 있고 부정한 방법으로 들어온 요청의 내용도 확인할 수 있다. DB에 장애가 발생한 경우에는 file(${PROOBJECT_HOME}/logs/Imagelog/image.log)에 이미지 로그가 저장된다.
이미지 로그 기능에 대한 설정은 애플리케이션과 런타임으로 나눠서 설정해야 한다. 각 설정 항목과 방법은 각 절의 설명을 참고한다.
-
애플리케이션 메타 파일(${APP_HOME}/config/application.xml)을 설정한다.
-
이미지 로그에 대한 설정을 한다. 환경설정은 ${APP_HOME}/config/application.properties에 저장한다.
-
이미지 로그 정보를 저장하기 위해서 IMAGE_LOG 테이블을 생성한다.
2. 애플리케이션 메타 설정
이미지 로깅 기능을 사용하기 위해서 이미지 로깅 방식과 JDBC 타입을 설정해야 한다.
애플리케이션 메타는 아래 경로에 XML 형식으로 작성한다.
${APP_HOME}/config/application.xml
application.xml은 반드시 아래의 예제와 동일한 구조로 작성해야 한다.
<ns4:image-log>
<ns4:sync-type>SYNC</ns4:jdbc-sync-type>
</ns4:image-log>
태그 | 설명 |
---|---|
<image-log> |
이미지 로깅 설정을 관리한다. |
<sync-type> |
이미지 로깅의 처리 방식을 설정한다.
|
<handler> |
이미지 로깅에 관련된 실제 로직이 담긴 클래스를 지정한다. 지정하지 않을 경우 기본으로 제공되는 이미지 로깅 핸들러가 동작한다. 사용자가 작성한 이미지 로깅 클래스를 작성하는 방법에 대한 자세한 내용은 "이미지 로깅 핸들러 작성"을 참고한다. |
이미지 로깅 핸들러 작성
ProObject에서 기본으로 제공되는 이미지 로깅 핸들러를 사용하지 않을 경우 다음의 방법으로 이미지 로깅 핸드러를 작성해서 사용할 수 있다.
-
소스 코드 작성
com.tmax.proobject.model.imagelog.ImageLogHandler 인터페이스를 implements하여 직접 DB에 insert하는 로직을 작성해서 이미지 로그를 남길 수도 있다.
public class MyImageLogHandler implements ImageLogHandler { @Override public void handleBeforeService(ServiceName service, RequestContext requestContext, DataObject input, long guid) { //사용자 코드 직접 작성하는 영역 : : } @Override public void handleAfterService(ServiceName service, RequestContext requestContext, DataObject input, DataObject output, Throwable e, long guid) { //사용자 코드 직접 작성하는 영역 : : } }
handleBeforeService는 서비스가 수행되기 전에 로그를 남길 수 있게 하고, handleAfterService는 서비스가 수행되고 난 후에 로그를 남길 수 있다.
다음은 각 API에 전달되는 파라미터에 대한 설명이다.
파라미터 설명 service
서비스 이름을 얻어올 수 있는 객체이다.
full name 및 애플리케이션, 서비스 그룹 이름 등을 얻을 수 있다.
requestContext
서비스가 요청되었을 때 요청과 관련된 정보들을 담고 있는 객체이다.
헤더 및 메시지 타입 등을 얻을 수 있다.
input
데이터 오브젝트 타입으로 input 값을 얻을 수 있다.
output
서비스가 수행되고 난 후 데이터 오브젝트 타입으로 output 값을 얻을 수 있다.
e
에러가 발생하는 경우 Throwable 객체를 얻을 수 있다.
guid
웹 트랜잭션 ID를 얻을 수 있다.
-
작성한 뒤 핸들러 클래스와 DB 처리를 위한 데이터 오브젝트, 데이터 오브젝트 팩토리는 다음의 경로에 배포한다.
${APP_HOME}/common/lib
-
생성된 클래스 정보를 application.xml에 다음과 같이 설정한다.
<ns4:image-log> <ns4:handler>com.tmax.MyImageLogHandler</ns4:handler> </ns4:image-log>
3. 런타임 설정
애플리케이션 전역에서 사용하는 이미지 로깅 기능을 사용하기 위해서 기본 정보를 설정해야 한다.
이미지 로그에 대한 환경설정은 아래 경로에 properties 형식으로 작성한다.
${APP_HOME}/config/application.properties
다음은 이미지 로깅 기능과 관련된 항목에 대한 설명이다.
APPLICATION_IMAGELOG_ENABLE = [true|false] APPLICATION_IMAGELOG_BEFORE_POSTPROCESSOR = [true|false] APPLICATION_IMAGELOG_BEFORE_PREPROCESSOR = [true|false] APPLICATION_IMAGELOG_SERVICEGROUP = imagelog_servicegroup APPLICATION_IMAGELOG_SYNC_TRANSACTION = [true|false] APPLICATION_IMAGELOG_DATASOURCE = imagelog_datasource APPLICATION_IMAGELOG_TABLE_NAME = imagelog_table_name
항목 | 설명 |
---|---|
APPLICATION_IMAGELOG_ENABLE |
현재 노드에서 이미지 로깅을 활성화할지 여부를 지정한다.
|
APPLICATION_IMAGELOG_BEFORE_POSTPROCESSOR |
현재 노드에서 이미지 로깅 처리될시점을 post processor의 전/후로 설정한다.
|
APPLICATION_IMAGELOG_BEFORE_PREPROCESSOR |
현재 노드에서 이미지 로깅 처리될 시점을 pre processor 전/후로 설정한다.
|
APPLICATION_IMAGELOG_SERVICEGROUP |
현재 노드에서 이미지 로깅을 기록할 서비스 그룹 이름을 지정한다. 지정하지 않을 경우 현재 애플리케이션에 속한 모든 서비스 그룹이 선택된다. (기본값: NULL) |
APPLICATION_IMAGELOG_SYNC_TRANSACTION |
현재 노드에서 Sync 이미지 로깅을 활성화했을 경우 서비스 단위와 Sync 이미지 로깅을 함께 트랜잭션으로 묶을지 여부를 지정한다.
|
APPLICATION_IMAGELOG_DATASOURCE |
이미지 로깅을 사용하는 경우 현재 노드에서 사용할 데이터소스 이름을 설정한다. (기본값: NULL) 기본 이미지 로깅 기능을 활성화했을 경우 반드시 지정해야 한다. |
APPLICATION_IMAGELOG_TABLE_NAME |
이미지 로깅을 사용하는 경우 데이터를 저장할 테이블의 이름을 설정한다. (기본값: IMAGE_LOG) 지정하지 않는 경우에는 기본값인 IMAGE_LOG 테이블에 이미지 로깅 데이터가 저장된다. |
다음은 이미지 로그 기능을 활성화하고 데이터소스 이름을 'tibero6’로 설정한 예이다.
APPLICATION_IMAGELOG_ENABLE =true APPLICATION_IMAGELOG_DATASOURCE = tibero6
4. 이미지 로그 테이블 생성
ProObject에서 기본으로 제공하는 이미지 로깅 기능을 사용하기 위해서는 데이터베이스에 테이블을 생성해야 한다.
-
IMAGE_LOG 테이블
다음은 IMAGE_LOG 테이블의 각 컬럼에 대한 설명이다.
컬럼 설명 APPLICATION
애플리케이션 이름이 저장된다. (타입: VARCHAR)
SERVICEGROUP
서비스 그룹 이름이 저장된다. (타입: VARCHAR)
SERVICE
서비스 이름이 저장된다. (타입: VARCHAR)
HEADER
서비스의 헤더가 byte 타입으로 저장된다. (타입: BLOB)
DATA
서비스의 input, output, error 메시지가 byte 타입으로 저장된다. (타입: BLOB)
INSERT_TIME
insert된 시점의 시간이 저장된다. (타입: NUMBER)
STATUS
현재 상태가 저장된다. (타입: VARCHAR)
-
input
-
output
-
error
DATATYPE
메시지의 타입이 저장된다. (타입: VARCHAR)
-
NONE
-
JSON
-
FLD
-
XML
-
DELIMITER
-
SERIALIZE
GUID
웹 트랜잭션 ID가 저장된다. (타입: NUMBER)
HEADERSTRING
ProObject 헤더 전문이 string 타입으로 저장된다. (타입: VARCHAR)
DATASTRING
서비스의 input, output, error 메시지가 string 타입으로 저장된다. (타입: VARCHAR)
-