[airflow 기여의 첫 시작: i18n 번역]
대규모 프로젝트에 기여해보는 꿈을 꾸어보았습니다. 그 중 에어플로우가 떠올랐습니다.
가장 빠르게 airflow에 기여하는 방법에 대해 고민하다가 얼마전 진희님의 글을 보았습니다.
결론적으로, 번역 커밋이 병합되어, airflow 컨트리뷰터가 되었습니다.
시작: 오픈카톡방에서 찾은 가능성
카톡방에서 가능성을 발견하고, 무작정 도전하기로 했습니다.
가장 좋은 것은 누군가 해놓은 보장된 길로 걸어가는 것이죠.
그래서 이제 번역할 파일을 살펴보니, 앞선 기여자분이 남겨놓은 기여할 만한 여러개의 json 파일을 발견했습니다.
그중에 가장 끌리는 것은 역시 ‘Dag’라는 이름이었습니다.
이 현황에서 일관되게 한 묶음으로 커밋하기에 좋겠다고 판단해서, 바로 해당 파일(dag.json)을 확인했습니다.
그 중에 breeze 명령어로 미반영된 것을 확인하면,
왼쪽 그림처럼 TODO: translate: …로 표기된 부분이 있습니다. 나머지 부분은 제가 미리 바꾼 내역입니다. 우측 그림처럼 완성을 시켜주었습니다.
저장해주고, 다시 번역 상태를 확인했습니다.
dag.json 파일의 커버리지가 100.0%가 되었습니다. 좋다고 판단하고, 웹에서 UI를 확인하였습니다.
그런데, Dag가 없습니다.
Dag가 하나라도 있어야 이 version이 표기되는지 확인할 수 있는데 말이죠?
그래서 만들어주었습니다.
즉석에서 Dag 만들기 도전1: 실패(airflow 3.0 breeze)
잘 만들어주고, opt/airflow/dags 경로에 이 파이썬 파일을 저장해주었습니다.
그런데, airflow dags list로 확인해보니 “No data found”가 뜨는것 아닙니까?
airflow dags reserialize 이걸 사용해봐도 변화가 없었습니다.
갑작스러운 멘탈 붕괴로, 이리저리 검색해본 결과,
Airflow 3.0 이상부터는 이 경로에 저장하는 게 아니랍니다!
이 그림을 보니, reserialize 실행 로그에서, Airflow는 DAG를 /files/dags 경로에서 가져오고 있습니다. (Filling up the DagBag from /files/dags)
그래서, 이 테스트 파이썬 파일을 /files/dags로 복사해주겠습니다.
cp /opt/airflow/dags/test_version_dag.py /files/dags/
그리고 다시 확인해보겠습니다.
airflow dags list
드디어 나왔습니다. 이제 웹 UI로 확인해보았습니다.
무언가 나타나서 혼자 오열했습니다.
Show Version Indicator.. 그게 어디있지?
그런데 또 문제가 발생했습니다. 번역한게 어디에 있는지 모르는 것입니다.
이럴 때는 AI의 도움을 받아봅니다. 저 Dag를 누르고, 그리드 보기 설정한 상태로, 우측 상단의 톱니바퀴를 누르라고 합니다.
저 아래에 “Show Version Indicator”를 발견했습니다.
이제 변경한 dag.json 파일을 저장하고, 약간의 시간이 지난 후에 다시 airflow를 실행했습니다.
breeze --backend postgres start-airflow --dev-mode
잘 표기된 것을 확인하고, 신나서 PR을 올렸습니다.
static check에서 에러 발생
그런데, static error가 발생합니다.
2차 멘탈붕괴가 왔습니다만, 리뷰어 분의 피드백으로 빠르게 ‘prek’이라는 도구를 설치했습니다.
이게 lint 처럼 약간 간격이나 잘못된 위치를 잡아내서 교정해주는 역할을 하는 모양이더라구요.
정적 체크(static check) 잘 기억해두겠습니다.
prek을 설치하고, git add 파일 > prek 명령어를 실행해주었습니다. 잘 수정이 되고, Skipped 혹은 Passed로 모두 수정된 것을 확인했습니다.
이 상태에서 다시 수정이 되었으니, git add 명령어로 스테이지에 올리고, 커밋메시지를 작성했습니다.
약한 충돌: update branch 누르고 pull 안해주면 문제 발생
여기서 또 당황한게 push를 하기 전에 계속 갱신되다보니 순간적으로 깃허브 상에서 update branch 버튼을 누릅니다.
문제는 이 airflow repo가 계속 업데이트가 되는데,
최신화해주기 전에 로컬 브랜치에서 push해버린 상태로.. 원격 레포에서 pull해주면?
원격 레포가 이미 최신화되었으니 > 충돌이 납니다!
이럴때는 자연스럽게 rebase해줍니다.
git pull --rebase origin i18n/kor_translate
GitHub에 있는 최신 코드(Update branch 된 내용)를 내 PC(로컬)로 먼저 가져와서 깔아두고, 그 다음에 내가 로컬에서 작업했던 내용은 그 위로 얹어주겠다는 의미입니다.
다행히 에러가 없었네요.
Indicator를 인디케이터로 수정하기
Show Indicator Version을 버전 정보 표시로 번역했으나, 정보라기에는 Information과 좀 다른 어감이 있고, 리뷰어 분의 의견도 유사했습니다.
인디케이터(지시자?)라는 명칭은 일단 발음 그대로 표기하는 걸로 변경했습니다.
(버전 정보 표시 > 버전 인디케이터 표시)
이제 다시 정리해서 push를 해줍니다.
테스트도 문제 없이 잘 통과했습니다.
그리고, 얼마 지나지 않아서 Merge 완료했습니다.
이렇게 airflow i18n 번역으로 처음 기여해보는 경험을 정리해봤습니다. 이 정도 규모 프로젝트는 기여가 처음이다보니 중간에 사고가 좀 있었습니다.
그럼에도 시작해보니 조금 더 공부하고, 운영진 및 리뷰어분들의 도움을 받는다면.. e2e 기여도 가능하겠다는 생각이 드네요!
여러분도 번역부터 시작해서 airflow contributor로 성장해보시는건 어떨까요?
함께해주신 운영진, 리뷰어 분의 도움에 감사드립니다.
긴 글 읽어주셔서 감사합니다.![]()




















