Spring Cloud Data Flow와 Kubernetes를 활용한 효과적인 배치 구동 환경 구축

Spring Cloud Data Flow와 Kuebernetes 연동하여 효과적인 배치 구동 환경에 대해 알아봅시다!

🚀 들어가기

배치 작업은 현대 시스템의 핵심 부분으로, 특히 정산, 로그 분석, 데이터 마이그레이션 같은 작업들은 대용량 데이터를 효율적으로 처리해야 합니다. 이러한 배치 작업의 효율적인 관리와 모니터링은 시스템의 안정성과 성능에 직접적인 영향을 미칩니다. 이 글에서는 Spring Cloud Data Flow(SCDF)Kubernetes를 연동하여 효과적인 배치 구동 환경을 구축하는 방법에 대해 알아보겠습니다.

1. 기존 배치 스케줄링 도구의 한계

많은 배치 작업의 스케줄링을 위해 크론(Cron), 젠킨스(Jenkins), 에어플로우(Airflow) 등을 사용해 배치를 스케줄링하고 있습니다.

이러한 도구들은 다음과 같은 기능을 제공합니다:

  • 배치 실행 요청
  • 스케줄 관리
  • 배치 애플리케이션 관리
  • 워크플로우 관리 (배치 실행 순서 제어)
  • 모니터링 제공
  • 히스토리 저장 (메타 테이블)

그러나 이러한 전통적인 스케줄링 도구들은 다음과 같은 두 가지 주용한 한계점을 가지고 있습니다.

1-1. 자원 관리의 어려움

배치 작업은 특정 시간에만 동작하고, 완료되면 프로세스가 종료되어 자원을 운영체제에 반납합니다. 이로 인해 하루 중 시간대별로 자원 사용률이 크게 달라질 수 있습니다.

예를 들어:

  • 새벽 1시: 실행 중인 배치가 없어 자원이 남음
  • 오전 9시: 4개의 배치가 동시에 실행되어 자원 사용률이 높음
  • 오후 1시: 2개의 배치만 실행되어 자원 사용률이 중간 수준
  • 오후 6시: 다시 1개의 배치만 실행되어 자원이 남음

배치 작업이 항상 인스턴스로 떠 있는 것이 아니기 때문에, 자원 사용량을 예측하고 관리하는 것이 어렵습니다. 특히 동시에 여러 배치가 실행될 때는 자원 부족으로 OOM(Out of Memory) 오류가 발생할 수 있습니다.

1-1. 배치 상태 파악의 어려움

배치 작업의 각 단계는 일반적으로 매우 긴 시간이 소요됩니다. 예를 들어, 하나의 스텝이 시작되고 10분 이상 지나고나서야 완료되는 경우가 흔합니다. 대부분의 스케줄링 도구는 로그를 볼 수 있지만, 다음과 같은 한계가 있습니다:

  • 배치 작업의 경우 로그 정보가 빈약한 경우가 많음
  • 로그만으로는 서비스 상태를 직관적으로 파악하기 어려움
  • 시각적인 모니터링 부재

이러한 한계를 극복하고자 Spring Cloud Data Flow를 도입하는 것이 효과적입니다.

2. Spring Cloud Data Flow 소개

Spring Cloud Data Flow(SCDF)Spring Boot 기반의 데이터 통합 및 실시간 데이터 처리 애플리케이션을 개발하고 배포하기 위한 도구입니다.

SCDF는 다음과 같은 주요 기능을 제공합니다:

  • 통합된 개발 및 관리 환경: 데이터 파이프라인과 배치 작업의 개발, 배포, 관리를 위한 통합 환경
  • 시각적 디자인 인터페이스: 데이터 흐름 및 배치 작업을 시각적으로 설계
  • 확장성: 다양한 런타임 플랫폼(Local, Cloud Foundry, Kubernetes) 지원
  • 모니터링 및 관리: 작업 실행 상태 및 로그 모니터링, 작업 스케줄링

SCDF는 데이터 파이프라인 종류에 따라 두 가지 유형을 지원합니다:

  1. 스트림(Stream): 실시간 데이터 처리를 위한 파이프라인
  2. 태스크(Task): 배치 작업을 지원하는 파이프라인

⭐️ 배치 작업을 위한 SCDF Task기존 스케줄링 도구의 모든 기능과 더불어 다음 두 가지 핵심 장점을 제공합니다:

  1. Kubernetes와의 완벽한 연동: 컨테이너를 오케스트레이션하는 것처럼 배치를 오케스트레이션
  2. Spring Batch와의 완벽한 호환: 유용한 배치 정보를 시각적으로 모니터링 가능

3. Kubernetes와의 연동을 통한 자원 관리 최적화

Spring Cloud Data FlowKubernetes와 연동하면 다음과 같은 이점이 있습니다:

3-1. 배치 오케스트레이션의 장점

  • 독립적인 실행: 다수의 배치가 상호 간섭 없이 실행 가능
  • 리소스 컨트롤: Kubernetes에서 리소스의 사용과 반납을 조율하여 동시에 많은 배치가 실행되더라도 안정적인 자원 관리 가능
  • 스케일링: 필요에 따라 배치 작업의 자원을 동적으로 조정 가능

3-2. SCDF와 Kubernetes의 통합 기능

Spring Cloud Data FlowKubernetes의 통합은 다음과 같은 기능을 제공합니다:

  1. 스케줄 관리: Kubernetes의 CronJob을 활용한 스케줄 관리
  2. 애플리케이션 실행 및 배포: Kubernetes 요청을 통한 애플리케이션 실행 및 배포
  3. 워크플로우 관리: 배치 실행 순서를 그래프 형태로 설정 가능
  4. 자원 설정: CPU, 메모리 등 자원 할당 조정 가능
    • 데이터 처리량이 많거나 멀티스레드 작업이 필요한 경우 더 많은 자원 할당 가능
  5. 모니터링:
    • 애플리케이션 로그 제공
    • Pod 상태 모니터링
    • 배치 상태 및 결과 모니터링

3-3. 그래프 기반 태스크 생성

SCDF는 여러 배치를 그래프 형태로 묶고, 실행 결과에 따라 다음 실행할 배치를 조건부로 결정할 수 있습니다.

예를 들어:

  • 배치 상태가 FAILED인 경우 → Task A 실행
  • 배치 상태가 COMPLETED인 경우 → Task B 실행

이러한 방식으로 복잡한 배치 워크플로우를 직관적으로 설계하고 관리할 수 있습니다.

4. 배치 모니터링과 성능 분석

효과적인 배치 작업 관리를 위해서는 모니터링과 성능 분석이 필수적입니다. SCDF는 Spring Batch와의 강력한 호환성을 바탕으로 풍부한 모니터링 기능을 제공합니다.

4-1. SCDF의 배치 모니터링 기능

SCDF는 Spring Batch와의 호환성을 통해 다음과 같은 상세한 정보를 대시보드로 제공합니다:

  1. 배치 실행 상태: 전체 배치 작업의 상태와 진행 상황
  2. 스텝 상세 정보: 각 스텝별 정보
    • 읽은 아이템 개수
    • 쓴 아이템 개수
    • 커밋 개수
    • 롤백 개수
    • 수행 시간
    • 최종 상태

하나의 배치가 10개의 스텝으로 구성되어 있다고 가정할 때, 각 스텝별로 소요된 시간과 같은 상세한 정보를 볼 수 있습니다. 예를 들어, 특정 스텝이 100만 개의 데이터를 읽고 쓰는데 3분 35초가 소요되었다는 정보를 시각적으로 확인할 수 있습니다.

4-2. 스텝 누적 히스토리

SCDF는 각 스텝의 누적 히스토리도 제공합니다:

  • 전체 소요 시간
  • 한 번 읽을 때 소요 시간
  • 읽기 횟수
  • 쓰기 횟수

이러한 정보는 최소, 최대, 평균, 표준편차 값으로 제공되어 배치 성능을 분석하는 데 도움이 됩니다.

4-3. Prometheus와 연동하여 메트릭 수집

Prometheus는 시계열 데이터베이스로서, 애플리케이션에서 발생하는 다양한 메트릭을 수집하고 저장합니다. SCDF에서 실행한 배치 작업들에 대하여 Prometheus에 메트릭을 전송하고, 수집된 메트릭을 시각화하여 분석하기 위해 Grafana 대시보드를 구축할 수 있습니다.

결론

Spring Cloud Data FlowKubernetes를 활용하면 효율적이고 확장 가능한 배치 구동 환경을 구축할 수 있습니다. 이러한 환경은 다음과 같은 장점을 제공합니다:

  1. 효과적인 자원 관리: Kubernetes를 통한 동적 자원 할당과 회수
  2. 직관적인 배치 워크플로우 관리: 그래프 기반의 시각적 워크플로우 설계
  3. 상세한 모니터링: Spring Batch 및 SCDF와의 호환성을 통한 풍부한 모니터링 정보

Spring Cloud Data Flow의 시각적 인터페이스와 Kubernetes의 강력한 오케스트레이션 기능을 결합하여 효율적인 배치 시스템을 구축할 수 있었습니다.

참고 자료