현재 진행하는 원티드 프리온보딩 인턴십 과정에서는 자료구조, 알고리즘을 공부하고 있다.
더불어 팀 과제를 위한 팀이 꾸려졌고, Python, Django 스택으로 모인 팀이 결성됐다!
인턴십 과정에서 Python을 다루는 인원이 얼마 없어서 그런지 우리 팀은 4명이 한 조를 이루게 되었다.자유롭게 팀 프로젝트를 진행해도 좋아서 1건의 팀 과제 마무리 후, 팀 프로젝트를 시작하게 되었다.
첫 회의 시간에는 같이 진행해 볼 팀 프로젝트 아이디어를 생각해왔었다.
나는 이커머스 웹 서비스를 제안했었고, 최종적으로는 실시간 경매 사이트를 구축하는 것으로 정했다.
그 이유는 팀원 모두 비동기 채팅 기능 개발에 대해 자세히 경험하지 못해서 관심이 높았고, 무엇보다 여러 기술 스택이라던지 해보지 않았던 것들을 부딪히며 시도해보자! 라는 생각이 선택의 가장 큰 이유였다.
본인도 채팅 기능에 대해 튜토리얼을 진행 해 본적은 있지만, API로 작성하는 과정은 겪어보지 못해서 채팅으로 실시간 경매를 진행할 수 있다는 아이디어가 가장 개발해보고 싶었다.
프로젝트의 핵심은 실시간 그룹 채팅 기능으로 경매를 진행할 수 있다는 것이다.
핵심 요구사항은 다음과 같이 생각했다.
이 외의 추가 기능들의 요구사항도 많지만 실시간 경매에 대한 핵심 요구사항은 이렇게 구성했다.
팀원 모두 새롭게 도전하는 것에 대한 두려움은 없었다! (이런 점이 마음에 들었다)
그래서 사용해보지 않았던 것을 위주로 사용하는 것을 제안했고, 결과적으로 팀원과 회의를 거쳐서 Django와 MongoDB를 사용하고, CI&CD까지 구축해보는 것으로 정했다.
MongoDB는 NoSQL로 여태까지 써 본 RDBMS와는 다른 DB이며 사용해보지 않았고, CI & CD 경험도 해보고 싶었는데 팀원 모두 의견에 동의해줘서 고마웠다.
현재까지 팀 프로젝트의 진행 상황은 요구사항 상세화 하기, ERD 작성하며 MongoDB 설계 하기, 역할 배분이다.
요구사항, 아이디어 이해를 돕기 위한 Figma 화면 구성
DB ERD 설계
DB ERD 참고하여 MongoDB 도큐먼트 설계 (너무 길어져서 내가 맡아 작성한 부분만 올렸다.)
Auctions
{
"id" : ObjectId(),
"auction_user_id" : ObjectId(), // users 컬렉션 id 참조
"chat_name" : String,
"created_at" : ISODate()
}
Chatters
{
"id" : ObjectId(),
"auction_id" : ObjectId(), // auctions 컬렉션 _id 참조
"user_ids": [ObjectId()], // 참여한 user들의 id를 배열로 저장 (users 컬렉션 id 참조)
"offer_prices": [NumberInt()] // 각 사용자가 제안한 가격 배열로 저장, user_ids와 인덱스를 맞춰서 사용 가능하게 함.
}
Chattings
{
"id" : ObjectId(),
"auction_id": ObjectId(), // auctions 컬렉션 id 참조
"messages": [
{
"sender_id": ObjectId(), // 메시지 보낸 사람 id (users collection id 참조)
"message_type": String, // 판매자(seller) 또는 구매자(buyer) 메시지인지 표시
"content": String, // 메시지 내용
},
...
]
}
이제 각자 역할 배분하여 맡은 부분을 개발하고 있는 상황이고, 1:1 채팅, 마음에 드는 경매를 담는 wishlist 기능 구현을 담당하게 되었다.
매일 회의를 진행해서 일정을 지키는게 힘들텐데 다들 잘 지켜주는 것 같아서 고맙고, 서로 의문점을 공유하고 고민하는 점이 좋았다. NoSQL을 다들 처음 경험해봐서 어려움이 있겠지만, 다같이 어려움을 공유해가며 함께 성장하고! 프로젝트도 계획한대로 잘 완성되었으면 좋겠다.