일단 Hot-item-collector 를 리팩토링한다고 하긴 했는데
사실 아예 새로운 서비스가 될 수도 있으며 말그대로 리팩토링하는 과정이 담길 수 있다.
그리고 서비스 런칭 수준으로 프로젝트를 끌어올렸을 때 기준을 잡는다면 소요 기간은 아마 30-50일 사이로 잡히지 않을까 싶다.
짤막한 일정 선정 이유
- 0일 ~ 2주 : MVP
- 3주 ~ : 고도화 및 배포
일단 이번 포스팅에서는 핵심 기능 정의와 기술 스택 선별 그리고 해당 기술을 선택한 이유까지만 적어 보도록 하겠다.
MVP에는 다음과 같은 기능을 담고자 한다.
일단 MSA를 경험하는게 먼저일 것 같다는 생각이 들어서 MVP를 위의 4가지 기능으로 선정했고, MVP외의 기능은 추후에 확장하며 진행하겠다.
회원 가입, 로그인, 비밀번호 변경
JWT 기반 인증 및 OAuth2 소셜 로그인 (카카오, 네이버 등)
상품 목록 조회, 검색
카테고리 및 브랜드별 필터링
상품 상세 페이지
사용자가 상품을 장바구니에 추가/삭제
수량 변경
주문 생성 (배송 정보 입력)
결제 처리 (카드, 가상계좌, 네이버페이 등)
주문 상태 변경 (결제 완료 → 배송 중 → 배송 완료)
주문 시 재고 감소
재고 부족 알림
상품에 대한 리뷰 작성
별점 평가
추천 및 검색(Search & Recommendation Service)
인기 상품 추천
Elasticsearch를 활용한 검색 최적화
문의하기, 1:1 채팅 상담
환불/반품 처리
프로모션, 쿠폰 할인 적용
특정 유저 대상 이벤트
배송 추적
배송 상태 업데이트
일단 MSA에 초점을 맞춘 프로젝트기 때문에 프론트는 추후에 구현이 가능하거나 러닝커브를 고려한 후 선별을 하도록 하겠다.
기술 스택은 다음과 같이 정했다.
Backend : Java(Spring Boot 3.x)
DBMS
1) MySQL : 정형 데이터 관리
2) MongoDB : 비정형 데이터 관리 (로그, 채팅 메시지, 리뷰 등)
통신 방식
서비스 간 RESTful API
RabbitMQ(이벤트 기반 처리)
왜 RabbitMQ를 쓰냐면...
사실 MSA구조의 서비스를 개발 심지어 초기에는 MVP를 목표로하기 때문에 대용량 처리나 매우 복잡한 아키텍쳐를 가질 필요가 없다는 판단이기 때문이다.
또한 추후에 CS관련 기술을 고려했을 때 아마도 1:1 채팅이 될 예정인데
지연 시간이 짧은 RabbitMQ가 메시지 처리 브로커로 조금 더 알맞지 않을까 싶기 때문이다.
(맘 같아선 서비스 간 통신은 Kafka, 채팅 서비스에서는 RabbitMQ였지만 작은 규모의 서비스에서 기술 다 때려넣는게 좋지 않은건 아니까..)
즉, 정리해보면 다음과 같이 정리되겠다.
- RabbitMQ: 지연 시간이 짧고, CS(1:1 채팅) 같은 빠른 응답이 필요한 서비스에 적합
- Kafka: 대용량 스트리밍 데이터 처리에 강점이 있지만, 초기 MSA에서는 과도한 복잡성 초래 가능
👉 결론: RabbitMQ를 사용하여 이벤트 기반 처리를 하되, 추후 Kafka 도입을 고려