On-The-Block 서비스 개발기 01
On-The-Block 서비스 개발기 01
26학년도 1학기에 Capstone Design 과목을 수강하면서, 팀 프로젝트로 On-The-Block이라는 서비스를 개발하게 되었습니다. 우선, 서비스는 칵테일, 바, 리큐르 샵에 대한 정보 및 커뮤니티, 추천 시스템, 채팅 등등 “당근 마켓 + 데일리 샷”의 기능을 합친 형태의 서비스를 제공하고자 합니다.
On-The-Block -> 바에서 술을 먹을 때, On The Rock이라는 표현이 있는데, 그걸 참고해서 만든 이름입니다. 음.. 저는 개인적으로 입에 달라붙어서 좋다고 생각합니다.
3명에서 진행하는 프로젝트이며, MSA(Micro Service Architecture) 형태로 개발을 진행할 예정입니다. MSA로 개발을 진행하는 이유는, 각자 주력하는 언어가 다르고, 각자의 목표가 다르기 때문에 자신이 가장 잘하는 언어와 기술로 개발을 진행하는 것이 좋다고 판단되어서 MSA로 개발을 진행하기로 했습니다. 또한, 주제가 좀 진부한거 아니냐 라고 생각할 수도 있는데, 취업하려면 이런 서비스도 당연히 필요하다고 생각했기에, 이런 서비스를 개발하기로 했습니다.
구현할 기능
아마, 표로 정리하는게 깔끔할 것 같아서, 문서에 작성한 표를 그대로 올리겠습니다.
| 기능 분류 | 세부 기능 (기능 정정 및 추가) | 핵심 기술 (Tech Stack) | 담당 역할 |
|---|---|---|---|
| 인증 및 커머스 | 회원가입, 성인 인증(필수), 주류 스마트오더, 결제 파이프라인, 동네 인증 | Java/Kotlin, Spring Boot, Spring Security, PostgreSQL, Redis | Java |
| 실시간 상호작용 | 술 번개/모임, 그룹 채팅, 실시간 참여 알림 | Go/Rust, gRPC, WebSocket, Amazon DynamoDB | Go/Rust/C++/C |
| 지능형 서비스 | 설문 기반 맞춤형 주류 추천, 이상 거래 탐지(FDS), 추천 모델 서빙, 챗봇 | Python, Qdrant (Vector DB), Airflow (워크플로우), ONNX Runtime | Python/C++ |
| 위치 및 검색 | 지도 기반 주변 바(Bar) 탐색, 하이브리드 검색 (키워드+벡터) | OpenSearch, PostGIS, 공공데이터(POI) | 공용 |
| 데이터 파이프라인 | 서비스 간 이벤트 중계, 사용자 행동 로그 수집, CDC 데이터 동기화 | Apache Kafka, Amazon MSK, AWS Lambda, DynamoDB Streams | 공용 |
| 어드민 (Admin) | 매장 재고 관리, 주문 현황 대시보드, 유저 매너온도 관리 | Java/Kotlin, React/Vue (Frontend) | Java,Javascript |
| 인프라/DevOps | 컨테이너 오케스트레이션, 인프라 코드화(IaC), CI/CD 자동화 | Kubernetes (EKS), Docker, Terraform, Helm, GitLab CI | 공용 |
맡은 역할
| 기능 분류 | 세부 기능 (기능 정정 및 추가) | 핵심 기술 (Tech Stack) | 담당 역할 |
|---|---|---|---|
| 실시간 상호작용 | 술 번개/모임 매칭, 그룹 채팅, 실시간 참여 알림 | Go/Rust, gRPC, WebSocket, Amazon DynamoDB | Go/Rust/C++/C |
| 지능형 서비스 | 설문 기반 맞춤형 주류 추천, 이상 거래 탐지(FDS), 추천 모델 서빙 | Python, Qdrant (Vector DB), Airflow (워크플로우), ONNX Runtime | Python/C++ |
공용 이라고 되어 있는 부분들은 팀원이 같이 공부하면서 개발을 진행하기로 했습니다. 저는 채팅 시스템과 추천 시스템을 도맡아 개발하기로 했습니다.
이벤트 스토밍
이 방법론은 DDD(Domain-Driven Design)에서 나오는 개념으로, 도메인 모델링을 시각적으로 표현하는 방법이고, 구성원 모두(말 그대로 모두입니다)가 참여해야한다고 합니다.

이 과정에서 저희가 개발하려는 서비스의 기능들을 어떻게 할지 정리하는 과정이 계속해서 발생했고, 도출하기 힘든 부분이나 명확하게 해야하는 기능들에 대한 논의가 팀원들끼리 계속해서 발생했습니다. 이러한 과정에서 기능들과 서비스의 흐름이 명확하게 정리되었고, 그래서 이벤트 스토밍을 진행하는 과정이 광장히 중요하다고 생각했습니다. 특히, 저희가 하려는 서비스가 규모가 큰 서비스가 아닌데도 불구하고, 고쳐야할 기능이나 논의해야할 부분들이 계속해서 생겨났고, DAU나 MAU가 어떻게 될지, 데이터베이스는 뭘 쓸지, 어떤 기술 스택을 사용할지 등등..
이게, 무엇보다 중요한게 -> **“모두”**가 참여해야 된다고 느낀 부분입니다. 만약, 실제 회사에서 일을 하게 되면 (스타트업에 한정해서) 이런식으로 일을 하게 될지는 모르겠는데 개발에는 단순 기술이 아니라 도메인 지식, 디자인, CTO, 개발자, 마케터 상관없이 모두가 참여해서 도메인 영역을 명확하게 이끌어내고 그 과정에서 무언가 톱니가 맞지 않는 부분을 발견하고 얘기하고 논의하고 고쳐나가는 과정이 굉장히 중요하다고 생각 했습니다. 학생인 지금 부담없이 이 과정을 경험해보는 것이 너무나도 감사하게 여겨졌습니다.
이벤트 스토밍은 3/27과 4/3일날 진행했는데 생각나는 내용부터 작성하고자 합니다. 우선, 리쿼샵 정보와 주류 세부 정보라는 영역과 찜 목록에 있는 추천시스템, 장바구니 기능에 대한 얘기였습니다.
기능으로는 사용자가 리쿼샵이나 술 명칭을 검색할 수 있는데, 리쿼샵을 클릭하게 되면 해당 리쿼샵이 가지고 있는 술의 목록이 나오고, 술을 클릭하게 되면 술에 대한 정보와 술을 보유하고 있는 근처 리쿼샵이 나오게 됩니다. 여기서 사용자가 술을 찜하거나 장바구니에 넣을 수 있게 됩니다.
찜 목록은 추천 시스템 마이크로 서비스가 연동되어 있어 찜한 술에 대한 위치 기반의 가장 가까운 가게와 가격 이점이 있는 가게를 추천해줍니다. 그러나 리쿼샵에서 술을 선택한 경우는 이런 추천을 할 필요가 없기에, 바로 장바구니에 넣을 수 있게 됩니다. 그래서, 리쿼샵에서 술을 선택한 경우는 찜 목록과 추천 시스템이 연동되지 않도록 했습니다. 찜 목록에서 선택한 술은 장바구니로 넘어가 최종 결제를 할 수 있도록 했습니다.
또한, 메인 페이지에 대한 디자인을 얘기했었는데 줄글로 서술하면 머릿속에 같이 그림이 그려지지 않을 것 같아, 번호로 정리해서 작성하고자 합니다. (위 -> 아래 흐름)
- 메인 페이지의 상단 왼쪽에는 로고와 서비스 이름이 있고 오른쪽 상단에는 검색 아이콘, 알림 아이콘, 프로필 아바타가 있습니다.
- 각 아이콘을 클릭하게 되면 modal기능이 아니라 새로운 페이지로 이동하게 됩니다.
- 메인 페이지 hero 영역에서는 사용자가 앞서 응답한 선호조사 시스템에 기반한 주류와 설명이 좌우로 자동 스크롤 되는 형태의 디자인을 넣으려고 합니다. 캐러셀 형태의 디자인을 적용하고자 합니다. (https://www.krds.go.kr/html/site/component/component_04_09.html)
- 그 아래에는 사용자 위치기반으로 주변 바, 리쿼샵을 보여주는 영역이 스크롤 하는 형태로 나오고
- 그 아래에는 사용자 위치기반으로 관광정보나 장소관련된 api를 결합해 주변에서 자유롭게 모일 수 있는 장소를 추천하는 영역이 나옵니다. (간단한 술을 즐길 때 공원이나 강변 같은 곳에서 먹기도 하니까 그런 장소의 추천입니다) 즉, 공짜로 술을 즐길 수 있는 장소를 추천하는 영역입니다.
- 그 아래에는 게시판 추천 글이나 정보글을 보여주는 영역으로 메인 페이지를 마무리하려고 합니다.

정리된 내용:
- 로그인/회원가입은 Google OAuth로만 진행하기로 했고, 일반적인 로그인, 회원가입 형태의 form은 없습니다.
- 사업자 등록이나 공공기관에 문서를 제출하고 인증한 뒤 프로젝트에 넣을 수 있는 결제, 성인 인증 로직은 앱이 80%이상 완성되면 추가하기.
- 찜 목록에서 추천 시스템과 연동되는 경우는, 사용자가 술을 찜한 경우에만 연동이 되고, 리쿼샵에서 술을 선택한 경우는 찜 목록과 추천 시스템이 연동되지 않도록 하기.
- 메인 페이지 디자인은 위에서 아래로,
- 상단 바(로고, 검색 아이콘, 알림 아이콘, 프로필 아바타)
- 캐러셀 형태의 선호조사 기반 주류 추천 영역
- 사용자 위치 기반 주변 바/리쿼샵 추천 영역
- 사용자 위치 기반 공짜로 술을 즐길 수 있는 장소 추천 영역
- 게시판 추천 글/정보글 영역으로 구성하기
앱에 디자인은 Stitch형태로 구현이 이미 되어 있기에, 신경을 쓰지 않아도 되고, Notion에서 파트별로 디자인을 올려두고, 이상한 부분이나, 기능에 대한 토의를 진행했습니다.

마치며
- 이벤트 스토밍 매우 중요하다.
- 서로 “어떤 기능이 필요하다, 그런 기능은 다른 방식으로 대체할 수 있다, 이런 방식이 더 좋을 것 같다.” 라는 식으로 계속해서 얘기하고 논의하는 과정이 굉장히 중요하다.
- 도메인 지식이 풍부한 사람이 있으면 매우 편하다. 원하는 기능이나 느낌 같은걸 바로바로 피드백을 해준다.
- 혼자 이벤트 스토밍을 하는건 불가능하다고 생각한다.
- 개인 개발과 팀 개발의 차이를 명확하게 알았다.
이 시리즈는 완성될 때까지, 계속해서 연재됩니다.
- Flutter 구현을 위한 바이브 코딩
- 채팅 서비스에 대한 다양한 블로그 글 리뷰나, 논문 리뷰
- 추천 시스템에 대한 다양한 블로그 글 리뷰나, 논문 리뷰
- 개발하면서 겪었던 문제점과 해결 과정들
- 개발하면서 느꼈던 점들
- 개발하면서 공부했던 내용들
- 개발하면서 참고했던 자료들 등등
댓글