본문 바로가기

Project

[프로젝트] 식당 예약 및 웨이팅 플랫폼 개발 - 주제선정

이번에 팀원들과 새로운 프로젝트에 대한 개발을 시작하면서, 프로젝트 설계의 전반적인 과정과 저희 팀에서 오고 갔던 기술적 의사결정의 과정들, 개선되는 점들에 대해서 정리하려고 합니다.

 

지금은 프로젝트 주제가 식당 예약 및 웨이팅이 가능한 플랫폼을 만드는 것으로 확정되었지만, 주제 선정 및 이번 프로젝트에서 팀원이 각각 얻어가고 싶은 스킬이나 역량에 대한 부분 부터 고민이 많았던 것 같습니다.

 

🎬 주제 선정의 과정

처음 여러 주제를 던져보기 전, 팀원별로 각각 이번 프로젝트에서 해보고 싶은게 어떤 것인지에 대해서 말해보았습니다.

 

본인: Kafka 나 RabbitMQ 같은 라이브러리를 사용해서 실시간 메세지 관리 기능을 구현하는 것

팀원1: ElasticSearch 를 활용한 조회 시스템 성능 개선

팀원2: MSA 개념을 따라 프로젝트의 구조를 설계하기

팀원3: WebSocket 등을 이용한 채팅 서비스 등등..

 

이번에 진행하는 프로젝트는 개발 기간이 꽤나 길게 주어졌기 때문에, 꼭 해보고 내것으로 만들고 싶은 기술에 대해서 나열해보았습니다.위에서 말한 기술들 이외에도 다양한 아이디어가 나왔지만, 기본적으로 "실시간", "동시성 제어", "MSA", "알림" 등이 저희 주제 선정에 대한 키워드였습니다.

 

1️⃣ 첫번째 주제 - 여행 계획 공유 플랫폼

팀원들과 회의를 하며, 명확한 주제가 떠오르지 않아서, 휴대폰을 켜고 각자의 스마트폰에 설치되어있는 어플리케이션을 살펴봤습니다. 그 중에 눈에 띄고 저희가 적용하고 싶은 다양한 기술을 담을 수 있는 어플리케이션이

 

1. 배달의 민족(및 기타 배달 관련 어플리케이션)

2. 캐치테이블(식당 예약 서비스)

3. 트리플(여행 계획 설계 및 공유)

 

정도가 눈에 띄었고, 이 중에 여행 계획 설계 및 공유가 가능한 트리플 이라는 어플리케이션에 눈에 들어왔습니다.

 

그리고 이런 플랫폼을 개발하기 위해서 설계를 시작하였고, 저희 프로젝트의 기본적인 소개와 핵심기술을 떠올려 보며 기본적인프로젝트 구상을 해보았습니다.

 

💻주제: 실시간 여행 정보 공유 플랫폼

 

👨‍💼 프로젝트 소개: 1인, 2인 또는 여러명 등 여행하는 사람의 여행 계획, 일정 등의 정보를 등록하고 실시간으로 공유하는 플랫폼

 

✅ 프로젝트 핵심 기술:

 

1. 여행정보에 대한 CRUD

2. 실시간 위치정보 사용(GPS)

3. 등록된 여행 정보 수정 시 실시간 공유(메세지 큐)

4. 근처 추천장소(캐싱을 통한 자주 조회되는 목록 조회)

5. 끝난여행 기록 커뮤니티 공유

6. 채팅 기능

7. 푸쉬 알림

8. OAuth 사용자 인증

9. 이벤트 등 할인 쿠폰(동시성 제어)

 

등의 기능들이 떠올랐습니다.

 

개발 기한은 기본적으로 5주정도였기 때문에, 3주 정도의 시간동안 개발하여 필수적으로 기능이 구현되는 선인 MVP 를 1번부터 5번 까지로 구상하였습니다.

 

프로젝트를 진행하기에 앞서, 많은 조언과 도움을 주시는 시니어개발자 분들이 계셔서 이 주제에 대한 프로젝트 설계가 어떤 것 같은지 피드백을 받아보았습니다.

 

❔❕ 피드백시니어개발자1: 다양한 기술들을 사용하는 것도 좋은 경험이 될 수 있지만, 프로젝트의 요구 사항에 따라 개발을 진행 하다가 더 나은 기술이 있을 때 채택하는 방식이 더 좋을 것 같다. 즉, 기술 선택의 타당성이 있어야 하는데 기술을 먼저 생각하고 그 기술에 해당하는 기능을 추가한 것 같다.

 

처음 이 피드백을 들었을 때, 저희 프로젝트가 시작부터 약간 잘못 된 부분이 있다는 생각이 들었습니다.

 

시니어 개발자분의 말 대로, 써보고 싶은 기술을 나열 한 뒤, 그 기술이 들어간 어플리케이션을 개발하는 이상한(?) 순서로 설계가 진행된 것 같았습니다.

 

❔❕ 피드백2

시니어개발자2: 사실 이 주제에 대해서 주니어개발자 들이 피드백을 받으러 왔을때, 이미 반려한 적이 있다. 기술을 가져다 쓰는 것은 디벨롭할 것이 없기 때문이다. 좀 오버엔지니어링이 아닌지 의문이 든다. 실시간 키워드에 집중을 해서 뭔가를 하더라도 그냥 Redis 를 이용해서 구현하는 것도 문제가 없는데 기술 활용의 난이도를 떠나서 기본기를 중요하게 생각해야할 것 같다.

 

두번째로 받은 피드백도 그저 현업에서 이런 기술적 역량을 가지고 있는 사람을 채용하는 공고를 많이봐서 이런 것에 대한 연습을 미리 하고싶었던 저희는 저희의 본분을 간과하고 프로젝트를 설계한 것 같았습니다.

 

이런 피드백들에서 "기슬적인" 부분이 아닌 프로젝트의 구현과 개선 과정에서 어떤 기술을 선택하는 "타당성" 을 찾아가며 코드 한줄 한줄에 이유를 담아보면 어떨지에 대한 고민을 했습니다.

 

2️⃣ 두번째 주제

처음 주제를 선정하고 탄탄대로 같았던 설계과정이 한번 전부 바뀌고 난 뒤, 방향을 기술로 잡지 말고, 하나의 프로그램을 만들되, 멀티모듈을 구조를 통해 실제 어플리케이션들이 동작하듯 모듈간의 상호작용을 중점으로 잡고 구현해보자 라는 목표를 잡았습니다.

 

이 부분에 관련해서 MSA 에 대해서도 추가적으로 공부하고, 실제 멀티모듈로 프로그램을 개발했을 때, `USER`, `OWNER`, `ADMIN` 등 (배달의 민족 기준) 어떻게 하면 프로젝트를 유기적으로 연결되게 설계할 수 있을지에 대한 고민을 하면서 새로운 주제로 다시 고민해보았습니다.

 

💻주제: 식당 예약 및 웨이팅 플랫폼, "체어링"

 

👨‍💼 프로젝트 소개: 기다리지 않고 계획적인 방문 + 예약을 할 수 있는 플랫폼

 

✅ 프로젝트 핵심 기술:

1. 웨이팅 상태 변경 시 유저에게 알림 제공

2. 웨이팅 시, 메세지 큐를 사용하여 실시간 대기자 목록 조회

3. 쿠폰 발급 및 예약에서의 동시성 제어

4. 유저, 사장님, 관리자 3개의 멀티모듈 프로젝트

5. S3 를 활용한 이미지 등의 대용량 전용 서버 구축

6. CI/CD 를 통한 배포 자동화

 

위의 기술들에서 MVP 로 1~4번까지의 내용을 선정하고, 배포에 관한 부분은 추가적으로 진행할 계획이었습니다. 우선 프로젝트 자체의 기능들(기본 CRUD)에서 기술적인 부분을 도입하는 것은, 개선하는 과정에서 진행하는 것으로 정했습니다.

 

위 내용을 토대로 이번엔 다른 시니어분께 피드백을 받으러 가보았습니다.

 

❔❕ 피드백3

시니어개발자3: 프로젝트의 난이도 자체는 크게 어렵지않고, 적당한 수준의 프로젝트가 될 것 같다. 하지만 코어의 역할이 너무 커질 수 있는데 이것을 라이브러리로 잘 쪼개는 것이 중요하다. 모듈 하나가 라이브러리라고 생각해야 할것이다. 의존성을 축소하여 어떻게 의존성을 활용할 것인가에 대한 내용이 중요하다.

 

❔❕ 피드백4

시니어개발자4: 멀티모듈로 프로젝트를 만드는 것에 대한 경험에 의의를 두는 것이라면 좋은 것 같다. 하지만 완성도를 생각하며 프로젝트의 결과물을 향해 달리는 것은 말리고 싶다. 왜냐하면 아직 주니어 단계에서 짧은 기간동안 모듈마다 아주 많은 충돌과 의존성 문제등이 발생할 텐데, 이런 문제는 너무 다양해서 해결하는 과정도 너무 까다로워 진다. 이걸 해결해서 특정한 멀티모듈 프로젝트를 만들어 낸다고 해도 완성도가 높기 어렵고, 이걸 해결하는 과정에서 의도된 문제해결과정을 겪는 것 까지만 좋은 것 같다. 오히려 주니어 개발자에게 바라는 것은 기본적인 구현 능력과, 구현하는 과정에 있어서 코드 한줄 한줄 의미를 이해하고 타당성을 가지는 것이 중요하다.

 

라는 피드백을 받았습니다.

 

멀티모듈로 프로젝트를 설계하여 개발하는 것 자체가 어렵다 쉽다 의 문제가 아니라, 이 멀티 모듈 개발에서 얻을 수 있는게 긍정적인 경험이 될것 같지가 않다는 판단이 들었습니다. 그래서 팀원들과 다시 회의를 시작하였습니다.

 

여기서 저희들이 깨달은 바는 역시 "기술적 의사결정", "타당성" 등이었던 것 같습니다.

 

그래서 마지막으로 주제는 그대로 하되, 프로젝트 개발 일정을 바꾸고 코드에 대한 안정성 등을 고려하며 개발을 진행한 뒤, 완성도 높은 하나의 기본적인 프로그램에서 어떻게하면 더 개선할 수 있고, 어떤 기술을 도입하면 좋을지 고민하는 과정을 경험하자 라는 것을 목표로 다음과 같이 설계했습니다.

 

💻주제: 식당 예약 및 웨이팅 플랫폼, "체어링"

 

👨‍💼 프로젝트 소개: 기다리지 않고 계획적인 방문 + 예약을 할 수 있는 플랫폼

 

✅ 프로젝트 핵심 기술:

1. 웨이팅 상태 변경 시 유저에게 알림 제공

2. 웨이팅 시, 메세지 큐를 사용하여 실시간 대기자 목록 조회

3. 쿠폰 발급 및 예약에서의 동시성 제어

4. 캐시를 활용한 맛집 추천 및 리뷰 추천

5. S3 를 활용한 이미지 등의 대용량 전용 서버 구축

6. CI/CD 를 통한 배포 자동화

 

좀더 프로젝트의 구현레벨에 있어서 간단해 졌습니다.

 

1~4번까지의 항목이 3주동안 진행할 MVP 에 대한 내용이고, 동시성 제어나 실시간 대기자 목록 조회 기능은 3주차의 막바지에 넣을 계획입니다. 그리고 기본적인 구현이 완성도 있게 되고, 저희가 개발한 프로젝트의 코드에 신뢰를 가질 수 있게 테스트코드 커버리지 100% 로, 안정성 있는 프로그램을 개발하려고 합니다.

 

다음 포스팅에서는 기본적인 와이어프레임, ERD, API 명세 등을 설계한 과정을 담아보도록 하겠습니다. 감사합니다.

728x90
반응형