본문 바로가기

개발

Airflow 마스터하기: CeleryExecutor와 Redis로 분산 작업 실행!

반응형

Airflow는 데이터 파이프라인을 프로그래밍 방식으로 작성, 스케줄링, 모니터링할 수 있게 해주는 강력한 플랫폼입니다. 복잡한 데이터 처리 작업을 안정적으로 운영하려면 Airflow의 핵심 구성 요소를 잘 이해해야 합니다. 특히 CeleryExecutorRedis를 함께 사용하여 Airflow 작업을 여러 노드에 분산시켜 실행하는 방법은 데이터 엔지니어링에서 매우 중요합니다. 이 글에서는 AirflowCeleryRedis와 어떻게 통합되어 분산 작업을 처리하는지, 그리고 이 과정에서 개발자가 알아야 할 핵심 내용들을 개발자 주니어개발 입문자의 눈높이에 맞춰 쉽고 자세하게 알아보겠습니다!

목차

  • Airflow와 CeleryExecutor: 분산 처리의 시작
    • Celery는 어떤 역할을 할까요?
    • Redis는 왜 필요할까요? (메시지 브로커)
  • Airflow, Celery, Redis 연동 설정 자세히 알아보기
    • airflow.cfg 설정: 핵심 연결고리
    • 각 구성 요소 시작하기
  • Celery Worker의 작동 방식: 작업 실행의 주역
    • Airflow에서 Worker 실행하기
  • Flower: Celery Worker 모니터링의 꽃
  • Airflow + Celery + Redis 조합, 이것만 기억하세요!

Airflow와 CeleryExecutor: 분산 처리의 시작

Airflow는 워크플로우를 정의하고 실행하는 데 사용되는 플랫폼입니다. 이 Airflow가 복잡하고 대규모 작업을 처리할 때, CeleryExecutor를 활용하면 여러 서버에 걸쳐 작업을 분산하여 실행할 수 있게 해줍니다. 이는 단일 서버의 한계를 넘어 작업을 확장할 수 있게 해주는 핵심 기능입니다.

Celery는 어떤 역할을 할까요?

CeleryAirflow 스케줄러(작업 생산자)와 메시지 브로커(예: Redis) 사이에서 미들웨어 역할을 합니다. Celery의 주요 역할은 다음과 같습니다.

  • 작업 직렬화/역직렬화: 작업을 전송 가능한 형태로 만들고, 다시 실행 가능한 형태로 복원합니다.
  • 작업 구문 분석 및 실행: Redis로부터 작업을 받아와서 해당 파이썬 함수를 실행합니다.
  • 실패 처리 및 모니터링: 재시도, 타임아웃, 결과 저장 및 에러 처리 등을 관리합니다.

Airflow는 CeleryExecutor를 사용할 때 내부적으로 Celery를 사용하기 때문에, 사용자가 @app.task와 같은 데코레이터를 사용하여 직접 Celery 작업을 정의할 필요는 없습니다.

Redis는 왜 필요할까요? (메시지 브로커)

RedisCelery 시스템에서 작업 큐(브로커) 역할을 합니다. 즉, 작업을 직접 계산하는 것이 아니라, 작업 메시지를 저장하고 발송하는 역할을 합니다.

모든 작업 생산자(Airflow 스케줄러)와 작업 소비자(Celery 워커)는 이 Redis를 공유하며 사용합니다. Redis는 작업을 선입선출(FIFO) 방식으로 큐에 넣어 관리합니다.

 

Airflow, Celery, Redis 연동 설정 자세히 알아보기

AirflowCelery, Redis를 함께 사용하려면 몇 가지 설정이 필요합니다.

airflow.cfg 설정: 핵심 연결고리

airflow.cfg 파일에서 executor를 CeleryExecutor로 설정해야 합니다. 또한, Celery 섹션에서 Redis의 브로커 URL과 결과 백엔드 URL을 구성해야 합니다.

예시 설정은 다음과 같습니다:

Ini, TOML
 
[celery]
broker_url = redis://<redis-host>:6379/0
result_backend = redis://<redis-host>:6379/1

여기서 <redis-host>는 Redis 서버의 주소를 입력해야 합니다.

각 구성 요소 시작하기

모든 설정이 완료되면, 다음 명령어를 순서대로 실행하여 각 구성 요소를 시작할 수 있습니다:

  • airflow db init
  • airflow webserver
  • airflow scheduler
  • airflow celery worker
  • airflow celery flower (선택 사항, 모니터링 UI)

 

Celery Worker의 작동 방식: 작업 실행의 주역

Celery 워커는 실제로 Airflow의 작업을 실행하는 주체입니다. 이들은 Redis 큐에서 작업을 가져와 처리합니다.

Airflow에서 Worker 실행하기

airflow celery worker 명령어를 통해 Celery 워커를 실행하면, 이 워커는 airflow.cfg에 설정된 Redis에 자동으로 연결됩니다. 개발자가 직접 celery -A app worker와 같은 명령어를 수동으로 실행할 필요가 없습니다.

AirflowCelery 앱 인스턴스를 내부적으로 래핑하고 관리하기 때문에, 사용자에게는 훨씬 더 추상화된 형태로 제공됩니다.

Flower: Celery Worker 모니터링의 꽃

FlowerCelery 워커들을 모니터링하기 위한 가벼운 웹 UI입니다. 이를 통해 현재 실행 중인 작업, 대기 중인 작업, 완료된 작업, 워커들의 상태 등을 한눈에 확인할 수 있어 Airflow 시스템의 상태를 파악하는 데 매우 유용합니다.

airflow celery flower 명령어를 실행하여 시작할 수 있으며, 일반적으로 http://localhost:5555에서 접근할 수 있습니다.

 

Airflow + Celery + Redis 조합, 이것만 기억하세요!

AirflowCelery의 내부 동작을 추상화하여 사용자가 쉽게 분산 작업을 처리할 수 있도록 돕습니다. airflow.cfg 파일에 정확한 설정을 해주면, Redis를 메시지 브로커로, Celery를 분산 실행 엔진으로 사용하여 여러 노드에 걸쳐 작업을 확장할 수 있습니다.

개발자 주니어개발 입문자로서 데이터 엔지니어링 파이프라인을 구축하거나 관리하게 될 때, Airflow의 이러한 분산 처리 방식은 대규모 시스템에서 안정성과 확장성을 확보하는 데 매우 중요한 역할을 합니다. 이 개념들을 잘 이해하고 적용하여 여러분의 Airflow 작업이 더욱 효율적으로 실행될 수 있도록 해보세요!

반응형