AWS Batch: 개념과 구성 요소, 그리고 사용 사례

Gyuri Lee·2025년 2월 9일
0
post-thumbnail

AWS Batch는 대규모 배치 처리 작업을 간편하게 실행할 수 있도록 지원하는 완전 관리형 서비스입니다. AWS Batch는 사용자가 수천 개의 작업을 효율적이고 유연하게 실행할 수 있도록 자동으로 리소스를 프로비저닝하고 관리합니다.

제가 AWS Batch를 사용하게 된 계기는
4M개의 제품 데이터에 대해 추천을 만들어야 하는 프로젝트에서 시작되었습니다.

각 제품에 대한 추천을 생성하는 데 0.1초가 소요되었기 때문에,
모든 작업을 완료하는 데는 111시간 이상이 걸렸습니다.

매일 추천 데이터를 업데이트해야 했기에
병렬로 대규모 작업을 처리할 수 있으면서도
자원 관리가 효율적인 도구가 필수적이었습니다.
이러한 요구 사항을 충족시켜 줄 수 있는 AWS Batch를 선택하게 되었습니다.

본 포스트에서는 AWS Batch의 기본 개념 및 구성 요소인

  • Job
  • Job Definition
  • Compute Environment에 대해 자세히 알아보고,
    실제 사용 경험에 대해서도 공유하겠습니다 :)

1. AWS Batch의 기본 개념

AWS Batch는 다음과 같은 주요 개념을 포함하고 있습니다.

  • Batch Processing: 대량의 데이터를 처리하기 위해 일괄적으로 작업을 실행하는 방식입니다. AWS Batch는 이러한 일괄 처리를 수월하게 해줍니다.
  • Managed Service: AWS Batch는 서버를 관리할 필요 없이 자동으로 필요한 리소스를 할당하고, 작업이 완료되면 리소스를 해제합니다.

2. AWS Batch 구성 요소

AWS Batch는 여러 구성 요소로 이루어져 있으며, 다음은 그 주요 구성 요소입니다.


이미지 출처: https://servian.dev/getting-started-with-aws-batch-3442446fc62

2.1 Job

Job은 AWS Batch에서 실행되는 단일 작업 단위를 의미합니다. 각 Job은 사용자가 실행하고자 하는 특정 프로세스를 정의합니다. Job은 다음과 같은 속성을 가집니다.

  • 입력 데이터: 작업에 필요한 데이터
  • 출력 데이터: 작업의 결과물
  • Job priority: 작업의 우선순위
  • Retry strategy: 작업 실패 시 재시도 전략

2.2 Job Definition

Job Definition은 Job을 생성하기 위한 템플릿 역할을 합니다. 여기에서는 Job의 실행 환경, 리소스 요구 사항, 노드 선택 매개 변수 등을 정의합니다.

  • Container properties: 작업을 실행하기 위한 도커 이미지 및 관련 환경 변수
  • Resource requirements: CPU, 메모리 요구 사항
  • Timeout settings: 작업이 특정 기간 내에 완료되지 않으면 실패로 간주하는 시간 설정

Job Definition을 통해 재사용 가능한 작업 정의를 생성하여 동일한 유형의 작업을 반복적으로 실행할 수 있습니다.

2.3 Compute Environment

Compute Environment는 AWS Batch에서 Job을 실행하기 위한 EC2 인스턴스를 포함하는 가상의 환경입니다. Compute Environment는 크게 두 가지 유형으로 나뉩니다.

  • Managed Compute Environment: AWS Batch가 자동으로 리소스를 프로비저닝하고 관리하는 환경입니다.
  • Unmanaged Compute Environment: 사용자가 직접 EC2 인스턴스를 프로비저닝하고 관리하는 환경입니다.

Managed Compute Environment는 더 많은 편리함과 유연성을 제공하지만, Unmanaged Compute Environment는 더욱 세밀한 리소스 관리가 가능합니다.

3. AWS Batch 사용 경험 사례

제가 AWS Batch를 사용했던 구체적인 사례를 공유하겠습니다.

위에서 언급한 것처럼,
저는 4M개의 제품 데이터에 대한
추천 시스템을 구축하는 프로젝트를 진행하고 있었습니다.

각 제품의 추천을 생성하는 데 0.1초가 걸리며,
이를 모두 처리하는 데는 111시간이 넘어가는 상황이었습니다.

매일 추천 데이터를 업데이트하기 위해
병렬로 작업을 처리할 수 있는 도구가 필요했습니다.

3.1 요구 사항 수립

  • 데이터 양: 총 4M개의 제품 데이터
  • 처리 방식: 각 제품에 대한 추천을 독립적으로 생성
  • 자동화 필요: 추천 데이터를 Daily로 자동 업데이트
  • 자원 관리: 처리 용량에 따라 자동으로 리소스를 조절

3.2 구성 요소 설정

  1. Job Definition 생성:

    • 추천 알고리즘을 실행하기 위한 도커 이미지를 기반으로 Job 정의를 생성했습니다.
    • 각 Job이 필요한 CPU 및 메모리 요구 사항을 명시했습니다.
  2. Compute Environment 설정:

    • Managed Compute Environment를 설정하여 AWS Batch가 자동으로 필요한 EC2 인스턴스를 프로비저닝하도록 했습니다.
    • Batch 비용을 예상할 수 있도록 사용가능한 EC2 종류를 몇가지로 제한하였습니다.
  1. Job 제출:
    • AWS Batch CLI를 통해 4M개의 제품에 대한 추천을 처리하기 위한 12개의 Job을 제출했습니다. 각 Job은 개별적으로 제품 추천을 생성하며 동시에 실행돼 병렬 처리 효과를 극대화했습니다.
  1. Step Function:

    • Brand 추천을 위해서는 추천을 하는 단계 외에도 추천에 필요한 데이터들을 생성하는 몇가지 단계가 있었습니다. 해당 단계를 순서대로 진행하기 위해 Step Function을 통해 워크로드를 작성해주었습니다.
    • 해당 기능을 통해 원하는 순서대로 Job을 실행시킬 수 있습니다.

  1. Event Bridges:
    • 또한, Daily로 결과를 자동 생성할 수 있도록 하기 위해 Event Bridge라는 기능을 사용했습니다.
    • 해당 기능을 통해 원하는 시간대에 자동 실행이 가능하게 됩니다.

3.3 결과

AWS Batch를 통해 작업을 빠르고 효율적으로 수행했으며, 모든 Job이 신속하게 처리되었습니다. 리소스는 필요에 따라 자동으로 할당되었고, 결과적으로 프로젝트의 전반적인 리드 타임을 크게 단축할 수 있었습니다.

Daily 업데이트도 원활하게 진행되었으며,
Job 실패 또는 성공에 대한 모니터링이 가능하여 작업 관리도 수월했습니다.

3.4 프로젝트 요약

항목내용
인원2인 프로젝트
개발 기간24.11 - 25.02 (4개월)
개발 스펙AWS Batch, Step Function, Event Bridges
언어Python

결론

AWS Batch는 대규모 배치 처리를 위한 강력하고 관리하기 쉬운 도구입니다.

Job, Job Definition, Compute Environment와 같은
구성 요소를 통해 배치 작업을 효과적으로 관리할 수 있습니다.

위의 사용 사례를 통해 AWS Batch의 실용성을 확실히 입증할 수 있었습니다.

0개의 댓글