네이버 쇼핑 AI 개발 인턴십 후기

Junhyung.Park
네이버 쇼핑 개발 블로그
8 min readFeb 26, 2021

안녕하세요. 저는 NAVER Forest CIC, 쇼핑 Aggregation 플랫폼의 쇼핑 AI 개발 팀에서 2020년도 12월부터 2021년도 2월까지 12주간 인턴십을 진행한 박준형입니다.

3개월간 진행한 인턴십에서 느꼈던 경험들을 후기로 남겨보고자 합니다. 과제 소개 및 개발 과정 외 지인들이 많이 물어봤던 질문들을 인터뷰식으로 작성하였습니다. 미래의 저에게 초심을 돌이켜보게 해 줄 그리고 다른 누구에게는 좋은 정보가 될 기록이였으면 좋겠습니다 :)

1. 입사 전

Q. 어떻게 네이버 쇼핑 AI 개발팀에 지원하게 되었나?

저는 전역 이후 과 내 동아리에서 머신러닝 스터디를 참여하여 상권분석 프로젝트를 시작했었습니다. 이때, 어려서부터 수학을 좋아했었기 때문에 머신러닝이 함수와 밀접한 관계에 있다는 점이 흥미로웠습니다. 이후 학부 연구생을 진행하며 강화학습 기반 배차 가격 결정 프로젝트와 인공지능, 통계학 과목 등을 수강하며 진로 방향을 인공지능 분야로 정하게 되었습니다.
또한, 저는 효율성을 추구하기에 편리하면서 가격 측면으로도 유리한 네이버 쇼핑을 평소에도 자주 이용을 했었습니다. 하지만 가끔 원하는 상품과 상관없는 상품들이 대거 등장해서 사용이 힘들었던 경험도 있었기에 저는 인공지능을 통해 더 정확한 카테고리로 분류해 보고 싶다는 생각을 종종 했었습니다. 따라서 4학년부터는 Naver Career에 자주 들어가 지원공고를 확인했고 제가 원하던 네이버 쇼핑 검색 플랫폼의 AI 개발팀 지원공고를 보고 지원하기로 결심했습니다.

Q. 지원서 및 면접은 어떻게 준비했나요?

지원서에는 제가 어떤 사람인지, 대학 생활 동안 진행한 AI 및 개발 관련 프로젝트들을 진솔하게 설명했으며, 합격한다면 무엇을 하고 싶은지에 대해 작성했던 것 같습니다. 이후, 서류 합격 메일을 받은 뒤에는 면접을 앞두고 앞서 진행했던 프로젝트들을 회고하는 시간을 가졌던 것 같습니다.
면접은 아쉽게도 코로나 사태로 인해 화상으로 진행되었습니다. 제 인생 첫 면접인 만큼 떨려서 밥도 잘 못 먹었던 기억이 납니다. 면접을 보는 동안 너무 떨려서 말을 제대로 못 했음에도 면접관 분들께서 편하게 질문에 답변할 수 있도록 신경 써주시는 게 보였습니다. 면접을 앞두고 계신 분이라면 프로젝트들을 본인이 어떤 부분을 어느 정도 기여 했는지, 프로젝트에서 사용했던 기술들을 제대로 알고 사용했는지 잘 설명할 수 있도록 연습한다면 도움이 되실 것 같습니다.

2. 인턴십

Q. 출근 첫날은 어떠했나요?

약 2주일 이내에 인턴십 합격 메일을 받게 되었고 대학교 4학년 2학기 모든 시험 종료와 동시에 인턴십을 진행하게 되었습니다. 대학을 벗어나 직장인이 된 것 같은 기분에 설레면서도 엄청 떨렸습니다. 하지만, 네이버 그린팩토리에 들어오고나서 한동안은 입가에서 미소가 내려가지 않았습니다. 2020년도 12월 7일 네이버 그린팩토리에 첫 출근을 했을 때가 아직도 생생합니다. 코로나로 인해 많은 임직원분이 이미 재택근무를 시행하고 있었기 때문에 사내는 생각보다 조용했습니다. 멘토님께서 일찍 퇴근하라고 하셨지만, 설레는 마음에 회사 가이드 및 과제를 살펴보며 4층 편의점에서 라면을 먹고 정시 퇴근을 했던 기억이 납니다.

Q. 인턴 과제 소개해주세요.

제가 맡은 과제는 네이버 쇼핑 상품의 카테고리 자동 매칭 모델을 개발하는 과제였습니다. Github OSS(사내 Github)를 통해 과제를 부여받고 대용량 데이터와 과제 관련 링크들도 함께 받았습니다.
https://d2.naver.com/helloworld/1264836
위의 링크에서와같이 이미 선배님들께서 기존에 진행했던 모델들이 있었는데, 저의 과제는 기존 모델의 한계점을 보완하고 새로운 시각에서 새로운 구조의 모델을 개발하는 과제였습니다. 네이버 쇼핑은 상품을 체계적으로 구성하고 사용자가 더욱 쉽게 검색할 수 있도록 상품을 카테고리에 매칭합니다. 네이버 쇼핑에서는 매일 등록되는 수천만 건의 상품을 약 5천개의 카테고리에 수작업으로 매칭하기엔 한계가 있으므로 딥러닝을 활용한 자동 매칭 모델을 개발합니다. 아래 사진들 과 같이 상품명 또는 이미지 등의 데이터들을 활용하여 카테고리를 매칭 또는 예측합니다.

Q. 개발 과정

제가 인턴십 동안 진행한 개발 과정은 크게 6가지로 구분할 수 있습니다.

  1. 기존 모델 분석
  2. 데이터 EDA & 전처리
  3. 논문 리서치 & 새로운 모델에 대한 가설 설정
  4. Baseline 모델 구현
  5. 새로운 구조의 모델 설계 및 구현
  6. 결과 분석 및 피드백

3주차까지 카테고리 자동 매칭 과제에 대한 기존 연구과 데이터들의 특성을 살펴보고 새로운 모델을 위한 논문 리서치를 시작했습니다. 논문들을 리뷰하면서도 모르는 기술들에 대해서도 찾아보며 이해하는데 시간을 꽤 썼던 것 같습니다.

3주차부터는 논문 리뷰들을 발표하며 데이터를 더 집중해서 뜯어보는 게 좋겠다는 팀원분들의 조언에 데이터 EDA와 불균형한 데이터 수를 해결하고자 전처리를 진행하였습니다. 이때, 전처리에는 보통 Spark를 사용한다는 멘토님의 말에 Zeppelin에서 Document을 뒤져가며 전처리 작업을 했었습니다.
기존 모델과 데이터를 분석하는 일은 쉬울 것 같으면서도 집을 짓기 전 초석을 단단히 다지는 작업과 같이 중요한 작업이라고 생각합니다.

5주차 부터는 본격적으로 모델 설계 및 개발을 시작하였습니다. Embedding에 들어갈 Word2Vector 부터 무엇을 사용할지 고민하였습니다. 기존의 l2 Naver 토크나이저화 된 Word들에 gensim 라이브러리를 사용하여 Word2Vector 학습을 진행하였습니다. 이전까지 딥러닝 프레임워크를 사용하지 않고 Numpy만을 이용해 구현했었기에 멘토님께서는 Baseline 코드 없이 처음부터 구현해보길 추천해주셨습니다. 새로운 모델을 설계하기 전에 기존 Baseline이 될 모델과 데이터 로더 및 학습 코드를 Document를 참고하며 구현하였습니다. 새로운 모델의 중요도가 높았기 때문에 많은 시간을 투자하지 않았고 데이터의 특성에 대해 더 파악할 수 있었던 계기가 되었습니다.

이후, 새로운 모델에 대한 충분한 근거와 함께 가설을 설정하고 모델을 설계하였습니다. 주요 모델로 선정한 논문에서 같은 맥락의 비슷한 두 가지 모델로 모두 좋은 성능을 보여줌에 따라 2가지 모델을 설계하였습니다. 정말 이 모델이 가능성이 있을까라는 의문이 있었지만, Keras 프레임워크로 간단한 실험 모델을 작성하여 네이버 쇼핑 데이터로 테스트해보았고 가능성을 확인하여 본격적으로 모델을 개발하였습니다. 코드를 구현하는 시간 만큼은 모델 및 알고리즘에 집중하여 시간 가는 줄 모르고 재미있게 구현했던 것 같습니다.

약 8주차부터는 실험 결과가 도출되었습니다. 새로운 구조의 모델을 활용함에 따라 기존 모델보다는 약 3%정도 성능이 낮았지만, 기존 모델의 한계를 보완할 수 있는 다양한 인사이트를 얻어갈 수 있었습니다. 이후 중간 발표에서 저의 실험 과정 및 결과 분석, 인사이트를 공유했을 때, 팀원분들이 긍정적으로 반응해주시고 여러 아이디어 및 조언을 주셔서 감사했습니다. 제가 생각한 네이버 문화의 장점 중 하나는 좋은 아이디어 또는 새로운 인사이트를 도출하게 되면 다른 팀원들과 공유하고 함께 고민하는 점이라고 생각합니다. 그렇기 때문에 저 역시 팀에 조금이나마 도움이 되고자 더 노력하려는 의지를 가질 수 있었고 맡은 과제에 최선을 다했던 것 같습니다.

3. 마치며

Q. 느낀 점을 말해주세요

인턴십을 진행하며 가장 좋았던 점은 대학에서 경험 할 수 없었던 실무 개발 과정 속 세밀한 디테일들을 직접 체험하며 배울 수 있었던 점입니다. 더불어 선배님들의 경험 속에서 우러나오는 조언 및 피드백을 들을 수 있었던 소중한 기회였습니다. 충분한 근거를 모아 가설을 세우고 개발하고 검증하고 분석하는 일 사이사이 멘토님과 팀원분들의 조언을 통해 부족한 부분을 채울 수 있었습니다. 실무 개발 프로세스에 있어서 모델을 설계하고 가설을 세우기 전에 기존 모델과 데이터 특성에 대해 완전히 이해하는 것이 구현하는 것 이상으로 중요하다는 것을 배웠습니다. 향후 AI 엔지니어로서 프로젝트를 진행할 때 이 점을 항상 염두하기로 다짐했습니다.

개발을 진행하며 난관도 많았습니다. NSML 코드 작성하기, 대용량 데이터 다루기, 새로운 언어와 새로운 프레임워크, 새로운 모델 사용하기 등 처음 해보는 일들에 수 없이 많은 오류와 좌절을 겪었습니다. 멘토님께 여쭤보고 금방 해결할 수 있는 일도 스스로 해결해보자는 의지로 시간을 많이 소요하기도 했었습니다. 이러한 과정 속에서 개발 능력이 향상되었다 생각하고 어떠한 문제에 직면해도 해낼 수 있을 거란 자신감이 생긴 것 같습니다.

이번 인턴쉽을 통해 실무적인 개발 업무 프로세스에 대해 경험해볼 수 있었고 다각적인 조언으로 시각을 넓힐 수 있었습니다. 앞으로도 자기개발을 꾸준히 하여 언젠가 제가 직접 설계하고 개발한 모델로 사용자들의 생활을 보다 편리하게 만드는 일을 하고 싶습니다. 그 꿈을 위한 배움을 네이버에서 할 수 있어 행복한 시간이었습니다.

--

--