Search

Airflow 안정화 프로젝트를 마치며: 알람 지옥에서 벗어나기

배경

입사하고 한두달이 지나면서 슬슬 기존 파이프라인의 문제점이 눈에 보이기 시작했다.
특히 Airflow에 등록된 대부분의 DAG은 일회성 스크립트를 그대로 옮겨둔 수준이었고, 함수화/모듈화가 거의 되어있지 않아 재사용성이나 가독성, 유지보수성이 너무 낮았다.
그 와중에 매일 반복적으로 시도때도 없이 울리는 에러 알람들이 계속 방치된 채로 있어 불필요한 운영 부담을 만들어내고 있었다. 이 상태로는 앞으로 계획된 데이터 마트 구축 작업을 안정적으로 진행하기 어렵다고 판단했다.
그래서 8월말부터 10월 초까지 에러 수정 + 구조 리팩토링으로 Airflow 파이프라인 안정화 프로젝트를 진행했다.

문제 및 목표

파이프라인을 살펴보며 발견한 공통적인 문제 유형은 다음과 같았다.
공통 설정 및 공통 함수들 전부 복붙으로 유지보수 어려움
Task Timeout을 너무 짧게 설정해놔서 잘 동작하던 task도 강제 종료
EMR sensor 관련 오류 및 EMR 클러스터 미생성시 종료 시도로 연쇄 실패 알람
위와 같은 문제를 해결하기 위해 다음과 같은 목표를 세웠다.
1.
노이즈 알람 제거: 진짜 중요한 실패만 감지하도록 개선
2.
운영 구조 단순화: 유지보수가 쉬운 구조로 리팩토링
3.
변경 내역 문서화: 개선 과정을 기록하고 공유 가능한 형태로 남기기
위 목표를 중심으로 단순히 에러를 고치는게 아닌 문제의 근본 원인을 찾아 구조적으로 개선하는데 초점을 맞췄다.

주요 개선 사례

각 문제의 원인과 개선 방향은 아래와 같음 (세부 내용 링크 참조)
구분
주요 문제
개선 내용
결과
API 호출 에러 다수 (네트워크 이슈)
재시도(backoff) 로직 보완 timeout 조정
알람 25건 → 3건 (-88%)
조회 시점 불일치로 데이터 불일치 발생
스레드풀로 조회 시점 보정
알람 13건 → 0건
짧은 timeout, 이전 DAG 상태에 따른 이후 DAG 실패
timeout 조정, 트리거룰 all_done 변경
월 평균 알람 25건 → 0건
동일 timeout으로 대용량 task 실패
timeout 차등 설정, 불필요한 압축 제거, 모듈화
알람 11건 → 0건 실행시간 89초 → 53초 (40% 단축)
Cluster 미생성 시 연쇄 실패, 센서 stuck
reschedule 모드 적용, 의존성 그래프 수정, 실제 step polling
EMR 사용하던 DAG들의 간헐적 오류 완전 해소
중복 코드·설정 다수
공통 모듈화 & ETL 템플릿화
유지보수성 향상, 신규 DAG 확장성

결과

제일 큰 변화는 이전에는 노이즈 에러 알람의 감소이다. 하루에 5~6건 정도 실패 알람이 왔는데, 현재는 하루에 한건도 오지 않는 날이 많아졌다.
또한 단순한 버그 수정이 아니라 구조적 리팩토링을 꾸준히 곁들여서, 신규 파이프라인이나 리팩토링 대상 DAG도 동일한 구조로 쉽게 확장할 수 있는 기반을 마련했다.
그리고 제일 중요한 문서화를 같이 진행했다. 입사 당시에는 코드나 결정 과정에 대한 문서가 전무해서 히스토리 파악이 너무 힘들었다.
이번 프로젝트를 진행하며 사내 노션에 페이지들을 정리하고 데이터베이스 형태로 남겼다. 이후 다른 팀원이 동일한 문제를 마주했을 때 참고 할 수 있을 것이다.

향후 계획

지금까지는 구조 위주 개선을 했다면 앞으로 비즈니스 로직 단계의 품질 개선과 데이터 마트화를 진행할 예정이다.
컬럼명에 공백이 들어갔거나 디폴트 값이 이상하게 들어감 → 컬럼명 표준화, 기본값과 타입 캐스팅 로직 정리
맞지 않는 레이어에 데이터 저장중 → 버킷 규칙이나 데이터 정제 규칙 수립 등
이번 프로젝트를 통해 시스템을 어느정도 신뢰할 수 있는 수준으로 끌어올렸다. 이제 에러를 감지하고 수습하는 대신 더 나은 데이터 품질과 구조를 고민할 수 있게 되었다.