Skip to content

Ch11 sec03 batch architecture

0. 들어가기

11 장에서는 배치 프로세스 그 중에서도 마이크로서버에서 실행되며 비교적 작은 규모의 배치 프로세싱을 의미하는 마이크로 배치 프로세스에 대해 다룹니다. 특히 @Scheduled 애너테이션과 cron 표현식을 이용해 일정 간격으로 실행되어야 할 배치 작업을 스프링에서 처리하는 법을 이야기합니다.


그 중 가장 흥미로운 부분인 3절 배치 서버 아키텍처를 알아보겠습니다. 이 절에서는 HA 를 만족하는 배치 서버를 구성하는 일반적인 방법 세가지를 소개합니다.


1. 단독 배치 서버 구성

batch-server-1.excalidraw.png

  • 배치 처리를 전담으로 하는 서버를 두는 방식
  • HA 를 위해서 같은 코드베이스를 가진 여러대의 서버 인스턴스를 가질 수 있다.
  • 이때 Redis 의 분산락을 통해 동시에 하나의 서버에서만 배치 프로세스를 수행하도록 할 수 있다.
  • 이런 구성에서는 spring.main.web-application-type = none 속성을 통해 웹 애플리케이션 기능을 사용하지 않도록 명시하는 것이 좋다.

2. REST-API 서버에 뭉뚱그려서 구성

batch-server-2.excalidraw.png

  • 일반 웹 서버에 @Scheduled 를 메서드를 통해 간단하게 배치 기능을 추가하는 방식
  • 배치 프로세싱의 작업 크기가 커지면 REST-API 서버에 부하가 걸릴 수 있다.
  • 언제든지 별도의 배치 서버로 분리할 수 있도록 준비해야 한다.

3. 젠킨스를 활용한 구성

batch-server-3.excalidraw.png

  • 마지막으로 소개하는 구성 방식은 젠킨스를 활용한 방식입니다.
  • 젠킨스는 CI/CD 툴로 알려져 있지만, 등록된 인스턴스에 대해서 스케쥴링과 각종 명령어를 실행하는 기능도 제공합니다.
  • 이 방식은 다른 방식처럼 @Scheduled 애너테이션을 활용하는 것이 아니라 정기적으로 실행되야 할 배치 프로세스 작업을 REST-API 엔드포인트로 열어두고 젠킨스가 이를 정기적으로 호출하도록 합니다.
  • HA 를 위해 Redis 가 별도로 필요없다는 장점이 있지만, 젠킨스 자체가 단일 장애지점이 될 위험도 있습니다. (다중화 필요)

Last update: February 26, 2023
Created: December 27, 2022