이미지 로그 설정

본 장에서는 ProObject 이미지 로그 기능의 기본적인 설정과 커스터마이징하는 방법에 대해서 설명한다.

1. 개요

이미지 로그는 ProObject의 애플리케이션 속한 서비스 그룹에서 서비스 수행 중 재시도와 거래 처리 데이터를 담기 위해 사용된다. 입출력 정보를 그대로 전달함으로써 서비스가 실패하는 경우 다시 서비스의 재시도를 시도한다.

실패한 거래의 경우 입출력 정보를 함께 조회하면 디버깅에 도움을 줄 수 있으며 잘못된 요청이 어떻게 들어왔는지 검사할 수도 있고 부정한 방법으로 들어온 요청의 내용도 확인할 수 있다. DB에 장애가 발생한 경우에는 file(${PROOBJECT_HOME}/logs/Imagelog/image.log)에 이미지 로그가 저장된다.

이미지 로그 기능에 대한 설정은 애플리케이션과 런타임으로 나눠서 설정해야 한다. 각 설정 항목과 방법은 각 절의 설명을 참고한다.

  1. 애플리케이션 메타 설정

    애플리케이션 메타 파일(${APP_HOME}/config/application.xml)을 설정한다.

  2. 런타임 설정

    이미지 로그에 대한 설정을 한다. 환경설정은 ${APP_HOME}/config/application.properties에 저장한다.

  3. 이미지 로그 테이블 생성

    이미지 로그 정보를 저장하기 위해서 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>

이미지 로깅의 처리 방식을 설정한다.

  • SYNC (기본값)

  • ASYNC

<handler>

이미지 로깅에 관련된 실제 로직이 담긴 클래스를 지정한다. 지정하지 않을 경우 기본으로 제공되는 이미지 로깅 핸들러가 동작한다.

사용자가 작성한 이미지 로깅 클래스를 작성하는 방법에 대한 자세한 내용은 "이미지 로깅 핸들러 작성"을 참고한다.

이미지 로깅 핸들러 작성

ProObject에서 기본으로 제공되는 이미지 로깅 핸들러를 사용하지 않을 경우 다음의 방법으로 이미지 로깅 핸드러를 작성해서 사용할 수 있다.

  1. 소스 코드 작성

    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를 얻을 수 있다.

  2. 작성한 뒤 핸들러 클래스와 DB 처리를 위한 데이터 오브젝트, 데이터 오브젝트 팩토리는 다음의 경로에 배포한다.

    ${APP_HOME}/common/lib
  3. 생성된 클래스 정보를 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

현재 노드에서 이미지 로깅을 활성화할지 여부를 지정한다.

  • true : 이미지 로깅 기능이 활성화된다. 이미지 로깅 기능을 사용하기 위해서 필수로 설정해야 하는 항목이다.

  • false : 이미지 로깅 기능이 사용하지 않는다. (기본값)

APPLICATION_IMAGELOG_BEFORE_POSTPROCESSOR

현재 노드에서 이미지 로깅 처리될시점을 post processor의 전/후로 설정한다.

  • true : 이미지 로깅 기능이 post processor 이전에 실행된다.

  • false : 이미지 로깅 기능이 post processor 이후에 실행된다. (기본값)

APPLICATION_IMAGELOG_BEFORE_PREPROCESSOR

현재 노드에서 이미지 로깅 처리될 시점을 pre processor 전/후로 설정한다.

  • true : 이미지 로깅 기능이 pre processor 이전에 실행된다.

  • false : 이미지 로깅 기능이 pre processor 이후에 실행된다. (기본값)

APPLICATION_IMAGELOG_SERVICEGROUP

현재 노드에서 이미지 로깅을 기록할 서비스 그룹 이름을 지정한다.

지정하지 않을 경우 현재 애플리케이션에 속한 모든 서비스 그룹이 선택된다. (기본값: NULL)

APPLICATION_IMAGELOG_SYNC_TRANSACTION

현재 노드에서 Sync 이미지 로깅을 활성화했을 경우 서비스 단위와 Sync 이미지 로깅을 함께 트랜잭션으로 묶을지 여부를 지정한다.

  • true : 서비스 단위와 트랜잭션으로 묶인다.

  • false : 서비스 단위와 트랜잭션으로 묶지 않는다. (기본값)

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)