데이터팀 이적기: 백엔드 웹개발자에서 데이터 엔지니어로
해당 경험과 느낌은 전적으로 나 혼자만의 느낌이며, 회사나 팀을 대표하지 않고, 회사의 목표나 방향, 다른 팀원들의 생각과는 다르다는 것을 명확히 하면서 글을 시작한다.
본 글은 2019년에 사내에서 작게 발표했던 내용을 블로그에 정리한 글이다. 주로 회사의 내용이기 때문에 외부에 공개하지 않으려고 했지만 쥬니어 백엔드 개발자나 데이터 엔지니어에 대해서 궁금해 하는 사람들이 조금이라도 정보를 얻었으면 해서 회사명 등을 지우고 블로그에 올린다.
이미 outdated 된 내용이 많고 데이터 엔지니어 초창기에 쓴 내용이라 조금 부끄러운 점이 많지만 그 때의 생각을 공유하기 위해 큰 수정 없이 올린다.
백엔드 개발자
내가 웹 개발을 시작한 것은 스타트업에 대한 열망 때문이었다.
이 시대에 내가 원하는 서비스를 내가 만들기 위해서는 개발 능력이 필수적이였고, 내가 직접 해보자는 생각이 들어 개발을 배우기 시작하였다.
가장 쉽다는 Python을 배우기 시작했고, 웹 서비스를 만들어 보기 위해서 Django를 익히기 시작했다.
파이썬 스터디에서 만난 분의 도움으로 작은 회사에서 백엔드 개발자로의 커리어를 시작했고, 웹 개발의 세계에 빠졌다.
일년여 정도를 정말 열심히 했다. 모르는 것 투성이였지만, 혼자서 알아나가는 법을 학습했고 백엔드 개발자로서의 스택을 쌓아 나가기 시작했다.
*****라는 스타트업에서 좋은 인연을 만나 좋은 외주 프로젝트들도 진행했다.
그러던 중, *****에 입사하게 되었다. 여러 회사를 두고 고민했지만, ***를 선택한 가장 큰 이유는 시니어 개발자분들의 존재였다. **님, **님 등 파이썬에서 유명하신 분들도 계셨고, 무엇보다도 전 회사 사장님이 말씀하신 **님의 존재가 선택에 큰 영향을 미쳤다.
2월, 면접을 보고 ***에 입사하게 되었다.
백엔드 개발자로 출근하고, 사실 깜짝 놀랐다. 기존에 워드프레스로 만들어진 사이트를 django를 사용하여 빠르게 리팩토링한 상태였고, 코드는 레거시로 가득했다. 모델쪽은 사실상 기존 레거시로만 이루어져 있다고 해도 과언이 아닐 정도로 레거시가 많았다.
그럼에도 불구하고 참 즐겁게 개발했다. 훌륭한 개발자 분들과의 협업이 참 즐거웠고, 코드 리뷰도 재미있었다. 그 동안에는 개발 자체에만 신경을 썼다면, "개발 문화"에 대해서 진지하게 생각해 보기 시작했다. 몇 년 간 돌아가는 서비스를 유지보수하는 것도 새로운 경험이었다.
입사 하자마자 큰 릴리즈(KCP)가 있어서 세 달 정도를 정신없이 보냈다. 큰 기여는 하지 못했지만 타 팀과 협업하는 법도 배우고, 다른 개발자와 협업하는 법도 배웠다.
데이터 팀으로
그러던 중, 다소 뜬금없는 제안이 들어왔다.
데이터 팀으로 팀 이전을 하지 않겠냐는 제안이었다. 인원이 부족한 데이터 팀에서 신규 입사자를 채용중인데, 내부의 주니어 백엔드 엔지니어에게도 의견을 물은 것(이라고 추측한)다.
(사실 이 제안과 함께 비디오 팀으로의 제안도 있었지만 비디오 엔지니어링에 대해 너무 지식이 없었고, 데이터 팀에서 일해보고 싶다는 마음이 훨씬 더 컸다.)
처음 제안을 받고 꽤 오랜 시간을 고민했다.
많은 고민을 했지만, 주된 고민은 다음과 같았다.
- 재미
- 일이 재미있을까?
- 파이썬을 사용하기는 하겠지만 지금과는 전혀 다른 업무를 하게 될 것인데, 지금처럼 재미있게 일을 할 수 있을까?
- 커리어
- 이후 내 회사를 운영하는데 도움이 되는 경험들을 할 수 있을까?
- 개발자로서의 앞으로의 커리어에 도움이 될 것인가?
- 해외 취업(특히 미국)에 도움이 많이 될까?
- 데이터 엔지니어 풀이 백엔드 엔지니어보다 훨씬 적은데, 앞으로 이직 및 취업에 불리하지는 않을까?
- 업무
- 데이터 엔지니어로서의 업무는 무엇일까?
- 백엔드 엔지니어로서의 업무와 어떻게 달라질까
- 업무 환경과 형태가 어떻게 달라질까?
이것 저것 찾아보고, 다른 사람들에게도 물어보았다. 알 것 같은 항목들도 있었고, 전혀 모르겠는 항목들도 많았다.
그럼에도 나는 데이터 팀으로 가기로 결심했다. 여러 가지 이유가 있지만, 대표적으로는
- 새로운 경험과 도전을 하고 싶었다.
- 새로운 경험들, 특히 웹 서비스의 데이터 분석이 나중에 서비스를 만들 때에도 큰 도움이 될 것이라고 생각했다.
- 잘 모르는 분야이기 때문에 더 도전하고 싶었다.
- 무엇보다도, "도전"하는 삶을 살자는 생각과 맞물렸다.
- 내가 데이터 팀에서 데이터를 만질 수 있는 기회가 많지 않을 것이라고 생각했다.
- 쥬니어 데이터 엔지니어 채용이 드물고,
- 요즘 핫한 데이터, 나도 해보고 싶었다.
- 언제 내가 데이터 팀에서 일해보겠어!
- 갓**님이 팀장님으로 있었다.
- 내가 ***를 들어오게 된 큰 이유 중 하나
- 갓**님 아래에서 일해보고 싶다!
- Rollback
- 3개월 이후에 최종 선택권을 주신다고 하셨다.
- 하다가 잘 안 맞으면 롤백하면 되지 뭐!
그렇게 *** 입사 3개월만에, 백엔드 엔지니어 3년차에 나는 데이터 엔지니어가 되었다.
데이터팀에서의 업무
데이터팀 첫날. 처음 *** 입사한 날보다 더 얼탔던것 같다.
데이터에 대해 내가 아는게 정말 없다는 것을 깨닫기 시작했다.
**님이 많이 배려해주시고 도와주셨지만, 뭘 해야할 지 몰라 (할 수 있는것이 없어) 상당히 힘들었다.
아는 만큼 보인다고, 정말 하나도 보이지 않았다. (...)
그래도 뭐라도 해야지..하는 생각으로 우선은 백엔드 팀에서 큰 도움이 되었던 신규 입사자 가이드처럼 데이터팀 입사 가이드를 만들기 시작했다.
티켓을 보며 업무를 파악하고, 설명을 들은 것들을 정리하고, 현재 데이터 프로세스에 대해서 분석해 보았다.
그러면서 데이터팀 업무에 대해서 알아가기 시작했다.
Google Anaylatics/Google Tag Manager
- GA: 웹에서의 소비자 행동, log 정보 등을
- GTM: GA만으로 수집하기 힘든 웹 내 상호작용을 수집하기 위해서 custom event를 추가
- 웹에서 클릭.. 클릭...
- 수집된 데이터가 bigquery로 쌓이고... 분석은 어떻게 하는지 궁금해지기 시작하였다.
SQL
- SELECT, FROM, WHERE ... 만 알고 있었다.
- ORM의 위대함을 새삼 깨닫게 되었다. django에서는 이렇게 쉽게 했는데...
- 배우면 배울수록 SQL은 배우기는 쉽지만 잘하기는 어렵구나라는 생각이 들었다.
- 쿼리가 이렇게 길 수도 있구나?! 라는것을 느꼈다. sql문을 읽어보면서 잘 이해도 되지 않고, 많은 좌절감을 느꼈다.
- **님의 오늘의 sql 문제가 학습에 큰 동기부여와 도움이 되었다.
- 그럼에도 내가 이런 쿼리를 쓸 수 있을지에 대한 의문이 들었다. 아직도 SQL은 나에게 먼 산이다.
Data Warehouse
- "데이터 웨어하우스(data warehouse)란 사용자의 의사 결정에 도움을 주기 위하여, 기간시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스를 말한다" (???) 위키피디아의 DW 정의이다.
- 다양한 데이터를 수집(Extract)하여 분석에 용이한 형태로 변환(Transform)한 후 다시 적재(Load)하는 ETL 과정을 거쳐 dw가 구축된다.
- 데이터 팀에서는 luigi라는 python 라이브러리를 사용하여 ETL 프로세스를 진행하고 있었다. 오랜만에 만나는 파이썬에 반가운 마음도 잠시, django에서 보지 못한 새로운 형태의 코드들을 이해하는데 많은 시간이 걸렸다.
- 실제로 겪기 전에는 그저 각종 데이터들을 수집해서 새로운 데이터베이스에 적재한다고만 생각했는데... 데이터 전처리에 이렇게나 많은 시간과 노력을 쏟아부어야 한다는 사실에 새삼 놀랐다.
- 데이터 전처리는 NA를 채워넣는게 아니라 데이터 재구성이구나.
- 이렇게 노력을 들여서 DW를 구성해도.. (데이터 분석가 분들에게 민망할 정도로) 데이터의 구조와 내용에 대해서는 아직 갈 길이 멀다.
- ex)
user_gubun
, 각종 멤버쉽, category...
- ex)
- 또한 ETL은 정말 일 한 티가 나지 않는 작업이다. 제대로 하지 않아 데이터가 엉망이 되어야만 그제서야 문제를 느끼게 된다.
Tableau
- 태블로는 대표적인 데이터 시각화 프로그램 중 하나이다. ***에서는 태블로를 주요 데이터 시각화 도구로 사용하고 있다.
- 처음에 태블로를 접했을 때에는 간결한 ui로 쉽게 시각화를 만들어주는 툴이라고만 생각하고, 별 것 아니라고 생각하였다. 하지만 태블로 교육을 듣고, 컨퍼런스를 참석하면서 느낀 것은 "태블로는 도구일 뿐"이라는 것이었다.
- 태블로라는 툴에 대해 배워도, 무엇을 어떻게 분석하고 어떤 방식으로 시각화 할 것인가에 대한 지식이 전혀 없었기 때문에 제대로 된 분석과 시각화를 하지 못했다.
- 분석 맛보기 정도가 아닌 냄새 맡기 수준...
이렇게 여러 가지 데이터 팀의 업무를 접하면서 처음 든 느낌은, "이게 다 뭐지?"라는 느낌이었다.
백엔드 개발할 떄에는 (물론 배포 등 인프라에도 지식이 필요했지만) django를 주로 다루고, 명백한 로직을 코드로 짜는 일을 진행했다. 큰 그림보다는 지금 만드는 함수에 집중했고, 그 로직들을 테스트 하는 일들이 재미있었다.
반면 데이터 업무는 큰그림이 중요하다는 생각이 많이 들었다.
앞서 배웠던 모든 업무들이 결국 데이터 분석을 위한 데이터를 준비하는 하나의 프로세스이며, 결국 이어지는 작업이라는 것을 조금 시간이 지나서야 깨달았다.
내가 정리한 전체적인 흐름은 다음과 같다.
웹 서비스 -> GA/GTM을 활용한 데이터 수집 -> ETL을 통한 데이터 재구성 -> SQL등을 이용한 분석 -> Tableau등의 시각화
큰 흐름 속에서 내가 할 수 있는 일은 아주 적었고, 무엇을 어떻게 공부해야하는지에 대해 많은 고민을 했다.
파이썬으로 구성된 etl에 가장 많은 시간을 할애한 것 같다. 문제가 있는 기존 태스크를 수정하고, 새로운 태스크를 추가하고. 이런 업무들은 티가 잘 나지 않기 때문에 더 힘들었다.
특히 ODk는 데이터에 기반한 의사결정을 내리는 회사가 아니고, 사내 데이터 활용도가 상당히 떨어지기 때문에 일에 대한 성취도가 조금 떨여졌다. 이제 업무에 조금 익숙해 졌으니, 데이터 중심의 회사를 만들기 위해서 무엇을 할 수 있을지도 생각하는 시간을 가지려고 노력중이다.
데이터 엔지니어로 6개월 정도의 경험을 쌓은 지금, 어떤 업무를 했고 어떤 업무가 나에게 맞는지는 이적기와는 조금 다른 맥락이기 떄문에 다른 글에 상세히 정리할 예정이다.
routine한 데이터 업무 이외의 일들
데이터 엔지니어로서의 고정된 업무 이외에도 몇몇 다른 작업을 진행했다.
face crawler
***의 주 사업이 컨텐츠 스트리밍 서비스인만큼 컨텐츠 메타데이터의 중요도가 매우 높다. 아쉽지만 아직 회사에는 제대로 된 메타데이터가 없다시피 한 실정인데, 회사가 제공하는 컨텐츠들에서 얼굴 인식을 통해 메타데이터를 자동으로 모으자는게 해당 작업의 주 목적이다.
그러기 위해서는 일단 얼굴인식에 사용할 다량의 얼굴 데이터가 필요한데, face crawler의 역할은 이 데이터를 자동으로 크롤링해주는 것이다.
초반에는 async하게 크롤링 & 얼굴 인식을 진행하기 위해 aiohttp로 백엔드를 만들고 react로 프론트를 만들기로 기획하여 만들었지만 유지보수와 디버깅이 어렵다는 이유로 폐지되고 django admin과 celery를 사용하여 다시 제작중이다.
(얼굴 인식 모델은 종필님이 작업해주고 계시다. 기회가 된다면 이 부분도 공부해보고 싶다.)
데이터 업무와 다르게 react, django를 다시 사용하다 보니 또다른 재미가 있지만, 아무래도 서비스 팀이 아니다 보니 업무 집중도나 효율이 조금 떨어지는 것이 아쉽다. 그래도 백엔드 개발자로서의 경험이 이런 사내 툴을 만드는데 도움이 되는 것 같아서 좋았다.
DW: postgres to bigquery
현재 Dw는 postgres 서버를 사용중인데, 이를 빅쿼리로 이전하는 작업을 진행중이다. 여러 가지 장단점이 있겠지만, 가장 주된 목적은 회사의 데이터 분석가분들이 선호하는 툴을 사용해 분석의 효율을 높히기 위함이다. (속도와 관리의 이점도 있다.)
ETL 태스크 뿐 아니라 기존에 postgres에 있던 모든 데이터들도 bigquery로 이전하는 작업이다보니 꽤 큰 작업이 되었다. 해당 작업 또한 다른 글에 상세히 정리할 예정.
초반에는 기존에 postgres에 적재하는 태스크의 output을 bigquery로만 변경하는 작업 위주로 큰 노력이 들지 않을 거라고 생각했는데 착각이었다. 기존 postgres sql을 빅쿼리 sql로 변경해야함은 물론이고 기존 데이터들의 충돌도 상당해서 꽤 오랜 시간이 걸릴 것 같다.
상당히 고통스러운 작업이지만, 이런 데이터베이스 이전 기회가 자주 있는 것이 아니므로 좋은 경험이라고 생각하고 작업중이다.
해당 작업을 진행하면서 기존에 문제가 있던 것이라고 판단되는 데이터 스키마들도 변경하려고 노력중이다.
데이터 팀에 와서 느낀점
데이터 팀에 와서 가장 크게 느낀 점 중 하나는 데이터 자체에 대한 인식 변화이다.
데이터에 대해서 별 관심이 없을 때에는, 데이터 분석이란 잘 정제되어 있는 데이터를 수집한 이후에 마법처럼 결과물을 만들어내는 힙한(?) 과정이라고만 생각했다.
데이터는 마치 레고같은 것으로, 잘 조립하기만 하면 엄청난 것을 만들 수 있을것이라고 생각했다.
그리고 내가 데이터팀에 들어가게 되면 데이터 추출, 관리, 변환, 분석까지 모든 것을 아우르는 풀스택(?) 데이터 인재가 될 것이라는 막연한 기대감이 있었다.
물론 이 생각은 와장창(...) 깨졌다.
실제로 데이터 팀에서 하는 작업은 아주 그지같은 데이터를 노가다를 통해 정제한 후 결과물을 힘들게 만들어내는 고된 과정이었다.
데이터는 레고이기는 하지만, 조립하는 것이 문제가 아니라 산처럼 쌓여있는 레고더미들 사이에서 유의미한 레고조각을 찾아내는 작업들이었다.
데이터 팀에 들어온 나는 분석은 커녕 추출, 관리, 변환 중 하나도 제대로 하지 못하는 초짜 엔지니어가 되었다.
하고 싶은 일, 해야 할 일은 많지만 무엇을 해야할지, 어떤 데이터 엔지니어가 되어야 할지 고민이 많았고, 이 고민은 아직도 진행형이다.
일단은 내가 지금 할 수 있는 일, 내가 기여할 수 있는 일에 최선을 다하려고 노력중이다.
또한, 이제는 내가 장고 개발자가 아니라 파이썬 개발자가 되어가는 것을 느낀다.
백엔드 웹 개발을 할 때에는 django를 주로 사용하였고, 사실 파이썬 개발자라고 말하기 민망할 수준으로 장고에만 집착하였던 것 같다. (이는 나에게만 해당되는 말이다.)
하지만 데이터 엔지니어는 백엔드 지식이 더 많이 필요하고, CS(Computer Science) 지식이 많을수록 좋다고 느낀다. 내가 비전공자 출신이라고는 하지만, 나에게 CS 지식이 정말 부족하다는 것을 뼈져리게 느끼는 중이다.
누가 나의 직업을 물어보면 데이터 엔지니어라고 나를 소개하는게 민망했지만, 이제는 데이터 엔지니어라고 말 할 수 있을 것 같다.
- 데이터 엔지니어는 백엔드 지식이 많을수록 좋다
- 조금 더 백엔드로 갈수록 CS 지식이 중요하다 (**님)
- 나의 CS 지식이 정말 미미하구나...
- 배워야 할 게 정말 많다
이후 하고싶은 일들
- 어떤 데이터 엔지니어가 될 것인지에 대한 고민
- ETL 에 test, CI 추가
- dockerize
- 데이터 분석
- 통계
백엔드 엔지니어 vs 데이터 엔지니어
이 글을 읽는 사람들이 가장 궁금해 할 만한 것 중 하나라고 생각한다.
둘 다 많지 않은 경험을 가지고 비교하는 것이기 때문에, 재미로 보아 주었으면 좋겠다.
- 재미
- 백엔드 > 데이터 엔지니어
- 업무환경
- 백엔드 < 데이터 엔지니어
- 스트레스를 훨씬 덜 받음
- 커리어
- 백엔드 ?? 데이터 엔지니어