제니퍼를 활용해서 스프링배치 모니터링 하기
이번 글은 제니퍼를 활용해서 스트링 배치를 사용하는 애플리케이션 트랙잭션을 추적하는 방법을 소개합니다.
1. 스프링 배치 기본 작동 구조
일단 스프링 배치의 기본 작동 구조를 살펴 보겠습니다. 스프링 배치는 기본적으로 잡(Job)을 기준으로 독립된 작업 단위인 스텝(Step) 단위로 필요한 로직을 구현해서 실행하고 있습니다.
스텝(Step)에는 태스크릿(Tasklet) 기반 스텝(step)과 청크(Chunk) 기반 스텝(step)이라는 두 가지 유형이 있습니다.
태스크릿(tasklet) 기반 스텝(step)을 사용하고 싶으면 Tasklet을 구현하면 되는데, 스텝이 중지될 때까지 execute 메서드가 계속 반복해서 수행하게 됩니다.
태스크릿 기반 스텝은 초기화, 저장 프로시저 실행, 알림 전송 등과 같은 잡에서 일반적으로 많이 사용되고 있습니다.
청크(chunk) 기반 스텝(step)은 태스크릿(tasklet) 구조에 비해서 조금 더 복잡한 구조를 가지고 있으며, 아이템 기반의 처리에 사용합니다.
청크(chunk) 기반에서 스텝(step)는 ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 스텝으로 구성될 수 있습니다.
각 스텝(step)은 서로 독립적으로 처리될 수 있도록 분리되어 있습니다. 스텝을 분리함으로써 유연성, 유지 보수성, 확장성, 신뢰성을 확보 할 수 있습니다
2. 제니퍼를 통한 스프링 배치 트랜잭션 모니터링 하기
제니퍼에서 스프링 배치 모니터링 옵션을 활성화 하면 제니퍼는 앞서 소개한 스텝(step)단위로 배치실행을 감지하고 각 스텝별 트랜잭션을 모니터링 합니다.
트랜잭션이 시작되고 트랜잭션 내부에서 스프링배치로 실행되는 개별 스텝(step)을 실행된 순서대로 감지하고 전체 트랜잭션을 추적하게 됩니다.
아래의 소스는 제니퍼에서 어떻게 스프링 배치 스텝(step)이 감지되고 모니터링되어지는 보기 위한 샘플코드(sample code) 입니다.
시작 스텝(step)부터 종료스텝(step)까지 총 6단계의 스텝(step)를 정의하고 각 스텝별로 별도의 SQL이 수행 되도록 샘플코드를 작성해 보았습니다.
@Bean public Job chunkBasedJob() { return jobBuilderFactory.get(JOB_NAME).incrementer(new RunIdIncrementer()). // start(step("Start Step")). // next(step("Step One")). // next(step("Step Two")). // next(chunkStep("chunk first Step", 10)). // next(chunkStep("chunk Second Step", 100)). // next(step("End Step")). // build(); }
작성된 스프링배치 샘플코드가 제니퍼를 통해서 어떻게 모니터링 되어지는지 보기 위해서 에이전트 고급옵션에서 enable_spring_batch옵션을 true로 변경합니다.
위와 같이 설정하고 스트링 배치잡(batch job)을 실행하는 트랜잭션을 실행하면 아래 그림과 같이 트랜잭션 내에서 수행된 잡(job)이름과 상세 수행 내역을 볼 수 있습니다.
특히 X-View의 타임라인(timeline)을 통해 개별 실행된 잡(job)이 전체 트랜잭션에서 차지하는 시간을 보여 주기 때문에 때문에 잡(job) 성능을 이해하는 데 많은 도움이 됩니다.
그리고 각 잡(job)을 실행하는 배치잡(batch job)이름을 트랜잭션 네이밍으로 사용하고 싶다면 제니퍼에이전트 고급옵션에서 service_naming_by_job_parameter옵션에 아래와 같이 JobName을 설정합니다.
이렇게 설정 한 후 다시 스프링 배치 트랜잭션을 실행하면 아래의 그림과 같이 잡(job)이 실행된 배치잡(batch job)이름을 트랜잭션 이름에서 함께 확인할 수 있습니다.
이렇게 간단하게 제니퍼 옵션 설정만으로 스프링 배치 트랜잭션을 모니터링하고 성능상의 병목지점을 확인할 수 있습니다.
좀 더 상세한 스프링배치 모니터링에 대한 기술정보 및 배치 잡 (batch job) 프로파일링에 대한 방법이 궁금하시면 언제든지 tech@jennfiersoft.com으로 문의해 주십시오.