두번째 팀 프로젝트로는 촬영 장소 서비스를 제공하는 아워플레이스를 선정했다.
구현하려는 목표는
1. 카카오 소셜 로그인
2. 상품 목록(카테고리, 검색, 정렬)
3. 상품 상세(세부정보와 예약 캘린더)
4. 예약 신청 및 조회 기능이다.
내가 맡은 카카오 소셜 로그인과 예약캘린더,예약 신청 및 조회 기능을 만드는 과정을 되돌아보고 기억하고 싶은 내용을 적어보려한다.
서비스 특성상 상품(products)이 곧 장소(places)이다. 상세 페이지에 들어가는 정보를 기준으로 장소 엔티티의 속성을 결정했고 정규화를 통해 초록색 테이블들을 만들었다. 최대한 복잡하게 생각하지않고 기본적인 정규화를 하는 것에 집중했다.
장소의 크기, 층수, 주차대수 등은 숫자와 단위로 이루어져 있어서 한번에 저장하기 위해 문자열 타입으로 했다. (ex: 35평 / 116m²). 기능 구현을 해보는 프로젝트여서 그렇게 했지만, 실무에서 해당 데이터를 이런식으로 DB에 저장하진 않을 거 같았다. 데이터를 활용해 각종 통계나 분석을 해야한다면 핵심 데이터인 숫자만 저장해야하지 않을까? 추후 데이터의 활용성을 생각한다면 컬럼이나 테이블이 더 늘어나더라도 감안해야 된다고 생각한다.
예약 엔티티의 속성은 홈페이지의 예약 과정과 예약 내역 화면을 참고해 정했다. 예약 기간을 어떻게 표현할 것인지를 가장 많이 고민했었다. 처음엔 시작과 종료시간에 날짜는 넣지 않고 따로 DATE 속성을 만드려고 했지만, 피드백을 통해 시작시간과 종료시간에도 명확한 날짜정보가 들어가게 하는 것으로 정했다.
이전 프로젝트의 주문(order)관련 엔티티 모델링을 참고하여 예약상태(book_status) 테이블을 만들기로 했다. 예약별로 상태가 존재할텐데 정규화된 예약상태 테이블과 관계를 지정해주고자 했다.
카카오 소셜 로그인 기능을 구현하기 위해 필요한 부분만 넣기로 했다. 우선 카카오 API 문서를 읽으며 우리가 카카오에서 받을 수 있는 정보의 종류를 확인했다. 카카오 닉네임, 이메일, 프로필 사진 등을 필수동의 정보로 받고, 이메일과 연령대는 선택동의정보로 받는 것으로 했다.
모델링 시점부터 받을 수 있는 정보를 확인하고 경우의 수를 생각했기 때문에 Django models.py 작성시 nullabe 옵션을 명확하게 지정할 수 있었다.
데이터 생성 작업을 팀원과 함께하기위해 google spreadsheets를 활용했고, 저번처럼 db_uploader.py를 작성해 csv파일로 데이터를 db에 입력했다.
문서나 파일을 공유하고 공동작업을 하니 생산성이 훨씬 높아졌고 각자의 로컬 DB 데이터 차이를 최소화할 수 있었다. 효율성이 높아지니 MySQL Workbench나 Table plus 툴을 많이 사용하지 않고 터미널로 확인하는 것으로도 충분했다.
이전 프로젝트에서 큰 Blocker 역할을 했던 DB와 모델링 부분이 해소가 되어서 더 빠르게 초기세팅 및 개발에 착수 할 수 있었다. 현업에서는 긴 기간동안 경험많은 시니어들이 모델링을 한다고 하는데, 현재 우리 프로젝트팀의 상황과 목표를 고려해 버릴 것은 버리며 최소한으로 스키마를 설계했다.
한편으로는 나 스스로 데이터베이스와 모델링에 굉장히 관심이 많다는 것을 알 수 있었다. 현업의 모델링을 이해하기에는 전문성이 부족하다는 것을 느꼈다. Django 프로젝트를 위한 모델링이 아닌, 실제 서비스를 위한 DB와 모델링에 대해 더 알고싶다. 앞으로는 데이터베이스의 기본적인 개념과 이론 공부를 병행하면서 실제 프로젝트에 적용해봐야겠다.