TECH ARTICLE

제니퍼를 활용해서 스프링배치 모니터링 하기

이번 글은 제니퍼를 활용해서 스트링 배치를 사용하는 애플리케이션 트랙잭션을 추적하는 방법을 소개합니다.

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를 통한 스프링 잡(job)트랜잭션 트레이스 예제
상단의 애플리케이션 리스트 테이블에서 수행된 잡(job)의 이름을 확인한다.
프로파일 목록에서 예제코드의 잡(Job)이 수행한 스텝(Step) 프로파일을 확인한다.

특히 X-View의 타임라인(timeline)을 통해 개별 실행된 잡(job)이 전체 트랜잭션에서 차지하는 시간을 보여 주기 때문에 때문에 잡(job) 성능을 이해하는 데 많은 도움이 됩니다.

중간의 타임라인 차트를 통해 다른 트랜잭션 대비 배치잡(batch job)의 응답시간 점유율을 분석할수 있다.

그리고 각 잡(job)을 실행하는 배치잡(batch job)이름을 트랜잭션 네이밍으로 사용하고 싶다면 제니퍼에이전트 고급옵션에서 service_naming_by_job_parameter옵션에 아래와 같이 JobName을 설정합니다.

service_naming_by_job_parameter 설정

이렇게 설정 한 후 다시 스프링 배치 트랜잭션을 실행하면 아래의 그림과 같이 잡(job)이 실행된 배치잡(batch job)이름을 트랜잭션 이름에서 함께 확인할 수 있습니다.

X-View팝업에서 배치잡(batch job) 애플리케이션명에 설정된 이름이 출력되는것을 확인할 수 있다.

이렇게 간단하게 제니퍼 옵션 설정만으로 스프링 배치 트랜잭션을 모니터링하고 성능상의 병목지점을 확인할 수 있습니다.

좀 더 상세한 스프링배치 모니터링에 대한 기술정보 및 배치 잡 (batch job) 프로파일링에 대한 방법이 궁금하시면 언제든지 tech@jennfiersoft.com으로 문의해 주십시오.

Next

Contact Us

안녕하세요? 제니퍼소프트입니다.
기술 문의의 경우 질문자의 회사/이름/연락처를 본문에 기술해 주셔야만 원할한 지원이 가능합니다.
보내주신 문의 사항을 검토하여 빠른 시일 내에 답변해 드리겠습니다.

  • Chris
  • Irene

메일을 보냈습니다.

메일 전송이 완료되었습니다.
빠른 시일 내에 답변드리겠습니다.
감사합니다.
제니퍼소프트 웹사이트는 쿠키를 사용합니다. 쿠키에 대한 자세한 정보 및 삭제 방법은 제니퍼소프트의 개인정보처리방침을 참고하시기 바라며 본 사이트를 계속해서 이용하는 것은 제니퍼소프트의 쿠키 사용에 동의함을 의미합니다.