[ETL] Airflow 와 Jenkins 비교 - 무엇을 사용할까?

jaylnne·2022년 5월 6일
1

ETL

목록 보기
1/1
post-thumbnail

0. Why Research?


회사에서 현재 기획 단계에 있는 새로운 시스템을 위해 ETL을 설계 & 구현해야 할 일이 생겼다.

수집된 raw data 가 서비스에 사용되기까지 많은 가공 단계를 거쳐야 할 것으로 예상되는데... 이 정도로 복잡한 데이터 파이프라인 구축은 경험해본 적이 없어서 고민이다. 🤨

사실 내가 속해있는 빅데이터 팀에는 데이터 에지니어링 파트가 따로 있다. 조직구조상 분리되어 있진 않지만 업무 구분이 꽤 뚜렷하다. 그분들께 요청을 드리는 것이 효율적임은 분명한데, 해당 파트에 최근 퇴사자가 다수 발생해서 지금은 새로운 업무 착수가 전혀 불가능할 수도 있다고 한다.

결국 나와 다른 DS 동료 한 분, 2명(둘 다 주니어)이 데이터 파이프라인 구축부터 진행해야 할 수도 있다. 어쩔 수 없는 거다. 모든 일이 베스트웨이로만 진행될 수는 없을 테니까.

글을 처음 작성하던 시점에는 ETL 파이프라인 구축 작업을 직접 하게될 줄 알았는데, 업무를 조율하여 데이터 엔지니어링 파트의 도움을 받을 수 있게 되었다. 🤗

일단 리서치부터 해보자.

1. Why Airflow and Jenkins?


다양한 ETL 오픈소스들이 있지만 그중에서 Airflow와 Jenkins부터 조사해보기로 한 가장 큰 이유는 최근 우리 회사 개발실에서 위 두 개 툴 사용을 권하고 있기 때문이다. 아직 표준으로 채택된 것은 아니지만, 조만간 될 것 같다.

개발자로 일하는 지인들로부터 Airflow 와 Jenkins 찬양하는 소리를 많이 듣기도 했다. '진짜 편하다.', '완전 편하다.', 'Dog 편하다.' 등... (움?)

그렇구나, 하면서 고개만 끄덕끄덕 해왔는데 시급한 업무로 차일피일 미루기만 하다가 이제야 얘네들이 뭘 하는 애들인지 알아보게 되었다. 궁금증이 계속 쌓여가던 중이었는데 차라리 잘됐다.

2. Airflow


Airflow 란, 데이터 파이프라인을 구축하고 유지하는 작업을 쉽게 할 수 있도록 도와주는 python 기반의 오픈 소스 툴이다. DAG(Directed Acyclic Graphs)라고 불리는 워크플로우(workflow)를 작성하고, 워크플로우가 특정한 시간에 run 하도록 스케쥴링하고, 이러한 과정이 문제없이 잘 작동하는지 web UI를 통해 모니터링할 수 있게 해준다. 짧게 말해서 ETL 작업을 쉽고 편리하게 할 수 있도록 도와주는데 python 코드로 이용할 수 있는 녀석이다.

아래와 같은 장점들이 있는 것 같다.

장점

  • python 기반
    • 데이터 사이언티스트로서 평소 가장 많이 사용하는 언어인 python 기반이라니 쏘 굿
  • 오픈 소스
    • 실서비스를 만드는 목적에서 유료가 아니라는 사실은 매우 중요하다.
    • 돈 들어가는 일이라면 뭐든 몇 단계 결재를 거쳐야만 하는 직장인으로서도 매우 감사하다.
  • Web UI
    • 솔직히 개발자라고 하더라도 터미널보다 GUI 가 훨씬 직관적이고 편한 때가 있다.
    • cron으로 배치 스케쥴링을 하면, job이 제때 잘 돌았는지 확인하기 위해 그때그때 log를 열어보아야 해서 번거롭다.
    • job의 개수가 많고 서로 의존성이 복잡하면 병목이나 문제가 발생한 지점을 찾는 것도 오래 걸린다.

3. Jenkins


jenkins 는 일단 특이한 로고가 눈에 들어온다. 동물이나 곤충인 경우는 많이 봤는데... 사람인 경우는 처음. 무슨 의미일까 궁금해 찾아봤는데 역시나 '집사'를 표현한 거라고 한다. (그나저나 로고 아저씨 인상이 되게 친근하다.)

jenkins 란 연속적인 데이터 통합 작업들을 순서대로 실행할 수 있는 java 기반 오픈 소스 서버이다. Apache Tomcat 과 같은 서블릿(servlet) 컨테이너 내에서 실행되며, 프로젝트를 위한 데이터의 안전한 전달을 보장하고, 빌딩/테스팅/배포와 관련한 다양한 작업들을 자동화해준다. 앞서 ETL 오픈 소스 airflow와 jenkins라고 적은 부분이 있는데, 정확히 말하자면 jenkins는 CI(Continuous Integration) 툴이다.

CI 가 무엇인지 잘 모른다면 아래 글을 참고하는 것을 추천한다. 깔끔하고 이해하기 쉽게 정리해주신 것 같다.

Jenkins의 장점은 대부분의 글들이 아래와 같이 정리하고 있었다.

장점

  • Build 자동화
  • 자동화 테스트
  • 코드 표준 준수여부 검사
  • 빌드 파이프라인 구성
  • 각종 배치 작업의 간략화
    • 우리는 데이터 파이프라인을 구축하려고 하는 것이기 때문에 이 장점에 일단 집중한다.
  • 오픈 소스
    • 이 세상 모든 오픈 소스 개발팀에게 무한 감사
  • Web UI
    • jenkins 도 Web UI를 제공한다. 그러나 배치 잡 스케쥴링에서는 airflow UI 가 더 직관적이고 편하다는 의견이 많다.

4. Airflow vs. Jenkins 차이


오케이. airflow와 jenkins가 무엇인지 대략적으로 알겠다. 그렇다면 이제 본격적으로 두 오픈 소스를 비교하면서 차이점을 알아보자.

4-1. jenkins는 워크플로우 관리만을 목적으로 만들어진 것이 아니다.

airflow의 굵직한 목적은 "워크플로우를 만들고 관리"하는 것이다. 그렇기 때문에 airflow는 이러한 목적을 위한 로드맵 구성이나 추가적인 기능 도구들이 많이 내장되어 있다.

그러나 CI 툴인 jenkins 는 워크플로우를 작성하고 관리하는 것만을 목적으로 만들어진 게 아니다. 그러니까, "할 수 있으나 그것만을 할 수 있도록 설계"된 것이 아니다. 편리하게 배치 스케쥴링을 하는 기능은 jenkins 가 제공하는 다양한 이점들 중에 하나다. 때문에 ETL 구축 목적으로 jenkins를 사용하기 위해서는 필요에 따라 매우 다양한 플러그인과 연동시켜주어야 하는데, 후기들을 읽어보니 그게 생각만큼 썩 간단히 되는 일은 아닌 듯하다.

4-2. 연동 가능한 플러그인의 종류가 다르다.

너무 당연한 얘기라 할 말이 더 있나 싶다. 다른 단체에서 다른 목적으로 다른 저장소에 개발한 프로젝트다. 당연히 연동 가능한 플러그인의 종류도 다를 것이다.

[airflow 의 플러그인 리스트는 아래 링크에서 확인]

[jenkins의 플러그인 리스트]

4-3. jenkins 세팅보다 airflow 세팅이 어렵다.

airflow에는 task를 실행하는 주체인 executor라는 컴포넌트가 있다. celery, kubernetes 등 다양한 선택지가 있는데, 모두 낯설고 복잡한 구조를 띄고 있다. 분명 처음 사용하는 사람이 단기간에 빠르게 익숙해지기는 어려워 보인다.

반면 jenkins 는 처음 서버를 구축할 때 다소 리소스가 필요할 수 있지만, 이미 구축된 서버에 세팅을 추가하는 것은 비교적, 아니 매우 쉽게 진행할 수 있다고 한다.

4-4. airflow는 Windows 운영 체제를 지원하지 않는다.

반대로 jenkins 는 windows 용 버전이 있다.

5. Conclusion


여기까지 알아본 바, 우리의 문제를 해결하기 위한 적합한 도구는 Jenkins 보다 Airflow라는 걸 알겠다. 복잡한 구조의 raw data 를 다양한 형태로 가공하여 서비스에 이용할 수 있도록 만드는 복잡한 데이터 파이프라인을 구축하려 하는 것이니까. 그러나 Airflow는 온보딩이 직관적이지 않아 사용이 익숙해지기까지 다소 시간이 걸릴 것으로 예상된다.

쉽고 빠르게 vs. 완성도 있으나 느리게

jenkins로 일단 완성된 결과물의 효용을 확인한 후, airflow로 옮기는 작업을 하는 방식도 나쁘지 않을 것 같다.

📖 References


- [HEVO DATA] Airflow vs Jenkins: 6 Critical Differences
- [오늘의집] 버킷플레이스 Airflow 도입기
- [StackShare] Airflow vs Jenkins
- [킹오브백엔드] 우리의 친절한 비서 Jenkins
- [DataBand] 6 inconvenient truths about Apache Airflow (and what to do about them)
- [Reddit] Airflow vs Jenkins discussion

글 내용에 오류가 있다면 댓글로 알려주세요.
감사합니다! 😌

profile
스스로 정한 목표에 도달하기 위해 달리는 걸 즐기는 사람 🏃‍♀️

2개의 댓글

comment-user-thumbnail
2022년 5월 10일

제가 속한 곳에서는 단순한 배치는 젠킨스, 복잡하게 연결된 배치는 에어플로우 사용하는데 둘 다 유용했습니다. 젠킨스가 특히 환경만 갖춰두면 배치를 쉽게 만들고 돌릴 수 있어 내부에서 많이 사용하고 있어요. 젠킨스가 좋았던또 다른 이유는 파라미터 입력폼을 만들 수 있는데 이걸 이용하면 장기간의 데이터 백필도 쉽게 구현할 수 있다는 점 같아요. 에어플로우도 불가능한 건 아니지만 젠킨스보단 조금 손을 타는 느낌이에요

1개의 답글