メインコンテンツまでスキップ

커스터마이징

본 장에서는 커스터마이징 프로젝트 작성에 관하여 설명한다.

시뮬레이터는 특정소스에 관하여 커스터마이징이 가능하다. 커스터마이징 프로젝트를 lib에 추가하는것만으로 간단히 커스터마이징소스를 실행할 수 있다.

자바 프로젝트를 만든 후, simulator-server-x.x.x.jar를 빌드패스에 추가하여 원하는 로직을 개발한다. 개발을 완료한 후, jar파일로 추출하고 해당 프로젝트를 인식할 수 있도록 lib에 추가한다.

커스터마이징 해야할 소스는 크게 아래 2가지이다.

1. 외부배포로직 커스터마이징

시뮬레이터는 화면으로 일일이 전문을 등록하기 쉽지않으므로 외부배포로직을 통하여 한번에 배포받는 경우가 많다. 이때, 어떠한 형식으로 json전문을 만들어야하며 어떠한 url로 요청를 받을것인지에 관한 로직이 바로 외부배포로직이다.

앞장에서 언급하였듯이 사이트마다 요구되는 json전문 형식이 다르고 사이트마다의 의도하는바가 다르므로 외부배포로직의 커스터마이징 필수적이다. 시뮬레이터는 사이트에서의 커스터마이징 편의를 위하여 샘플예시를 만들어놓았다. simulator.extension 프로젝트의 eims패키지의 샘플을 참조하면 된다.

2. 사용자프로그램 커스터마이징

시뮬레이터관리 > 서버시뮬레이터에서 사용되는 사용자프로그램을 커스터마이징한다.

자바 파일을 생성한뒤 UserDefinedInterceptor를 구현하여 코드를 작성한다. (해당 인터페이스는 simulator-server-x.x.x.jar에서 참조) simulator.extension 프로젝트의 customizing패키지의 샘플을 참조하면된다.

아래의 예시는 요청받은 전문중에 SRRR로 바꾸는 예시이다.

public class ChangeMsgclssCdInterceptor implements UserDefinedInterceptor {

final Logger logger = LoggerFactory.getLogger(getClass());

@Override
public boolean preHandle(Exchange exchange) throws InterruptedException {
logger.debug("### postHandle : in Data : {}", exchange.getIn());
logger.debug("### postHandle : out Data : {}", exchange.getOut());
return true;
}


@Override
public boolean postHandle(Exchange exchange) throws InterruptedException, UnsupportedEncodingException {
logger.debug("### postHandle : in Data : {}", exchange.getIn());
byte[] req = (byte[]) exchange.getIn();
String requestMessage = new String(req, "EUC-KR");

// 응답 변경
String responseMessage = requestMessage.replace("\"S\"", "\"RRR\"");

byte[] res = responseMessage.getBytes("EUC-KR");
exchange.setOut(res);
logger.debug("### postHandle : out Data : {}", exchange.getOut());

return true;
}

}
info

사용자프로그램 패키지명은 설정파일에 따로 설정한다.

2. application.properties

config/system.properties

...

### User defined class
# extension.package - user defined program Class package set
extension.package=simulator.extension.customizing

해당 소스를 작성한 후, 서버시뮬레이터 특정 가상거래의 사용자프로그램에 ChangeMsgclssCdInterceptor값을 입력하면 해당 가상거래는 커스터마이징 로직을 실행한다.