[ PROJECT ] 당근마켓 클론코딩 - #02 모델링

Hailee·2020년 12월 30일
3

[ PROJECT ]

목록 보기
12/16
post-thumbnail

'그 회사'에서 나를 가장 괴롭혔던, 교통안전공단 프로젝트!

정말 지긋지긋하게, 법정동인지 행정동인지 이제 기억도 안나지만.
지리정보시스템(GIS) 개발자만큼 전국의 지역코드를 꿰고 있던 시절.. ㅎㅎ

무튼, 전국의 지역 데이터를 관리해야할 때에는 이런 법정동, 행정동 코드를 사용한다는 사실을 배웠던 덕택에
동네, 지역을 기반으로 하는 서비스인 당근마켓을 클론코딩하며 꼭 이 부분을 접목시켜서 만들고싶었다.


접속 정보

👉🏻 https://aquerytool.com:443/aquerymain/index/?rurl=e14b9fb2-0176-4227-b94b-16a004085a02
👉🏻 pw : 31gk7b

우선, 가장 속상한 이야기를 하자면 채팅 기능을 구현하지 않기로 했다는 것!

보통의 채팅 기능은 소켓 통신을 이용한, 우리가 쓰는 MySQL보다는 GraphQL 등의 데이터베이스를 사용한다고 한다.
무튼, 장고를 기반으로 하는 채팅 기능을 2주 안에 다른 기능들과 함께 구현하기에는 무리라고 생각하셨는지, 우선 생각하지 않기로 했다.

굳이 흉내를 내자면 회원들이 글을 작성한 것을 바로바로 비동기로 보여주는 .. 그런 방법도 있지만
실질적으로는 get, post방식이 비동기로 빠르게 이루어지는 것일 뿐이므로,
백엔드 실력 증진 면에서도 큰 의미가 없는 작업이라고 생각했고
무엇보다도 작업 수준에 비해 프론트가 해야 할 고생이 너무 많은 것이 뻔히 보여서ㅜㅜㅜ 포기하기로 했다.

(우리 팀 소중해.. 프론트 소듕해..)


우선, ERD 상에는 지역코드 관련 테이블이 여러개이지만, 우리는 하나로 통일시키기로했다.
행정동, 법정동 별 중심좌표가 있는 csv데이터를 찾아냈기 때문!!

아무래도 나는 백엔드의 시선으로 프로젝트를 바라보기 때문에, 지도 api로는 사용자의 위치, 핀 이미지를 보여주는 정도로만 사용할 것이라고 생각했다.
각 게시물마다 유저, 동네정보, 제품 정보 등의 속성을 같이 가지고 있는 당근 마켓의 특성상
지역정보를 데이터베이스화 해서 사용하고 있을 것이라고 생각했다.

하지만 우리의 소듕한 프론트팀(천재들)과 승연님이 km에 따라서도 서비스를 하는 것 같다는 의견을 냈다.

들어보니 맞는 말이었던 것 같은게, 당근마켓은 거리 조정을 하는 순간이 크게 2가지가 있다.

  1. 내가 팔고자 하는 제품이 어느 반경의 동네까지 보이기를 원하는가?
  2. 내가 사고자 하는 제품들이 어느 반경의 동네로부터 보고싶은가?

이걸 단순히 지역코드를 2, 5, 8자리로 끊어서 보여주면 되는거 아냐? 라고 생각했는데
생각해보니 당근마켓의 선택가능한 동네 범위는 '구'를 벗어나지 않는다.

내가 엄청나게 빗겨가서 생각하고 있었던 것!!
전 회사는 전국의 지역을 두고 생각해야 하니까 그렇게 했던 것이지만, 지금의 상황은 '구' 내의 지역들을 어떤 기준으로 나누어 보여주고 있는지를 분석해야 했던 것이다.

그 결과, 어떻게 각 동네들을 km단위로 따져서 관리할 것인가를 고민하게 되었다.
아직 로직이 모두 작성된 것은 아니지만, 현재 상황에서는
각 동네마다 좌표를 모두 데이터베이스에 저장해둔 뒤, 일정 km 단위를 좌표단위로 환산해서
일정 범위의 좌표 내에 있는 동네들을 가지고 프론트와 통신하면 될 것 이라고 생각했다.

이게 참.. 글로 정리하니까 짧고 별볼일 없는데
(실제로도 엄청나게 길었던 대화는 아니었지만...)
나에겐 엄청나게 혁신적인 생각을 하게 되었던 순간이었다. 좌표는 생각도 못했었는데...!!!

이래서 협업이 정말 중요합니다 ㅎㅎ


무튼, 정리해보자면 우리가 모델링을 하면서 가장 크게 중점을 둔 부분들은 👇🏻

  • 상품들이 단순히 product로서의 역할만 하는 것이 아닌, user, address, product의 속성을 모두 가진다는 것!
  • 동네의 범위를 계산할 때에는 km(혹은 다른)로 단위를 나누고 있는 것!
  • 회원은 핸드폰 번호만으로 회원가입, 로그인을 하는 것!
profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글