마이리얼트립 데이터 조직을 처음 만들던 시기에는, 따로 데이터 엔지니어가 없었다. 데이터 분석 환경? 그런 게 당연히 있을 리 없었다 ㅠ 초기에는 급한대로 운영 DB에 그대로 쿼리를 날리기도 하고(지금 생각하면 무모하고도 용감했지만 당시에는 아쉬운대로 그거라도 해야 했다. Slave DB라서 서비스가 뻗는 일은 없었던 걸 다행이라고 해야 하나;;; ), 일간으로 봐야하는 지표들을 수기로 정리해서 업데이트하기도 하고, 데이터 추출 요청 하나하나를 csv 파일로 주고받기도 했다. (이게 불과 2년 반 전이라니...)
이 즈음 마이리얼트립이 기존의 투어/티켓 말고도 호텔, 항공, 여행자보험 등 다양한 버티컬로 빠르게 확장하면서 데이터 소스가 정신없이 늘어나기 시작했고, Transaction 이외의 Event 로그에 대한 필요성이 높아지면서 기존에 얼기설기 가져다 쓰던 데이터 소스의 생산성이 확연하게 떨어지기 시작했다. 한동안은 여기저기서 raw data를 다운받거나 RJDBC 같은 라이브러리 사용해서 Rstudio 에서 통합하는 삽질을 진행했던 적도 있는데, 역시나 그건 해결책이 아니었다. 사실 나도 데이터 관련 직무를 깊이 있게 경험한 적이 없어서, 이때만 해도 분석환경을 만들려면 뭔가 Hadoop, Spark, Presto 이런 거 다룰 수 있는 데이터 엔지니어링 전문가가 있어야 한다고 막연하게 생각하고 있었다.
그때 데이터분석팀 멤버로 새롭게 조인한 A님이 스스로 분석환경을 만들어보겠다고 했다. 사실 처음에는 그게 될까 싶어서 나는 말리는 쪽이었다. (그 시간에 다른 요청건들 먼저 처리해야 하지 않을까요? 아직 불편하지만 어떻게든 하고는 있으니까요) 하지만 A님은 팀장의 의견을 무시해버릴 수 있는 강단있는 사람이었고 ㅋㅋㅋ 스스로 이것저것 찾아보고, 주변에 물어보고, 이런저런 시도를 해 보더니... "이거 할 수 있을 것 같아요" 라고 이야기를 꺼냈다. 클라우드 분석환경 중에 GCP는 그나마 설정이 어려운 편이 아니라서 분석가들도 어느정도 셋팅할 수 있을 것 같다고. GCP의 BigQuery 기능을 살펴봤더니 우리에게 필요한 데이터 웨어하우스로 부족함이 없을 것 같다고. 어 그래요? 그러면 한번 해봅시다!
실제로 A님은 이후 본격 데이터 엔지니어가 충원되기 전까지, 거의 1년 가까이 마이리얼트립 데이터 파이프라인을 책임지는 분석가가 되었다. Stitch와 같은 외부 솔루션, BigQuery의 Data Transfer와 Scheduled Query 같은 자체 기능, Crontab과 Airflow 등을 이래저래 잘 조합해서 효율성은 좀 부족하더라도 목적에 충실한 데이터 파이프라인을 잘 만들었고, 이 파이프라인은 이후 입사한 개발자들의 극찬;;; 까지는 아니고 감탄을 자아냈다. (와 이걸 개발자 없이 만들었다구요? 분석가들이 이정도 했으면 진짜 고생하셨겠네요...) 아 물론 이 이야기의 또다른 중요한 교훈은 팀장이 멍청하면 훌륭한 팀원의 아이디어를 기각시킬 위험이 있다는 거랑, 내가 할 수 있을 것 같으면 팀장의 의견 따위는 무시하고 일단 되는 걸 보여주면 된다... 가 되겠습니다 여러분 ㅠㅜ (멍청한 팀장 1인...)
아무튼 이런 히스토리로 인해서, 마이리얼트립 데이터분석팀은 분석 환경을 구축하고, 데이터 파이프라인을 정비하고, 데이터 마트를 만드는 업무에 꽤 오랫동안 관여해 왔다. 특히 원천 테이블들을 적절히 가공해서 데이터 마트를 잘 만드는 일은 데이터분석팀의 업무 효율과 직결되는 일이어서, 팀 내에서도 많은 고민과 시행착오를 거쳤던 업무였다. 주제별로 마트 테이블을 만들고, 마트에 들어갈 컬럼과 세부 조건을 결정하는 부분은 분석팀 내에서도 히스토리 관리가 까다로울 정도로 큰 업무가 되었다. 이후 데이터 엔지니어링 조직이 생기면서 데이터 파이프라인이 훨씬 더 효율적으로 바뀌고 관리와 유지보수가 편해졌지만, 지금까지도 외부 API 연동을 위한 테이블 구조를 정의하거나, 분석용 데이터 마트를 만드는 종류의 업무들은 데이터 분석가들이 꽤 깊숙히 관여하고 있다.
이런 과정을 겪으면서 알게 된 점이라면, "좋은 분석환경은 공짜가 아니다" 는 것이다. 사실 너무 당연한 말이지만, 의외로 분석환경 구축에 대해서는 엔지니어에게 맡기고 분석가들이 한걸음 뒤로 물러서 있는 조직 이야기를 많이 듣는다. (나도 처음에는 분석환경을 만드는 건 엔지니어의 일이고, 분석가는 그렇게 만든 분석환경을 잘 쓰면 되는 거 아닌가... 하고 생각했던 적이 있다 ㅠ) 하지만 실제로 쓸만한 분석환경을 만들기 위해서는 어떤 데이터를 어디에서 가져오고, 스트리밍과 배치를 어떻게 활용하고, 전처리는 어떤 순서로 진행하며, 최종 목적 테이블의 스키마는 어떤 식으로 구성하고, 변경분을 어떻게 판단해서 업데이트 할지(혹은 full sync를...), 이 과정에서의 정합성 관리는 어떤 식으로 진행할지... 굉장히 다양한 주제에 대해서 데이터 분석가, 데이터 엔지니어, 백엔드 개발자, 클라이언트 개발자 등등 여러 직군의 협업이 필요하다. (사실 항공처럼 방대한 도메인 지식이 필요한 경우에는, 도메인 지식이 있는 서비스 담당자들도 여기에 참여해야 한다.) 이 과정에서의 커뮤니케이션이 원활하지 않으면, 애써 만든 데이터 웨어하우스나 데이터 마트가 아무도 쓰지 않는(혹은 쓸 수 없는) 어중간한 테이블로 남게 된다. 좋은 분석환경은 공짜가 아니고, 이를 잘 만들고 관리하는 것은 모든 데이터 조직이 공통으로 노력해야 하는 일이다.
마이리얼트립에는 All Data Scrum이라는 미팅이 있다. 매주 한번씩 사내 데이터 조직이 모두 모여서(데이터분석팀, 데이터플랫폼팀, 검색/추천팀), 데이터 분석이나 엔지니어링에 대한 이슈를 함께 논의한다. 재미있는 분석 결과를 공유하기도 하고, 새롭게 진행한 A/B 테스트의 성과를 논의하기도 하지만, 무엇보다 이 미팅에서 많이 논의되는 주제는 '더 좋은 분석환경을 만들기 위해서 우리가 함께 무엇을 해야 하는가'이다. Appsflyer나 Braze와 같은 3rd party data를 수집하고 정리하는 것, Facebook이나 Google 등 주요 마케팅 채널 API를 연동하는 것, raw 테이블들을 적절히 조합해서 분석에 편한 마트 테이블을 만드는 것, 로그 플랫폼에 대한 상세 스펙을 논의하고 데이터 정합성을 검증하는 것... 등등 마이리얼트립 데이터 수집/분석 환경에 대한 중요한 결정들이 이 회의를 통해서 논의되고, 진행된다. (주로 데이터 분석가들이 이런저런 요구사항을 내놓는 자리이다보니 분석가들이 아주 좋아한다 ㅎㅎ 데이터 엔지니어가 모여있는 Data Platform팀은 이 미팅만 하면 과제를 한아름 얻어가는데, 그래도 좋아한다?!) 왜??
얼마 전에 클럽하우스를 통해 마이리얼트립 데이터 조직 이야기를 했는데, 끝나고 나서 분석가와 엔지니어가 이렇게 사이좋게(?!) 붙어서 일하는 게 인상적이었다는 피드백을 많이 받았다. 사실 나는 본격 분석가로 일한 게 이 회사가 처음이라 다 이런 줄 알았지... (의외로 데이터분석가랑 데이터엔지니어가 서로 격조한 조직이 많더라;;; ) 돌아보면 나는 마이리얼트립에서 적절한 시기에 필요한 사람들을 정말 잘 만났고, 빠르게 서로의 관점을 공유하면서 같은 지점을 바라볼 수 있어서 금방 여기까지 올 수 있었던 것 같다.
시기가 시기이다보니 벌써 다음 분기 목표 과제를 정하고 있는데, "그래서 분석팀은 뭐 하실 거에요? 우리가 뭐 도와드리면 되나요?" 라는 Data Platform 팀장님 메시지를 받고 고마운 마음에(?) 주저리주저리 쓰다보니 글이 길어졌네. (그와중에 깨알같이 이것저것 해달라고 요청은 또 엄청 함 ㅋㅋㅋ) 아무튼 마이리얼트립 데이터 조직 여러분, 앞으로도 즐겁게 일해봅시다!
마이리얼트립 데이터 조직에 관심있는 분들과 수시로 만나서 이야기를 나누고 있습니다... 당장 이직 의향이 없으시더라도 혹시 마이리얼트립 데이터분석 조직에 대해 관심이 있으시거나, 이후 채용 소식을 가장 먼저 듣고 싶으시거나, 가벼운 티타임(!)을 원하시는 분들은 언제든 편하게 연락주세요!
(leoyang99@naver.com)