<aside> 💡 배달의 민족 서비스의 실제 비즈니스 모델을 최대한 반영하여 복잡한 도메인, 비즈니스 로직을 경험해 봄과 동시에 최대한 구현해 보는 것을 목표로 고객, 사장님, 관리자와 같이 다양한 사용자 입장에서 필요한 API를 구현하였습니다.
</aside>
도메인 선정
스크럼 방식의 개발 방법 적용
ERD 설계
Response 관련
기술 스택 선정
개발 컨벤션 논의
테스트 코드 규칙
Exception 관련
<aside> 🧑🏼💻 스프린트(Semi-Project) 첫 날, 협업과 애자일에 관한 강의 영상 시청을 모두 마치고 스크럼 시간에 팀원들과 프로젝트 역할 분배에 관한 본격적인 논의를 시작하였습니다. P.O(Project Owner), Scrum Master 그리고 Developers 이 세 가지 각각의 역할에 누가 더 적합한 지에 관한 의견을 조율하였습니다. 우리 팀은 평소 각자가 가진 장점을 잘 이해하고 있었고, 그 덕분에 각 역할을 누가 맡을 지에 대해 조금의 의견 충돌도 없이 빠르게 의견의 합의점을 찾을 수 있었습니다.
</aside>
<aside> 🧑🏼💻 먼저 평소 스프링과 웹에 관한 사전 지식이 풍부했던 현웅님이 P.O, 팀원 간의 분위기를 잘 살려주고 꼼꼼하고 세심한 성격을 갖고 있던 정현님이 Scrum Master, 그리고 나머지 두 명(지훈님, 해민님)은 개발에 좀 더 신경을 쓰며 전반적인 프로젝트 진행에 집중할 수 있도록 Developer 역할의 활동을 수행하기로 결정되었습니다. 모든 역할 분배가 끝났고, 어떤 주제로 프로젝트를 진행해야 할 지를 본격적으로 논의하였습니다.
</aside>
<aside> 👩🏻💻 팀원들 각자 원하는 프로젝트 주제를 가져온 다음 서로 의견을 나누었습니다. 팀원들이 가져온 서비스는 쿠팡, 에어비앤비, 쏘카, 당근마켓, 배달의 민족이었고 팀원들은 각 서비스를 구현하기 위한 엔티티 설계 방식과 역할 분배를 고려하며 각 서비스에 대한 장담점에 대한 의견을 나누었습니다. 이야기를 진행하면서 하나의 서비스에 대한 세부적인 비즈니스 로직을 최대한 구현하기 위한 다양한 도메인을 설계할 수 있는 주제를 선정하는 방식으로 의견을 모으게 되었습니다. 그 결과로 팀원들 모두 사용 경험을 가진 익숙한 서비스면서 쿠폰, 위치 정보, 주문과 같이 다양한 비즈니스 로직을 구현할 수 있는 음식 주문 서비스인 배달의 민족에 대한 클론 프로젝트를 진행하기로 결정했습니다.
</aside>
<aside> 🧑🏽💻 초기에 다같이 모여 Draw.Io를 사용하여 ERD 설계를 시작하였습니다. 무료로 제공되며 팀원이 다같이 설계에 참여할 수 있어서 선택을 하였습니다. ERD를 그리다 보니 Draw.IO는 테이블 설계에 불편한 점이 많아서 화면 공유를 하면서 MySQL WorkBench를 통해 ERD 설계를 하였습니다. 처음 완성된 ERD를 멘토이신 흑구님에게 검토를 받고 흑구님께서 ERD에 논리명이 들어갔으면 좋겠다는 조언을 해주셨습니다. MySQL WorkBench는 논리명을 지원해주지 않아서 ERD Cloud를 사용하여서 논리명이 포함된 ERD를 팀원들과 함께 작성하였습니다. ERD Cloud의 경우 WorkBench와 달리 팀원들이 모두 함께 작업을 할 수 있는 환경을 제공해주어서 개발 중 ERD의 수정이 필요할 경우 바로 수정을 하고 다른 팀원들이 확인 할 수 있는 환경을 제공해 주었습니다. 또한 논리명과 물리명을 모두 설정할 수 있으며 테이블 설계에 불편함이 없어서 ERD 설계 도구로 최종 결정하여서 진행하였습니다.
</aside>
<aside> 🧑🏽💻 멘토이신 흑구님께서 유저 시나리오를 작성하고 프로젝트를 진행하는 방법을 추천해주셨습니다. 실제 개발을 진행하기전에 팀원들과 유저별로 기본적으로 하는 기능들을 추가하였습니다. 우선 저희의 목표는 다양한 도메인을 설계하고 기본적인 기능들을 먼저 구현 후 시간이 된다면 좀 더 디테일한 기능들을 구현하는 것 이었습니다. 유저로는 프로그램 관리자, 배달기사, 일반 유저, 가게 사장이 있어서 그에 맞는 가장 기본적인 주문, 배달, 메뉴등록, 광고에 가장 기본적인 요구사항들을 클론 프로젝트 대상인 배달의 민족에 맞추어서 작성하였습니다.
</aside>
<aside> 👩🏻💻 약 20개의 엔티티에 대한 설계를 마무리하고 각 엔티티와 관련된 역할 배분을 시작했습니다. 배달의 민족 서비스의 경우 주문, 가게, 쿠폰, 배달과 같이 다양한 엔티티들이 서로 연관되어 있는 만큼 역할 분담을 하는데 어려움을 가졌지만 그 안에서 밀접하게 연결되어 있는 큰 도메인을 중심으로 4개의 역할을 분담할 수 있게 되었고 정현님은 고객과 쿠폰, 해민님은 가게와 메뉴, 지훈님은 광고와 관리자, 현웅님은 배달과 위치 관련 도메인을 맡게 되었습니다. 각 팀원은 개발 전 작성한 사용 명세서를 바탕으로 필요한 속성과 기능을 반영한 도메인 설계와 서비스 로직 개발을 진행하였습니다.
</aside>
<aside> 🧑🏽💻 1차적 기능 완성하고 멘토이신 흑구님과 팀미팅을 진행하였습니다. 1차적 기능 완성을 했을 당시 팀 프로젝트는 가장 기본적인 기능 구현만 해둔 상태였습니다. 기존의 목표는 1차적 기능 완성 이후 CI/CD와 N + 1 문제와 주문요청시 동시성 문제를 해결할 계획이었습니다. 멘토님께서는 동시성 문제보다는 기본적인 보안 기능을 구현하는 것이 우선이라고 조언해주셨고 저희는 그에 맞게 기능 완성 후 우선적으로 인증과 인가를 할 수 있는 Spring Security 기능을 만드는 것에 초점을 두고 개발을 진행하였습니다.
</aside>