Springboot + Batch를 활용한 오래된 로그 삭제

2023. 3. 19. 16:54BackEnd/Spring&Spring Boot

작성자알 수 없는 사용자

728x90
반응형

 

안녕하세요. 기깔나는 사람들에서 백앤드를 맡고있는 Hardy입니다.

 

배치를 사용하여 오래된 로그를 삭제하는 과업을 맡았습니다.

 

로그 삭제는 step의 chunk단위가 아닌 tasklet을 사용했으며 해당 글에서는 step에 관련된 내용은 없습니다.

 

아직 개념적으로 많이 부족하기에 계속 채워나갈 예정입니다.

 

그럼 시작하겠습니다.

 


Spring Batch 아키택처

 

  • 애플리케이션
    • 배치 처리에 필요한 사용자 코드 및 구성을 의미합니다.(배치 처리를 위해 배치에서 제공되는 클래스를 개발자가 사용하는 로직)
    • 애플리케이션이 코어와 인프라스트럭처를 감싸고 있는 것은 개발자의 코드 작성시 코어 , 인프라스트럭처에서 제공되는 클래스들을 사용하기 때문입니다.
  • 코어
    • 배치 영역을 구성하는 컴포넌트들의 모임
    • 흔히 알고 있는 Job , Step 인터페이스 ,JobLauncer등이 존재합니다.
  • 인프라스트럭처
    • reader , writer 및 재시작 관련 기능 제공 클래스 , 인터페이스들의 모임입니다.

 


Job과 Step의 관계

 

  • Job
    • 배치 처리 과정을 하나의 단위로 만들어 놓은 단위입니다.
    • job은 여러가지 스텝의 모음으로 이루어져 있습니다.
    • JobInstance
      • job이 설정이 되면 job은 수행될떄 마다 JobInstance를 생서합니다.
      • jobInstance의 주요 식별자는 JobParameter입니다.
      • 실패후 재시도에 경우에는 이미 식별자(jobParameter)가 존재하기 때문에 새롭게 생성하지 않습니다.
  • Step
    • Job을 구성하는 독립된 작업입니다.
    • step은 tasklet , chunk기반이 존재합니다.
    • tasklet은 단일 태스크를 수행하는 방식으로 Step을 실행할때 read/process/write를 하나의 작업으로 처리하는 방식입니다.
    • chunk는 chunk사이즈 만큼 데이터르 처리하며 , reader , processor,writer를 구성해서 사용합니다.

SpringBatch 관계도

  • JobLauncher
    • 잡을 실행 시키는 역할을 수행합니다
  • JobRepository
    • 배치수행과 관련된 수치데이터 , 잡, step의 상태를 유지 관리 하게 됩니다.
    • job , step이 실행이 된다면 실행정보  , 이에 필요한 데이터들이 저장이됩니다.
    • 해당 리포지토리는 batch가 수행되면 만들어지는 테이블로 부터 데이터를 읽어오게 됩니다.

 

SpringBatch 테이블

 

- 해당 테이블은 batch 수행시 자동으로 만들어지는 테이블입니다.

- 해당 디비에 스키마 및 컬럼을 보시면 쉽게 이해가 가능합니다.

 

 

여기까지 간단한 개념에 대해 알아보았습니다. 부족한 부분은 추후 업데이트를 진행하도록 하겠습니다.

 

Spring Batch 로그 삭제하기

- 해당 클래스는 간단하게 로그를 삭제하는 Job , Step Config입니다.

- @JobScope , @StepScope는 어플리케이션 구동 시점이아닌 빈의 실행시접에 아래 메소드가 실행이 됩니다.

 

- 해당 클래스는 직접적으로 로그를 삭제하는 tasklet 설정입니다. 

 

해당 코드까지 만들어졌다면 간단한 로그 삭제 배치 작업이 이루어집니다.

 

만약 등록된 job이 원하는 시점이 아니라 서버 구동 시점에 전부 실행되는걸 원치 않는다면 application.yml에 아래 설정을 넣어 주시면 됩니다.

spring:
  batch:
    job:
      enabled: false

 

 


 

 

 

 

728x90
반응형