프로젝트

[회고] 컬리 해커톤 Kurly Hack Festa 2022

Reese 2022. 9. 5. 15:43
  • 팀명 : Kurvey
  • 개발기간 : 22.08.19 ~ 22.08.24
  • 팀구성 : Back-end 2, Front-end 2
  • back-end 기술 스택 : java, spring boot
  • DB : MySQL
  • Github

 

💜해커톤 첫 지원

클론 코딩만 진행하며 반복되는 일상에 나는 지금 올바르게 공부하고 있는게 맞는지, 내가 어느 정도의 실력인지, 코딩에 대한 열정이 어느정도인지 조차 스스로 가늠하기 힘들던 시기가 있었다. 그러던중 컬리에서 해커톤을 주최한다는 소식을 듣고 '잃을 것도 없으니 일단 도전해보자!' 라는 마음으로 내 실력이 어느정도인지 뭐가 부족한지 알기 위해 해커톤에 참여하게 됐다.

 

💜본격적으로 시작하기

1주차 기획하기 (8.1 - 8.6)

팀원들 모두 의욕이 넘치는 상태라 일주일에 5번, 기본 2-3시간 이상 회의를 진행하였다.

 

긴 회의 끝에 우리 팀의 최종 주제는

1) 카테고리 기준으로 나눠서 검색 결과 보여주기

2) 라이프스타일이 비슷한 유저에 기반하여 제품 추천해주기

 

1) 카테고리 기준으로 나눠서 검색 결과를 보여주는 방식은 경쟁사보다 제품 수가 적음에도 불구하고 검색 결과를 한 눈에 확인하기 어려운 마켓컬리의 단점을 보완 할 수 있을 것이라고 생각했다.

 

2)라이프스타일이 비슷한 유저에 기반하여 제품을 추천해주는 방식은 라이프스타일을 기반으로 나와 비슷한 사람들이 애용하는 제품을 추천해줌으로서 유저 한명한명에게 정성을 쏟고 있다는 느낌을 주어 상대적으로 세련되고 고급화된 이미지인 컬리와 어울린다고 생각했다.

팀 노션을 만들어 모든 기록을 문서화 하였다.
첫 회의에 준비했던 아이디어 기록

 

추천 방식, DB에 저장되는 방식

제일 시간을 많이 쏟았던 문제였다.

제품 추천 방식을 위해 사용자 협업 필터링을 공부하였지만, 문제를 발견하게 됐다.

컬리는 누적 사용자 수가 천만이 가까이 되는 서비스인데 일반적인 유사도 방식을 사용한다면, 사용자가 1명 추가될 때마다 기존의 사용자들의 유사도를 계산해서 업데이트를 해야했다. 이렇게 된다면 서버에 부하가 심할 것이라고 생각했다. 이 문제를 해결하기 위해 여기저기 물어보고 검색하며 회의한 결과 찾은 해결안은

 

1. 문항 자체를 column으로 두어 1번부터 마지막 수까지 자신과 같은 문항에 같은 답을 한 개수가 가장 비슷한 사람을 찾는다.

장점 : 사용자가 추가됐을 때, 모든 사용자들의 유사도를 다시 구할 필요가 없다.

단점: 사용자들끼리 겹치는 모든 개수를 저장해야 하므로 DB에서 차지하는 용량이 커진다.

 

2. 선택할 수 있는 문항 수를 지정해두고, 각 문항을 선택한 ‘우선순위’를 반영하여 서로에 대한 가산점을 매기는 방식

장점: 사용자들의 유사도를 다시 구하지 않아도 되며, 사용자가 추가될 때 각 사용자가 선택한 우선순위 기준으로 점수만 계산해주면 된다.

단점: 모든 사용자에 대한 점수를 저장하고 있어야 하므로 DB에서 차지하는 용량이 크다.

 

두 가지 후보중에 우리는 2번의 방법을 조금 더 발전시켜 ‘순열 기반의 유사도 방식’을 생각해냈다. 모든 문항 중 3개를 우선순위에 따라 다르게 선택할 모든 경우의 수(우선순위가 반영된 것이므로 (2, 1, 4)와 (4, 1, 2)는 다르다.)로 컬럼을 미리 만들어두고, 각 사용자가 속한 컬럼에 대한 다른 사용자들의 점수를 훑어 해당 사용자 다음으로 높은 점수를 얻은 사용자를 찾는 유사도 계산 방식이었다.

                                  순열 기반의 유사도 방식 /  실제 DB similarity table에 저장된 모습

라이프스타일 설문

사람들의 라이프스타일은 너무나 다양하기 때문에 모든 라이프스타일을 설문에 넣을 순 없었다. 그래서 컬리의 제품들을 살펴보며 현재 컬리 제품 구매시 중요해질 수 있는 라이프스타일을 설문 문항으로 뽑았다.

라이프스타일 설문 화면설계


2주차 과제계획서 작성 (8.7-8.14)

화면설계, ERD작성, 아키텍쳐, 기획서등 아이디어 기반으로 과제계획서를 작성하여 제출하였다.

ERD
인프라 아키텍쳐
화면설계

 

설문조사 화면은 팀원 모두가 디자인하여 투표로 1개의 디자인을 뽑았다.


드디어 본선 (8.19 - 8.24)

본선 진출 후 19일부터 24일까지 개발 기간이 주어졌다. 하지만 19일에 온라인 라이브 설명회가 21시에 끝났다. 사실상 20일부터 개발을 시작할 수 있었다.

 

구현결과

  • 사과라는 검색어에 대해 카테고리 별로 분리하여 제공하는 검색 결과

 

  • 간식 검색 후 <간식ㆍ과자> 카테고리에서 보이는 추천 상품 리스트

시연 영상

시연영상 유튜브 링크

 


결선 진출 (8.29 - 8.31)

...?

기획부터 실제 프로젝트 참여로 만족했던 해커톤에서 상상도 못 한 본선 진출이라니..? ㄴㅇㄱ

사실 도전한다는거에 큰 의의를 뒀는데 이런 결과를 받게 되어서 팀원들이 다 놀랐다.


최종 발표 (8.31)

발표는 컬리 본사에서 진행됐다.

사실 이때까지만 해도 컬리 화장실 뷰 멋지다 헤헤 + 다른 팀들은 어떤 아이디어로 어떻게 구현했는지 구경하자는 생각으로 있었다.

 

12팀의 발표가 모두 끝난 뒤 깜짝 등장으로 컬리의 CEO이신 김슬아 대표님이 최종 4팀을 발표하시기 위해 깜짝 등장하시고부터 갑자기 긴장이 됐다…

 

쟁쟁한 팀들이 너무 많아서 우리 팀이 불릴 것이라고는 생각도 안 하고 있어서 열심히 박수를 치고 있었는데 3번째에 ‘Kurvey 팀!!’ 이라고 우리 팀을 호명하셨다.

최종 우승


💜느낀점

음… 사실 상을 받고도 마냥 기쁘지만은 않았다.

 

‘우리 팀의 결과물이 기술적으로 뛰어나지 않았는데 대체 왜 상을 받았는가?’에 대해 계속 의문이 들었다. 기술적인 결과물만 보면 본선에 진출하신 개발자분들도 충분히 쉽게 구현할 수 있었을 서비스이기 때문이다.

 

상향평준화된 이커머스 분야에서 차별점이 무엇일까 고민하였고, 우리는 인공지능에 대해 지식이 부족했기 때문에 엄청난 알고리즘을 짤 수 없었다. 우리 팀은 ‘차별화’를 위해 컬리의 고객에 집중하였다. 컬리의 주 고객층은 타 이커머스와 다르게 매우 뚜렷하였다. ‘경제력은 있으나 장을 볼 시간은 없는 커리어우먼’ 주 고객층인 현대의 성인 여성들 사이에서 확대되는 비건, 친환경 소비 등을 참고하여 라이프스타일에 기반해 추천하는 방법을 문제의 해결점으로 제시하게 되었다.

아마 이런 부분을 좋게 봐주시지 않았을까… 생각하였다.

 

컬리 입사 면접을 보면서 이 부분에 대한 의문이 풀렸다.

면접관님께서 그때 컬리가 가장 고민하고 있었던 부분을 문제점으로 다뤘고, 실제로 내부에서 서비스를 구상중이라며 흥미로운 아이디어라 어떻게 해결할지 궁금했다고 하셨다. (면접 당일 컬리의 설문 서비스가 생긴걸 확인했다.)

💜컬리 김슬아 대표님과💜


해커톤이라고 하면 어떤 이미지가 떠오를까? 일단 나는 <굉장히 실력 있는 개발자들이 모여서 단기간에 엄청난 결과물을 만들어내는 대회>라고 생각했다.

 

그렇기 때문에 해커톤에 쉽사리 참여해 볼 수 없었다. 사실 무서웠다는 표현이 맞는 것 같다. 팀원에게 피해주고 싶지 않았고 ‘내가 그 정도는 아니지. 조금만 더 공부해 보자. 조금만 더 조금만 더…’라고 생각하며 계속 미뤄왔다.

 

하지만 실력이 뛰어나다고 대회에서 수상을 할 수 있는 게 아니라는 것을 이번 경험으로 깨닫게 되었다. 좋은 아이디어로 기획을 통해 잘 다듬기만 한다면 꼭 엄청난 개발자가 아니더라도 좋은 결과물을 얻을 수 있다. 마지막 개발이라고 생각하고 참여했던 해커톤이 내 인생의 첫 번째 터닝포인트가 됐다.