[회고] 마켓컬리 해커톤 회고

Hocaron·2022년 9월 4일
18

회고

목록 보기
6/8
post-thumbnail

해커톤은 못 참지

해커톤 모집 마감 이틀 전까지 고민을 하다가 오픈 카톡방에 팀원 모집글을 올리게 되었다.
🤔 입사한지 두달차가 되어 가는 시점에서 해커톤을 나갈 수 있는 여력이 될까에 대해 고민하면서, 참가신청을 미뤄왔는데... 해커톤은 절대 못 참지!! 진행 시켜!!

기획... 그거 어떻게 하는거에요?

팀원 모집글을 올렸을 때, 제일 처음 연락주신 분이 기획자 동은님이었다. 동은님이 생각하시는 마켓 컬리가 마주한 문제를 들으면서, 기획은 정말 무에서 유를 창조하는 일이라는 것을 느꼈다. 동은님께서 이커머스에서 일을 하시면서 느낀 점들과 현재 고객들이 겪고 있는 문제에서 도출해낸 아이디어라 공감이 많이 되었다.

자료조사만 봐도 꼼꼼하고, 예리하신 분이라는 게 느껴진다. 다른 사람들을 리드하기 위해서는 자신이 가고자 하는 방향을 함께 갈 수 있도록 자신의 입장을 잘 전달하는 것이 중요하다고 생각하는데, 말이 쉽지 실제로 행동으로 옮기기에는 쉽지 않은 것 같다. 동은님께서 이 부분을 잘 보여주셔서, 다음 프로젝트에서는 내가 꼭 리드하는 입장이 아니더라도 적용해보고 싶다.

현업 ML 개발자님과 협업

지금까지 참여한 해커톤에서 현업 ML 개발자님을 본 것은 이번이 처음이었다. 대학교에서 정말 얕게나마 맡본 ML 관련 과목들을 들으면서, 이 방대한 지식을 내가 필드에서 사용하려면 얼마나 오랜시간이 걸릴까에 대해 생각했었는데, 실제로 사용하는 분을 보면서 대단하다고 느꼈다. 머신러닝 관련한 플젝에서는 항상 이 기능이 실제로 구현이 가능한 걸까에 대한 궁금증이 있었지만 지식의 부족으로 한참 리서치를 한 후에 결과를 도출할 수 있었는데, 가능성에 대해 바로 바로 가능하다 / 불가능하다 와 함께 이유를 말씀해주셔서 속이 시원했다.

냉매제를 부탁해 팀의 주제는 이것입니다

🙋‍♀️ Ai 객체인식기술로 상품 검수를 보조하면 오피킹을 빠르게 정정할 수 있지 않을까?
🙋‍♂️ 권장 패킹 알고리즘으로 포장재 옵션을 지정해주면 패킹 품질 일관성을 높일 수 있지 않을까?
위 2가지 기능을 제공하는 문제 해결 솔루션, KMPS(Kurly Smart Packing System)이 우리팀의 주제이다.

AWS 비용 지원이 된다고요?

매 프로젝트마다 프리티어에 맞춰서(사실 그 이상의 스펙이 필요하지 않았🥲) 인프라를 구축하면서, 이것저것 써보고 싶은 마음이 굴뚝같았다. 컬리 해커톤에서는 메가존 클라우드에서 인프라 비용을 팀당 20만원까지 지원하면서, 우리의 꿈을 펼쳐볼 수 있었다...⭐️ 넘나 좋은데, 생각보다 이것저것 못 써봐서 너무 아쉽다...

시퀀스 다이어그램, 최고야

Web과 데이터를 주고 받는 과정 외에도 ML 서버와 통신이 필요했고, 개발 들어가기 전에 한번 다같이 플로우를 정리하고 들어가면 후에 변경 사항을 최소화할 수 있을 것 같아서, 시퀀스 다이어그램을 사용했다.

시퀀스 다이어그램 툴로는 mermaid를 사용했고, 깃헙과 노션에도 지원이 되는 언어이니 한번 사용해보자🙌
Docs 설명도 잘 되어있고, 사용법도 간단해서 금방 적용할 수 있다.

추천 프로세스

개발에 들어가기 앞서 위처럼 각 프로세스마다 시퀀스 다이어그램을 작성하고, API 호출 순서 및 어떤 데이터를 반환해야 하는지에 대한 합의를 했다.

외래키 없는 DB 설계

image
컬럼 이름만 xx_id로 생성하고, 실제로 외래키 조건을 넣지는 않았다.
불필요한 Join 문제와 테이블 수정시 외래키로 인한 제약조건 때문에 외래키 없이 설계 했다.
확실히 수정이 필요할 때마다 ddl문으로 외래키 조건을 푸는 고민 없이 바로 바로 반영이 가능했고, JPA 연관관계도 맺지 않아서, N + 1 같은 Join 문제도 생각하지 않아도 되어서 편했다.

응답 포맷을 정해보아요

1번 후보

{
  "result": {
    "code": 200, 
    "desc": "성공"
  },
  "data": {
    "user": {
        "id": 1,
        "name": "hocaron"
    }
  }
}

2번 후보

{
  "code": "SUCCESS",
  "message": "성공",
  "data": {
    "user": {
        "id": 1,
        "name": "hocaron"
    }
  }
}

Response Body 포맷을 정하면서, 항상 궁금했던 부분에 대해 웹 개발자 진희님께 여쭤보았다.

🙋‍♀️ 프론트에서 응답을 처리하기에 어떤게 더 편한지, 왜 편한건지(항상 궁금했습니당🤔), 사용하시는 다른 포맷이 있는지도 궁금합니다!

💁‍♂️ 저는 2번 포맷을 자주 사용하고 편하게 생각합니다 !
기본적으로 response data의 depth가 많을수록 가독성이 안좋고 구조 분해를 통해서 가져와 사용할 때도 예외 처리(ex. optional chaining)를 해야하는 부분이 더 추가되기 떄문에,,
그리고 만약 응답 실패 시 data를 아얘 안넘겨주는 방법도 고려해볼 수 있을 것 같아요(null 대신에)
어짜피 code로 에러 분기를 칠꺼기 때문에 굳이 null 값을 받아야할 이유가 있을까? 라고 생각이 들어서요 !! (개인적인 의견이었습니다 🥸)

💁‍♂️ 서버에서 에러가 발생했을 때 디버깅 용도로 메세지를 내려주고, 클라이언트 쪽에 보여주는 에러 메세지는 프론트쪽에서 해당 코드에 대해 매칭되는 상수로 관리하는 부분도 있을 수 있고(근데 이 부분은 좀 비효율적이라고 생각하는 게 에러 코드가 추가 될 수록 그에 따라서 클라이언트 쪽에서도 계속 업데이트를 해줘야 하기 때문에 ,,,)
그리고 아예 서버에서 코드를 디버깅 용도로 내려주는 게 아니라 단순히 클라이언트 쪽에서 잘못된 행동에 대한 정보를 담아 넘겨줄 수도 있습니다. 이렇게 하면 별도로 클라이언트쪽에서는 더 신경쓸 부분이 없어서 편한 것 같아요.
다만 이 부분도 정답은 없고, 사용하는 곳의 정책에 따라 달라지는 부분이라서 목적에 맞게 사용하는 것이 좋다고 생각합니다.

백로그 관리는 노션으로


개발 시간이 촉박했기 때문에, 서로 어떤 태스크를 진행하고 있는 지에 대한 공유가 필요했고 이는 노션으로 진행했다.

결선 진출

최종 12팀에 뽑혀서, 마켓 컬리 본사로 가서 PT를 진행했다.

최종 우승팀에는 선정되지 못 했지만, 다른 11팀의 발표를 들으면서 기획 및 아키텍쳐에 대해 배울 수 있었다.
심사위원 분 중에 한분께서 다른 팀에게 이 서비스가 현재 마켓컬리에 적용되었을 때, 어떤 식으로 적용가능할까요? 라는 질문을 주셨는데,

  • spring cloud gateway 같은 msa 서비스 내에서 기존 서비스에서 라우팅 가능한 기능(api 관점)

라는 해결 방법밖에 떠오르지 않아서, 질문을 드렸었는데 api 외에도 현재 운영되는 DB 또한 고려해야 한다고 해주셨다. 새로 만들어질 DB에 데이터를 어떻게 쌓을 것인지?!

  • 현재 있는 DB 복제해서 만든다.(비추, 임시방편용)
  • 카프카 같은 중간 역할을 두어서, 기존 서버에서 produce 하고, 신규 서버에서 consume 하여 신규 DB에 적재할 수 있도록 한다.

😎 랜선 친구에서 현실 친구로 발전한 냉매제를 부탁해팀

냉매제를 부탁해 레포

❄️ https://github.com/Please-Ice-Pack/please-ice-pack-server
❄️ https://github.com/Please-Ice-Pack/please-ice-pack-front
❄️ https://github.com/Please-Ice-Pack/please-ice-pack-ml

함께해서 너무 영광이었던 팀원들의 피드백

웅장한 기획자 동은님
[문서정리👑] DB설계, 시퀀스 다이어그램, 인프라 아키텍처 등 개발 문서를 가장 먼저 공유해주셨던 것으로 기억합니다. 이후 DB와 시퀀스 다이어그램 구조에 업데이트가 생겼을 때에도 빠르게 반영하여 문서 형태로 공유해 주셨습니다. 그로 인해 기획서 작성과 발표 준비에 큰 도움을 받았습니다. 평소 기획자로서 정확한 기록 습관을 기르기 위해 노력하는데 선우님의 이러한 모습이 긍정적인 자극이 되었습니다. 다른 개발 팀원분들도 선우님의 문서를 확인함으로써 명확한 개발 계획을 설정하실 수 있었다고 생각합니다. 예시로, 프론트에서 API 전체 status code를 요청하셨을 때, 빠른 공유를 해주셔서 이후 작업이 원활하게 진행되었다고 기억하고 있습니다.
[커뮤니케이션👌] 명확하게 의견 교환이 이루어질 필요가 있는 문제에 대해서는 반복해서 질문하시는 습관을 관찰할 수 있었습니다. 중요한 문제를 확실히 이해하고 넘어가는 대화가 불편하다면 프로젝트 진행에 어려움이 있었을 텐데, 선우님과 소통하면서는 항상 명확한 결론에 도달할 수 있었습니다. 또, 평소 팀원 상호간 노력하는 부분에 자주 칭찬을 건네시는 모습을 보고 겪었습니다. 몰입과 집중도가 필요한 해커톤을 진행하며 선우님께서 해주시는 격려가 팀 전체 분위기에도 너무 중요한 역할을 했다고 생각합니다.
[협업툴활용👍] 노션과 디스코드를 통한 소통 방법을 제안해 주셨던 점도 인상깊습니다. 노션을 통한 백로그 관리와 각 포지션별 디스코드 채널 개설을 통한 소통이 프로젝트에 적절하고 유용했다고 생각합니다. 센스 있는 채널 관리를 통해 저를 포함해 디스코드 채널을 처음 사용하는 팀원분들까지도 해커톤 진행 내내 원활하게 커뮤니케이션 하는 데 도움을 얻은 것 같습니다.
[이슈해결🍀] 기획자 포지션에서 참여하다 보면 기획의 변경이나 처음 생각하지 못했던 문제를 해결하는 과정에서 어려움을 겪기도 합니다. 그런데 선우님께서는 이슈가 생겼을 때, 빠르게 이슈를 해결하는 데 적극적으로 도움을 주셨습니다. 특히, 해커톤 진행 중 Ai 인식 결과에 따라 사용자가 클릭할 수 있는 [정상 완료]와 [누락 보고] 버튼을 생성하는 것을 논의했던 경우가 기억에 남습니다. 버튼 추가 시 작업에 변경사항이 생기는 것인데도 필요에 공감하고 다른 개발 팀원들과의 논의까지 지체없이 진행해 주셔서 기획상 구현하고 싶었던 기능의 구현이 가능했습니다.
[개발완성도추구💻] 짧은 기간 내 진행되는 해커톤 과제임에도 불구하고 다양한 케이스를 고려해 안정적인 환경을 구축하려 하신다는 점을 알 수 있었습니다. 기기의 에러, 사용자 실수, 불가피한 상황의 발생 등에서도 사용성에 문제가 없도록 DB에 저장할 정보를 신중히 관리하고자 하신 점에서 이를 알 수 있었습니다. 덕분에 함께 하는 동안 신뢰하고 프로젝트를 진행할 수 있었습니다.
[개인적인 회고🔮] 선우님, 그간 정말 고생 많으셨습니다! 저도 용기내어 해커톤 참여를 결정하고 팀원을 구하는 단톡방에 입장했던 게 어제같은데 새삼스럽네요! 처음 대화를 요청드린 분이 선우님이신데, 너무 좋은 인연을 만난 덕에 결선 진출이라는 좋은 결과를 만들 수 있었던 것 같습니다. 불과 3주 뒤 이렇게 뿌듯한 마음으로 해커톤 참여를 추억할 수 있다니 새삼스럽네요. 함께할 수 있어 행복했고 또 함께 작업할 수 있는 기회가 있다면 좋겠습니다😊

찬란한 웹 개발자 진희님
선우님은 해커톤을 정말로 즐기신 것 같았어요 🔥🔥 그래서 새로운 기술을 도입해서 구현하는 것에 대해서 굉장히 설레여하셨고, 오히려 저한테도 프론트쪽도 만약 제가 사용해보고 싶은 패키지나 기술적인 면이 있다면 적극 찬성하고 한 번 해보자고 복돋아 주셨구요 😎 그리고 업무 커뮤니케이션적인 면에서도 굉장히 좋은 모습을 보여주셔서 팀원들과의 의견차이가 있으면 최대한 존중하려고 노력하고 더 나은 제시안을 제공함으로써 전체적인 코드 퀄리티도 높여주신 것 같아요 (물론 백엔드쪽은 말 할 것도 없었습니다 ㅎㅎ)
만약 다음에 해커톤 기회있으면 선우님과 또 팀을 이뤄서 해보고 싶을 정도로 좋은 경험이었습니다 👍👍

개쩌는 머신러닝 개발자 한승님
긍정적이고 열정 넘치는 선우님 덕분에 첫 해커톤이 너무 좋은 추억으로 남았어요. 기술적인 부분에서 AWS나 CICD 등 제가 부족한 부분이 많았는데, 싫은 티 한번 안내시고 하나하나 친절하게 알려주셔서 많이 배웠고, 커뮤니케이션에서 상대방의 의견을 존중해주시는 화법 덕분에 기분좋게 해커톤을 진행할 수 있었습니다! 기회가 된다면 다음에도 좋은 프로젝트를 같이 하면 좋겠네요ㅎㅎ 좋은 분들과 좋은 프로젝트 같이 진행하여 너무 영광이었고 다시 한번 감사드려요!!

나의 후기

회사에 다니면서, 사이드 프로젝트로 개발하는 것과 실제 현업에서 하는 개발에 대해 차이를 마구마구 느꼈다. 차이도 느끼고... 사실 좌절감도 많이 느꼈다🤣 내가 이렇게까지 부족한 사람일줄이야ㅋㅋㅋ 물론 아무도 나에게 부담을 주지 않고, 조그마한 행동에도 많은 긍정적인 피드백을 해주시지만 내가 정말 팀에 도움이 되고 있는 건지에 대한 고민을 많이 했었다.
컬리 해커톤은 이런 다운된 나를 다시 업 시켜줬고, 다시 성장에 대한 욕구를 불태워줬다.🔥 좋은 팀원 분들을 만날 수 있는 기회와 심사위원분들께 양질의 피드백을 들을 수 있는 기회를 만들어준 마켓컬리 해커톤 운영진 분들께 감사하다.

profile
기록을 통한 성장을

2개의 댓글

comment-user-thumbnail
2023년 5월 2일

우와 회사에 사이드 플젝까지 ,, 너무 머싯어요 카롱님💖

1개의 답글