소프트웨어 전문지 마이크로소프트웨어 395호는 데이터과학을 주제로 담았습니다. 데이터과학에 대한 개론, 학습 방법, 실무 적용 사례, 학계 등 마소 395호 주요 기사들을 IT조선 독자에게도 소개합니다. [편집자주]

어떤 단발성 분석에 필요한 데이터와 달리, 지속적으로 분석해야 하는 데이터에는 주기적인 데이터 파밍이 필요하다. 반복 횟수가 적은 경우, 간단히 크롤링 프로그램을 만들어 크론탭 등의 스케쥴러를 통해 해결할 수 있다. 하지만 이 방법은 배치 프로세스의 개수가 늘어나면 상황이 달라진다. 태스크 간의 종속성이 고려돼야 하며, 프로세스가 실패했을 경우 이를 빨리 파악해서 조치하는 것도 필요하다. 아울러 현재 작동되는 프로세스를 모니터링하며 관리해야 한다.

이런 작업을 효율적으로 수행할 수 있는 워크플로우 매니지먼트 애플리케이션에는 에어플로우, 루이지(Luigi), 핀볼(Pinball), 아즈카반(Azkaban), 우지(Oozie) 등이 있다. 이 중, 에어플로우는 파이썬(Python) 스크립트를 활용할 수 있어 빠르게 시스템에 적용해 볼 수 있다.

에어플로우를 사용하면 전체 프로세스를 한눈에 쉽게 살펴볼 수 있을 뿐 아니라, 각 프로세스의 단계별 진행 현황을 쉽게 확인할 수 있다. 또한 슬랙(Slack) 봇과 연동해 프로세스가 실패할 경우 관리자가 실시간으로 에러를 확인할 수 있다.

크론(Cron)은 유닉스 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 데몬이다. 일주일에 한 번 특정 서버에 접속해서 데이터를 받아와야 한다든지, 새벽 5시에 특정 작업을 수행할 필요가 있는 경우 같은 일정한 시간 간격으로 수행돼야 하는 작업이 있을 때 활용할 수 있다. 즉, 사용자가 해당 시간에 작업할 수 없는 상황일 때, 서버는 항상 돌아가고 있다는 점을 십분 이용하는 아주 유용한 방법이라 할 수 있다. ‘The Open Group Base Specifications Issue 7(Revision of IEEE Std 1003.1-2008)’에서 정의하는 크론탭(CronTab)을 활용하면 크론 기능을 쉽게 사용할 수 있다.

크론탭 스크립트 예제. / 마이크로소프트웨어 395호
크론탭 스크립트 예제. / 마이크로소프트웨어 395호
예제에 나온 스크립트로 크론이 설정된 경우, 서버 시간으로 매주 일요일 2시 36분마다 ‘backup.sh’를 실행한다. 크론탭 실행 여부에 대한 로그는 기본적으로 ‘var/log/’에 쌓이며, 크론탭 권한으로 유저에게 이메일을 발송한다. 만약 크론탭 권한이 루트(root) 권한이라면, 루트 계정의 정보로 등록한 이메일로 ‘backup.sh’ 실행시간에 대한 내용을 받는다. 단, 클라우드 환경에서는 SMTP로 이메일이 외부로 나갈 때 화이트리스트 문제가 생겨 발송되지 않을 수 있다. 다른 형태의 PaaS나 메일 서비스의 API 키 등을 사용해야 한다.

크론탭에 크론잡(Cron job)으로 등록돼 실행되는 프로세스는 높은 가용성과 실행에 대한 신뢰성이 필요한 경우, 사용이 어렵다는 단점이 있다. 우리가 경험한 사례 중에는 프로세스가 좀비 프로세스로 전락하는 경우가 있었다. 파일 쓰기에 대한 공유 액세스 위반이 발생하면, 다음번 크론잡이 실행되지 않는 경우도 있었다. 프로세스 구현 여부에 따라 오류 제어가 어렵다고 볼 수 있다.

아파치 에어플로우 인큐베이팅 문서. / 마이크로소프트웨어 395호
아파치 에어플로우 인큐베이팅 문서. / 마이크로소프트웨어 395호
에어플로우는 2014년 10월 에어비앤비의 맥심 부시민(Maxime Beauchemin)이 시작한 프로젝트다. 2015년 6월 에어비앤비 깃허브(github.com/airbnb)에 오픈소스로 공식 발표됐다. 2016년 3월 아파치 소프트웨어 재단(Apache Software Foundation, 이하 ASF)의 인큐베이팅 프로그램에 합류했으며, 최근 ASF 프로젝트로 활발히 투표가 진행되고 있다.

에어플로우는 하나의 DAG에는 다양한 Job들이 독립적으로 실행되며 이들의 실행 순서를 정할 수 있다. 하나의 DAG에서 실행되는 작업(Job)의 실행 여부는 모니터링 할 수 있다.

에어플로우는 공식 홈페이지에서 제공하는 스크립트 몇 줄이면 설치와 실행을 할 수 있다. 파이썬 패키지 관리 시스템인 pip를 활용하므로, 향후 여러 패키지에서 의존성 문제가 발생할 수 있다. 그래서 ‘Virtual ENV’ 등으로 파이썬 가상환경을 구축하는 것이 좋다.

배준현, 김도형 필자의 ‘반복 크롤링 작업 시 크론탭은 이제 그만, 아파치 에어플로우로 가자’에 대한 자세한 내용은 ‘마이크로소프트웨어 395호(https://www.imaso.co.kr/archives/4654)’에서 확인할 수 있다.