기록하는 습관

배치, 스케줄러 본문

개발/Research

배치, 스케줄러

로그뉴 2022. 7. 12. 16:10

Spring Batch


  • 엔드의 배치처리 기능을 구현하는 데 사용하는 프레임워크
  • 장점 
    • 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 기능을 제공
    • 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공
    • 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행
    • 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생

 

참고

  • chunk 지향 프로세싱
    • transaction 경계 내에서 chunk 단위로 데이터를 읽고 생성하는 프로그래밍 기법
  • tasklet
    • 단일 작업에 사용합니다
    • 일반적으로 Resource 삭제하거나 단순 쿼리를 질의하는 등 단일 작업을 수행합니다
  •  chunk
    • 복잡한 작업에 사용합니다
    • Reader, Processor, Writer 3가지 단계로 구성됩니다
    • Reader, Writer는 필수이며 Processor는 선택적으로 사용됩니다
    • 즉, 데이터 읽기, 가공, 저장의 순으로 처리됩니다

Spring Cloud Task


 

참고

Spring Cloud란?

airflow


  • 복잡한 워크플로우를 프로그래밍 방식으로 작성해서, 스케줄링하고 모니터링할 수 있는 플랫폼
  • 여러가지 태스크들(데이터셋 생성, 모델 학습 등)을 일련의 그래프로 연결하고 스케줄링, 모니터링 등 파이프라인 관리를 위한 다양한 기능을 제공하고 있는 Workflow Management Platform
  • 장점/특징
    • 서로에 대한 의존성을 표현할 수 있음
    • 스크립트가 실패했을 때 알람을 보내 확인하고 쉽게 수정 후 재시도할 수 있음
  • https://data-engineer-tech.tistory.com/30
  • https://www.bucketplace.co.kr/post/2021-04-13-버킷플레이스-airflow-도입기/

 

@Scheduled()


  • spring-boot 에서 자체적으로 지원하는 Scheduler
  • quartz처럼 정밀한 스케줄러 관리는 할 수 없음.

 

참고

Quartz


  • Clustering 기능을 제공한다. 다만, 완벽한 Cluster간 로드 분산은 안됨.
  • Quartz에서는 Job 관리가 쉽지 않음. 전반적인 scheduler 관리를 위해 UI를 따로 만들어야 함. → Jenkins를 이용하면 UI 사용 가능.
  • spring batch / quartz 리서치

Jenkins


  • 장점
    • 대시보드 / 이력관리 / 로그인 / 계정 권한 관리 등의 기본적인 관리 기능 지원
    • 다양한 Job 실행 환경
    • 파이프라인
  • 단점  
    • 파일 기반의 설정 정보 
      • Jenkins 설정 정보를 비롯한, Job 실행 이력, Job 설정 정보 등이 모두 파일로 관리된다. 
    • 빈약한 검색 기능 
      • 설정들이 모두 파일로 되어 있기 때문에 검색 기능이 파일 검색 기반이 된다. 
    • 백업 & 이중화의 어려움 
      • 파일 기반이다 보니 rsync 등으로 백업 서버로 계속 동기화 하지 않는 이상 주기적인 외부 파일 서버로 디렉터리 통째 업로드 하는 방법으로 백업을 진행해야 한다. 
  • https://jojoldu.tistory.com/489

 

Teamcity


  • JetBrains의 CI 도구
  • 장점
    • 파이프라인 / 스케줄링 등 Jenkins가 지원하는 대부분의 기능을 동일하게 지원한다.
    • 설정 정보들이 DB로 관리되고 있다.
      • 백업/이중화는 DB만 이루어지면 된다.
      • Teamcity는 어디든 설치만해서 바로 DB 연결만 하면 똑같은 Teamcity 환경이 구성된다.
      • 여러대의 서버를 운영한다고 해도 스케줄링/설정 등에 대한 관리 요소가 전혀 없다.
      • DB에서 다 관리중이니, 각 TeamCity 서버에 대한 동기화 걱정이 없다.
      • 당연히 별도의 기능이 필요한 경우 API를 사용해도 되고, 직접 Teamcity 설정 정보를 담고 있는 DB에 Query를 날려서 사용해도 된다.
  • 단점
    • 일정 규모이상에서는 유료 플랜이 필요함.
    • 결국은 CI/CD 도구이다보니 배치쪽으로 발전 방향이 향하고 있진 않다.
    • 플러그인 생태계가 Jenkins에 비해 약하다.

 

Spring Cloud Data Flow


Cloud Foundry 및 Kubernetes에서 스트리밍 및 일괄 데이터 처리 파이프라인을 구축하기 위한 마이크로서비스 기반 툴킷

  • 웹 대시보드, REST API, JAVA DSL, console shell 다양한 인터페이스로 제공 
  • 로컬, Cloud Foundry 및 Kubernetes 위에서 설치 및 운영 가능
    • 스케줄링 기능은 Cloud Foundry 및 Kubernetes에서만 사용 가능, 일반 서버에서는 X
  • SCDF의 상태 및 데이터 관리는 관계형 DB에서 관리
    • 기본적으로 h2 DB와 연동되지만 실행시 데이터가 초기화 되기 때문에 운영에서 사용시 MySQL, MariaDB와 같은 관계형 DB를 연결해주어야 함
    • 지원되는 데이터베이스는 H2, HSQLDB, MySQL, Oracle, Postgresql, DB2 및 SqlServer가 있음
  • https://programmer-chocho.tistory.com/13

'개발 > Research' 카테고리의 다른 글

[Research] Springfox Swagger2 -> Springdoc OpenAPI 3  (0) 2022.07.12
tomcat vs. hikaricp  (0) 2022.07.12
Mybatis vs. JPA  (0) 2022.07.12
Java  (0) 2022.07.12
Spark, Hadoop  (0) 2022.07.12
Comments