일상 이야기/회고

신입 데이터 엔지니어의 2017년 회고

가마뫼 2017. 12. 31. 16:02

2017년

1월

학위 논문 Defense를 마치고 최종 논문 준비, 아래에서 서술할 Data 전처리 관련 논문, 그리고 전문연구요원 취업 준비로 바쁜 시기였다. ETRI나 KIST 같은 연구소 그리고 Coupang, LINE, NCSoft 등 전문연구요원 지원이 가능한 사기업에 서류 제출 및 면접을 보고 결과를 기다리고 있었다.

2월

대부분 기업은 1월 중 면접까지 끝나고 2월에는 부산 집에서 쉬면서 결과를 기다리고 있었다. 전문연구요원 취업을 준비하면서 느낀 점은 중견기업 이상의 규모 회사는 TO가 정말 적다. 따라서 회사 차원에서는 지원자를 고르고 골라서 뽑아야 하므로 신중해야 하고 그에 따라 채용 프로세스가 길어졌다. 나를 최종 면접까지 부르고 탈락시킨 모 회사에서는 정말 뽑고 싶었고 신입 공채라면 뽑혔을 거라고 확신하지만, TO의 문제로 정말 아쉽게 불합격으로 판단하게 되어 미안하다는 메일이 왔었다. 혹시라도 석사 전문연구요원으로 군 복무 대체를 생각하는 사람이 있다면 한 번 더 잘 생각해보기를 바란다. 근무 조건과 대우를 가지고 고민을 하다가 최종적으로는 E-commerce 회사인 Coupang에 가기로 했다.

3월

전문연구요원으로 Coupang에서 회사 생활 시작. 사내 공통 교육을 받은 후 Team 지원 때 가장 관심이 있었고 전공을 살릴 수 있을 것 같았던 부서인 Search Quality에 지원했고 해당 팀에서 일하게 되었다. 팀에 들어와서는 상품 랭킹의 한 축인 Query independent ranking 관련 업무의 부사수로 시작하였다. 

4월

석사 학위를 받고 졸업했지만 어쨌건 Production에서의 업무는 처음인 생짜 신입이라 사수와 매니저 그리고 시니어 엔지니어들은 차근차근 팀에서 사용하는 기술 Stack과 워크플로우에 익숙해지라고 조언을 해주셨다. 이 과정에서 나는 Search 또는 Information retrieval로 불리는 도메인 지식의 부족함과 Scala를 기반으로 한 Spark Framework에 익숙하지 않아서 좀 고생을 했다. 학부나 대학원에서 사용하던 C++, Python, R이 아닌 다른 언어를 사용하는 것(심지어 패러다임도 다르다!)과 내가 생각하던 업무(Data를 기반으로 한 Modeling)만이 아닌 데이터 수집, 가공, 그리고 모델링까지 End-to-End로 한다는 것이 당시에는 솔직히 힘이 들었다.

5월

지금 생각해도 아찔하다

입사 이래 첫 번째 위기. 사수가 휴가로 부재중일 때 Ranking 관련 장애가 발생하였다. 5월 즈음 나는 이제 2개월이나 지났고 내 나름대로는 어느 정도 코드 분석도 많이 했고, 관련 문서도 읽어보았고 관련 워크플로우에 대해서 잘 알고 있다고 '착각'하고 있었다. 결과적으로 빠르게 장애대응이 되지 않았고 일련의 과정에서 나에 대해서 너무 창피하고 자신감도 많이 결여되었다. 어쨌건 이때의 장애 대응 경험을 통해서 정신을 바짝 차리게 되었고, 위 사진에서의 다짐처럼 이후에 발생한 장애 대응들은 잘 처리하면서 나에 대한 약속을 지켰다.

6월

석사 2년 차부터 해당 실험을 시작했으니 거의 1년 6개 월만의 결실이었다


대학원 졸업 후 계속 Revision 작업을 하던 논문(Link)이 드디어 출판되었다. 졸업 이후에도 논문 관련 작업을 계속해야 해서 피곤하기도 하고 짜증도 좀 났지만 출판되고 나니 대학원 기간이 헛되지는 않았다고 뿌듯함을 느꼈다. 해당 논문은 R 기반의 Open-source package라 논문 출판 후 CRAN 또는 Bioconductor에도 제출을 하겠다고 교수님과 구두로 얘기를 했지만, 아직 지켜지지 않고 있다 ㅠ_ㅠ. 그와 별개로 회사 업무와 논문 작업을 같이하느라 한 가지에 집중을 못 해서 팀원들에게 죄송한 마음을 가지고 있었는데 훌훌 털고 회사 업무에 100% 집중할 수 있게 되었다.

7월

첫 번째 실제 서비스에 나가는 데이터 생성 및 모델 구현! 사수의 많은 조언과 도움을 받았지만, 어쨌건 A/B test를 통해서 실제 서비스에 적용된 데이터와 모델을 구현하였다. 처음으로 드디어 회사에서 밥값을 했다고 느끼게 되었고, 일하는 뿌듯함을 느낄 수 있었달까? 특정 카테고리에 대해서 연령대별 상품의 랭킹 및 추천 시스템의 구현이었고 A/B test에서 좋은 결과를 받아 서비스에 적용할 수 있었다.

8월 ~ 9월

다른 팀에서 서비스하던 Role을 담당자가 팀 이동을 하게 되어 내가 이관받게 되었다. 사용한 기술은 마찬가지로 Scala 기반의 Spark 프로젝트여서 아주 어렵지 않았지만, 그동안 사수의 서포트로서 일을 했다면 이제는 내가 Main Ownership을 가지는 Role이 생긴 거라 걱정도 되고 그래도 나름 인정받는 것 같아 뿌듯하기도 했다.

사수가 처음에 할 수 있겠냐고 물어봤을 때, 제가 해볼게요라고 했는데 무슨 자신감이었을까?

이관받은 프로젝트를 유지보수에서 그치지 않고 랭킹 모델을 개선해서 두 번째 A/B test를 준비했다. 비록 결과는 좋지 않아서 실제 서비스에 나가지는 못했지만 내가 Main Ownership을 가지는 프로젝트를 처음부터 끝까지 분석하고 A/B test 준비를 했다는 점에서 또다시 많이 배울 수 있었던 2달이었다.

10월

회사 내에서 비 개발자분들이 사용할 수 있는 Tool 개발이 필요해, 운이 좋게도 내가 Open-source Search Engine 중 하나인 Solr를 활용한 프로젝트를 시작하게 되었다. 나에게는 개인적으로 많은 공부가 된 프로젝트였었다.

  • Solr engine의 Indexing, Query tuning 등에 대한 공부
  • Front-end (Bootstrap base)와 Back-end (Python Flask)
  • Hadoop echo-system과 S3간 데이터 통신
작업하면서 여러 가지 이유로 Front-end 개발자분들에 대한 존경심을 느끼게 되었다. 다음에는 비슷한 기회가 생긴다면 Back-end를 Scala의 Play 등을 활용해서 구현해보면 좋을 것 같다.

11월

기존에 하던 작업은 유지보수 단계에 들어가서 당분간은 크게 개선할 일이 없어서, Ranking 모델에 사용할 새로운 Data feature를 만드는 일을 시작했다. 엄청나게 쌓여있는 데이터를 Spark의 Machine Learning을 활용해서 모형화했고, 프로포절에서 팀에서 많은 긍정/부정 피드백을 받았다. 자세한 내용은 적을 수 없지만, 고객의 리뷰 데이터를 NLP와 Word2Vec을 이용해서 가공한 Feature와 상품의 Abnormality나 Abuse를 판단하는 모델을 생성하였다. 이 과정에서 대학원 졸업 이후에 내가 최신 NLP나 Machine Learning 추세에서는 좀 멀어져 있다고 느끼게 되었다.

12월

입사 후 두 번째 위기(?). 사수가 이직하게 됐다는 얘기를 제일 먼저 듣게 되었다. 길다면 길고 짧다면 짧은 약 10개월 동안 너무 많이 배웠고 인간적으로도 좋아한 분이었기 때문에 너무 아쉬웠다. 어쨌건 좋은 대우를 받고 이직하시게 되어 너무 축하드렸고, 나는 나대로 관련 업무를 이관받기 시작하였다. 이제 어느 정도 회사의 비즈니스 로직과 워크플로우에 익숙하다고 생각은 했지만, 그건 부사수로서 메인이 아닌 서포트일 때의 이야기이고 이제 내가 관련 업무의 메인 오너십을 가지게 된다고 생각하니 걱정이 70% 그리고 이것을 발판으로 더 성장하고자 하는 설렘과 욕심이 30%로 싱숭생숭한 기분이 들었다. 

2018년

한 줄 목표: Back to basics!

정신없는 1년을 보내면서 속으로는 이러면 안 되는 데, 이렇게 대충하고 가면 안 될 것 같은 데라는 생각이 계속 들었다. 대표적으로 Search 조직에 있으면서도 Information retrieval 관련 기술 서적을 끝까지 본 적이 없었고, 모델링에서 수학(선형대수학, 수리통계학)의 부족함을 많이 느끼게 되었다. 그 외 주로 사용하는 Scala와 Spark 역시 어느 정도 수준까지 올라온 후 정체되고 있다는 점이 아쉬웠다. 따라서 2018년의 큰 목표는 다음과 같이 세웠다.

Information retrieval 도메인 지식 공부

효율적인 방법을 고민하고 있다. 책을 통한 독학, MOOC을 활용하기 또는 병행하는 방법.

기초 수학 다시 공부

책은 학교 다닐 때 보던 책이 있어서 그것을 다시 활용하려고 한다. 그때는 시간이 없다는 핑계로 연습문제도 짝수나 홀수 번만 풀거나 아예 넘기고 간 부분이 많은데 이번에는 할 때 제대로 하려고 한다. 또 가능하다면 공부한 내용을 블로그 포스팅과 코드를 통해서 재생산하는 작업도 목표로 한다.

  • Linear Algebra, Strang
  • Mathematical statistics, Hogg

Scala, Spark 기술 Stack

2018년에는 Scala와 Spark를 이용해서 Open-source 활동을 많이 해보려고 한다. 말이 거창하게 Open-source이지 우선은 Toy example과 같이 특정 상황(예를 들어 Spark Word2Vec에서 Word1, Word2의 Cosine similarity를 구하는 Wrapper class 등)에서 어떤 식으로 Scala와 Spark를 활용했는지 공유하고 또 피드백을 받는 것이 목표이다. 그 외에 시간이 허락한다면 마틴 오더스키의 Programming in Scala나 다른 양서도 읽어보고 싶지만, 앞의 2개의 목표도 약간 버거울 수 있어서 확신할 수는 없다.