데이터 엔지니어: 오토피디아 5개월 인턴 후기
닥터차 서비스를 만들고 있는 오토피디아에서 리서치팀으로 일하고 있는 박기범입니다!
2021년 7월 12일부터 리서치팀의 인턴으로 시작하여 12월 17일을 마지막으로 약 5개월 간의 인턴 기간을 마무리하게 되었어요. 5개월이라는 짧은 시간 동안 새로운 분들도 많이 들어오셨고 회사가 폭풍 성장하는 것을 옆에서 생생히 지켜보았어요. 회사가 성장한 만큼 저 또한 많이 배우고 함께 성장한 것 같아서 뿌듯한 마음입니다! 그래서 오늘은 제가 오토피디아에서 인턴을 시작하게 된 과정부터 어떤 일을 했는지와 회사 생활을 하며 느낀점에 대해 말씀드리려고 해요.
배경
인턴 입사 과정을 설명드리기 전에 저의 배경을 조금 설명드릴게요. 저는 KAIST 산업및시스템공학부 17학번입니다. 2019년도 까지만 해도 Python으로 코딩만 조금 해본 상태였고 개발 지식은 전무한 상태였어요. 2020년 겨울방학 응용인공지능연구실 인턴과 2020년 데이터 분석가 인턴 경험을 하며 머신러닝, 데이터 분석, 개발 등에 관심이 생기기 시작했어요. 이후에 친구들과 함께 데이터 분석 외주를 맡아 프로젝트도 진행해보고 KAIST 앱 창업지원프로그램을 통해 앱을 개발하기도 했습니다. 이렇게 1년 정도 혼자서 개발을 하다 보니 회사에서 일을 해보고 싶다는 생각이 들기 시작했어요. 마침 그 때 운 좋게 알고 지냈던 케빈이 COO로 있는 오토피디아에서 인턴으로 일해볼 것을 제안해 주었습니다!
입사 과정
오토피디아 리서치팀에서 제안한 포지션은 데이터 분석가였습니다. 데이터 관련 개발 경험도 있고, 프론트엔드 및 백엔드 서비스 개발 경험도 있었기 때문에 데이터 분석가 직무를 경험해보는 것도 나쁘지 않을 것 같다고 생각했어요. 또한 혼자 앱을 개발을 할 때 회사에서는 앱 로그를 어떻게 추적하고 분석하고 있는지도 궁금했어요.
인턴을 지원하기로 결정한 후에는 이력서를 제출하고 곧바로 면접을 진행하였습니다! 면접은 화상으로 진행되었고 Python, SQL, 머신러닝 및 딥러닝에 관한 질문을 주셨습니다. 그 당시에 면접을 위해 특별히 공부한 것은 없었어요. Python은 많이 사용했던 언어였고 SQL도 모바일 앱의 백엔드를 구축할 때 PostgreSQL을 사용해서 익숙했습니다. 당연히 모든 질문에 대답을 하지는 못했지만 최선을 다해서 대답을 했고 최종 합격 통보를 받을 수 있었습니다!
(지금 생각해보면 이력서나 면접 준비 과정이나 많이 소홀했다는 것도 느끼지만 그 당시에는 취업 시장에 대해 워낙 알던게 없었던 시절이라..ㅎㅎ 이제는 이와 관련해서 더 많이 알게 되었고 이 부분은 또 다른 글로 작성하도록 할게요!)
여담으로 저는 처음엔 데이터 분석가 포지션으로 뽑히긴 했지만 데이터 분석 업무보다는 데이터 엔지니어링 업무에 더 흥미를 느낀다는 것을 깨달았습니다. 이런 저의 업무 선호도를 조심스럽게 말씀드렷고 이를 리서치팀 팀장님인 보성님께서 적극적으로 수용해주시며 인턴 기간의 중반 이후 시점부터는 데이터 엔지니어링 업무를 주로 맡았습니다.
업무 내용
제가 맡은 일은 크게 네 가지로 나누어볼 수 있을 것 같아요.
- 데이터 분석 대시보드 제작
- 데이터 파이프라인 구축(Airflow on K8s, Fivetran, BigQuery, dbt)
- ElasticSearch 검색 엔진 구축
- 타 팀 서포트 (업무 자동화 및 데이터 분석 요청)
데이터 분석 대시보드 제작
데이터 분석 대시보드는 회사에 입사하자마자 처음 했던 작업이에요. 회사의 각종 데이터가 대표적인 OLAP 데이터베이스인 BigQuery에 쌓이고 있었고 그 데이터를 이용해서 데이터 분석 대시보드를 제작하기 시작했어요.
처음엔 그렇게 어렵지 않을 것이라고 생각하고 작업을 시작했는데 정말 만만치 않은 작업이었습니다. 우선, 많은 종류의 사내 데이터를 설명하는 문서가 존재하지 않아서 어떤 데이터가 존재하는지와 스키마를 일일이 질문하며 체크해야했습니다. 특히 저는 MySQL과 같이 데이터가 정규화(Normalized)된 OLTP 데이터베이스 스키마에 익숙했었고 앱 로그 데이터와 같은 비정규화된 데이터에 익숙해지는데 적응 기간이 필요했어요.
어느정도 사내 데이터를 파악하고 나서는 본격적으로 데이터 분석 대시보드를 제작하기 시작했어요. 데이터 분석 대시보드 제작을 위해서는 Superset이라는 오픈소스를 사용했습니다. Superset에서 BigQuery에 연결하면 아주 간편하게 예쁜 대시보드를 만들 수 있었어요.
저희는 팀별 대시보드를 구축하기로 했고 마케팅팀의 대시보드를 먼저 만들기 시작했습니다. 대시보드에 들어갈 데이터, 지표, 그래프 UI에 관해 마케팅팀과 열심히 논의하였고 광고 채널별 유입 정보, CPI, CPA 등의 데이터를 보여주는 대시보드를 만들었습니다.
하지만 마케팅팀의 대시보드를 구축하면서 데이터 자체에 대한 관리가 부족하다는 것을 많이 느꼈어요. 예를 들어 저장해야하는 데이터가 제대로 저장이 안되는 것도 있었고 BigQuery 테이블을 생성하는 규칙이 없어서 혼란스럽기도 했습니다. 이렇게 불안정한 데이터 위에서 대시보드를 구축하는 것은 의미가 없을 것 같다는 생각이 들었어요. 그래서 데이터 파이프라인을 구축하는 일부터 다시 제대로 해봐야겠다는 생각을 했고 바로 실행으로 옮겼습니다.
데이터 파이프라인 구축
데이터 파이프라인 구축 업무를 더 자세히는 데이터 ELT 파이프라인 구축이라는 말로도 표현할 수 있어요.
ELT는 다음과 같습니다.
- E(Extract, 데이터 추출)
- L(Load, 데이터 적재)
- T(Transformation, 데이터 변형)
사내에는 굉장히 많은 데이터가 존재하는데 저희는 데이터 정제, 분석 등을 위해 모든 데이터를 Google BigQuery에 쌓아놓고 관리하기로 결정했어요. 따라서 각각의 데이터 소스로부터 데이터를 추출하는 작업(E)과 이를 BigQuery에 적재하는 작업(L)을 해야합니다. 이러한 작업은 Fivetran이라는 SaaS 툴을 사용하여 아주 쉽게 수행할 수 있었어요. 하지만 Fivetran에서 지원하지 않는 데이터 소스는 Python을 이용하여 직접 작업을 하였습니다.
이렇게 쌓인 데이터를 곧바로 이용할 수 있으면 좋겠지만 대부분의 데이터는 그대로 쓸 수 있는 형태가 아니기 때문에 데이터를 정제하는 작업을 해주어야 합니다. 데이터 정제를 위해서는 dbt라는 오픈소스를 사용하였어요. dbt는 SQL 쿼리를 이용하여 데이터를 조작 및 저장할 수 있게 도와주는 오픈소스입니다. dbt를 이용하여 BigQuery에 데이터 마트 테이블들을 만들어주었습니다. 여기서 데이터 마트란 정제된 데이터를 모아놓은 곳이라고 생각하시면 됩니다! 데이터 마트의 데이터를 이용하여 분석 작업 혹은 대시보드를 더욱 쉽게 구축할 수 있도록 세팅하는데 초점을 맞추고 작업을 진행했습니다.
아주 간단하게 말했지만 사실은 데이터 파이프라인을 구축하기까지 많은 시행착오가 있었는데 이에 관해서는 또 다른 글에 더 자세히 적어볼 예정입니다.
데이터 파이프라인을 구축하면서 데이터를 어떻게 효율적으로 다루어야 하는지 깊게 고민해보는 시간을 가질 수 있었고 그에 따른 다양한 방법론도 접할 수 있었어요. 또한 데이터 파이프라인이 한 번 구축해놓으면 끝일 것 같지만 생각보다 유지보수 및 개선 작업이 많이 필요하다는 것을 느꼈습니다. 특히 데이터 분석 업무를 하면서 데이터 요구 사항이 추가되거나 변경될 수 있기 때문에 그에 맞는 대응을 지속적으로 해줘야할 것 같아요.
검색엔진 구축
닥터차 서비스가 버전 2.0으로 업데이트 되면서 게시판 커뮤니티 기능이 생겼어요! 따라서 당연히 게시물을 검색할 수 있는 기능도 필요했습니다. 2.0 출시 초기에는 시간이 없어서 MySQL의 LIKE 쿼리로 검색 기능을 구현했어요. 하지만 LIKE 쿼리만으로는 원하는 검색어를 얻기에 쉽지 않아요. 따라서 더 검색이 잘 될 수 있는 검색 엔진을 구축할 필요가 있었고 그것을 제가 맡아서 하게 되었습니다. 검색 엔진은 ElasticSearch라는 오픈 소스를 사용하기로 했어요.저는 ElasticSearch를 한 번도 사용해본 적이 없었기 때문에 처음부터 차근 차근 조사하며 공부해나갔습니다! (ElasticSearch 입문하기) 긴 조사 끝에 ElasticSearch를 AWS 클라우드에서 제공하는 AWS OpenSearch Service를 이용하기로 결정하였습니다.
검색 엔진을 구축하기 위해서는 서비스 MySQL DB에 저장되어 있는 게시물과 관련된 데이터를 ElasticSearch로 옮기는 작업이 필요했어요. 따라서 이를 위한 ELT 파이프라인을 구축하여 5분마다 데이터를 갱신하도록 하였습니다. 또한 검색 엔진의 성능을 높이기 위해서 ElasticSearch의 인덱스 구조를 잘 설계할 필요가 있었고 여기에도 꽤 많은 시간을 사용했어요.
마침내 ElasticSearch를 사용한 검색 엔진이 배포되었고 기존의 검색 기능으로는 검색되지 않았던 게시물들이 잘 검색이 되고 있습니다! 가장 크게 향상된 부분은 완전히 같은 단어를 검색하지 않아도 검색이 된다는 것인데요, 이는 형태소 단위의 분석과 n-gram 기반의 인덱싱을 적용했기 때문입니다. 또한 사용자의 검색 기록을 바탕으로 자동완성 기능도 개발하여 제공하고 있습니다.
검색 엔진 구축은 모든 업무를 통틀어 닥터차 서비스에 직접적으로 사용된 처음이자 마지막 업무여서 굉장히 뿌듯했어요. 또한 커뮤니티 내의 게시물이 잘 검색될 수 있도록 하는 것이 커뮤니티의 발전에 아주 큰 역할을 하기 때문에 꼭 필요한 일을 한 것 같아요. 검색 엔진 구축을 하면서 CTO 및 백엔드 개발을 담당하고 계신 승수님과의 함께 작업할 일이 많았는데 이것도 정말 재미있었어요!
타 팀 서포트(업무 자동화 및 데이터 분석 요청)
다른 팀을 서포트하는 일도 리서치팀의 주요 업무 중 하나입니다. 주로 서포트 업무는 개발 인력이 없는 팀의 업무 자동화를 도와주거나 데이터 분석 요청을 처리해주는 일로 이루어져있어요.
업무 자동화 작업은 대부분 제가 맡아서 수행했는데 이때 노션을 적극 활용했습니다. 노션을 프론트엔드로 사용하고 제가 백엔드를 구축했다고 생각하면 될 것 같아요. 또한 리서치팀에서 Kubernetes 환경에서 Airflow를 구축해놓았기 때문에 주기적으로 수행해야하는 작업을 쉽게 처리할 수 있어요. 주기적으로 크롤링해야하는 작업, 신규 등록 차량을 회사의 데이터베이스에 적재하는 등의 다양한 작업을 자동화 시켜놓았습니다. 특히 신규 등록 차량을 데이터베이스에 지속적으로 업데이트 하는 것이 비즈니스에서 정말 중요한 부분인데 이를 자동화시킴으로써 수고스러움이 많이 줄었기 때문에 가장 기억에 남아요. 업무 자동화 작업은 타 부서의 업무 효율과 생산성을 높일 수 있는 일이기에 항상 기쁜 마음으로 도움이 되기 위해 노력했던 것 같아요.
또한 리서치팀에 들어오는 데이터 분석 요청은 팀에서 적절히 분배하여 진행했어요. 데이터 분석 요청을 처리하는 방법은 일회성의 성격이 강한지 또는 재사용성의 가능성이 있는지에 따라 크게 두 가지로 나눌 수 있을 것 같아요. 일회성의 성격이 강한 분석 요청은 리서치팀 내부에서 Adhoc한 분석 요청이라고도 부르는데, 이러한 분석 요청은 BigQuery 콘솔이나 GA4를 사용해서 빠르게 진행하고 간단하게 전달하는 방식으로 처리해요. 재사용성이 강한 분석 요청은 만약 분석을 하는데 데이터 마트가 필요하다면 데이터 마트를 제작하고 해당 분석 결과를 보여주기 위해 대시보드 상에서 차트나 그래프를 제작합니다.
개인적으로는 타 팀을 서포트 하는 것이 현재의 리서치팀을 가장 잘 표현하는 업무라고 생각이 들어요. 위에서 설명드린 데이터 파이프라인 구축이나 대시보드 제작과 같은 일도 이를 위한 밑바탕이 되는 작업이네요!
회사 생활
회사에 선택근무제가 도입되어 자유롭게 출퇴근을 할 수 있어서 좋았습니다. 특히 저는 인턴과 학교 비대면 수업을 병행해서 이 이점을 아주 잘 활용할 수 있었답니다🙂 (하지만 저처럼 병행하는 것은 비추합니다.. 너무 힘들었어요…)
회사가 성수역과 뚝섬역 사이에 있다보니 온갖 핫플과 맛집이 회사 주위에 밀집해있어서 놀러갈 곳이 넘쳤어요. 서울 생활을 처음 시작한 저에게는 회사의 위치가 최고의 복지였습니다!
더불어 회사의 많은 장점 중 가장 좋았던 점은 좋은 분들과 자유롭게 소통하며 수평적으로 일하는 분위기가 느껴진다는 점이었습니다! 오토피디아는 의견을 자유롭게 말하고 좋은 의견이라면 바로 반영이 되는 환경을 갖추고 있다고 느꼈어요. 따라서 누구나 회사의 주인이 되어서 회사를 이끌어 나갈 수 있다고 생각해요.
앞으로의 미래
오토피디아에서 근무하면서 세상에는 데이터가 넘쳐나지만 실제로 사용할 수 있는 데이터는 많지 않거나 사용할 수 있게 만드는 것이 쉽지 않음을 알게 되었어요. 그리고 그러한 데이터를 사용할 수 있게 만들어주는 사람들이 바로 데이터 엔지니어인 것 같다는 생각이 들어요. 데이터의 중요성이 계속 커지고 데이터가 무서운 속도로 늘어나는 만큼 데이터 엔지니어의 미래도 밝다고 생각합니다. 따라서 저는 앞으로 더 좋은 데이터 엔지니어가 되기 위해 커리어를 쌓아 나가고 싶어요. 그 첫 걸음으로 내년 초부터는 더욱 큰 조직의 데이터를 다루어보고 싶어 좀 더 규모가 있는 회사의 신입 데이터 엔지니어로 일하게 될 예정입니다.
오토피디아에서 인턴을 할 수 있었기에 데이터 엔지니어라는 직업을 꿈꿀 수 있었고 실제로 그 길을 걷게 될 것 같아요. 제가 이렇게 성장할 수 있도록 도와주신 오토피디아에 무한한 감사를 표합니다 🙏
+신입 데이터 엔지니어 준비하기
어떤 글에서 읽었는데 데이터 엔지니어라는 직군이 생겨난지 얼마 되지 않았기 때문에 보통은 개발 경력이 많으신 시니어 엔지니어 분들이 데이터 엔지니어링 업무를 했다고 해요. 그럴 수 밖에 없다고 생각하는게 좋은 데이터 엔지니어가 되기 위해서는 폭 넓은 지식과 개발 경험이 필요한 것 같아요. 그래서 데이터 엔지니어가 신입으로 채용되는 것이 쉬운 일은 아닐 거라고 생각하지만 그렇다고 아예 불가능한 것도 아닌 것 같아요!
혹시 아예 처음 준비하시는 분들이 계실까봐 아주 당연하지만 중요한 팁을 적어볼게요. 우선 데이터 파이프라인 및 엔지니어링과 관련된 흐름을 한 번 공부하는게 좋은 것 같아요. 어떤 흐름 속에서 다양한 툴과 방법론이 생기게 되었는지를 이해하는 것이 매우 중요하다는 것을 느꼈습니다! 어느정도 흐름이 파악되었다면 회사마다 사용하는 도구가 다르기 때문에 데이터 엔지니어를 채용하는 회사의 홈페이지에 가서 어떤 능력을 요구하는지 체크하고 해당 키워드를 중심으로 준비하는게 좋다고 생각해요. 예를 들어서 일반적으로 데이터 분석을 위해 대기업은 Hadoop, Spark와 같은 도구를 사용하고 스타트업은 BigQuery를 많이 사용하는 것 같아요. 이외에도 데이터 엔지니어와 관련된 키워드를 생각나는대로 나열해보면 끝이 없기에 (Docker, Kubernetes, Airflow, Kafka, dbt, Redash, Superset 등..) 가고자 하는 회사를 타겟팅해서 그 회사에서 요구하는 기술을 습득하는 것이 좋을 것 같다고 생각합니다! 그 중에서도 클라우드나 Docker와 같은 기술은 어딜가도 사용되는 것이니 반드시 준비해야하는 부분이라고 생각합니다.
이렇게 열심히 말했지만 저도 정말 많이 부족하기 때문에 앞으로 좋은 데이터 엔지니어가 되기 위해 끊임없이 공부해야할 것 같습니다..!!
지금까지 긴 글 읽어주셔서 감사합니다🙂