MSA 프로젝트 시작 계기
최근 몇달 전 부터 MSA라는 단어와 우연히? 마주치는 빈도가 많아졌었다. MSA에 대해서는 일전에 모놀리식과의 장단점을 비교해보았던 적이 있었고, MSA 가 가진 장점에 많은 이점에 공감했기에, 이번에 모인 팀원들과 함께 사이드로 프로젝트를 경험해보려고 하였다.
https://yubi5050.tistory.com/155
프로젝트 구조 및 설계
📌 프로젝트 주제
모아 구독 : MSA 기반의 구독 모아 보기 서비스 (중개형 플랫폼)
📌 프로젝트 목표
가장 큰 목표는 더 적합한, 더 나은 아키텍쳐를 위해 고민을 다양한 방향으로 많이 해보는 것
- 서비스 간 독립적인 모듈 구현으로 결합도를 낮추고 서비스 안정성을 높임
- 서비스 별 다른 개발 언어(프레임워크)를 사용하는 폴리그랏(polyglot) 구조 적용
- 서비스 별 적합한 DB 선택 및 분리
- 서비스 분리로 인해 관리포인트 증가에 대한 적절한 Trade-off
- TDD 기반 UnitTest 코드 작성
📌 프로젝트 구조
MSA를 잘 운영하기 위해서는 가능하다면, FE, BE, DB가 각각 분리 되는 것이 좋기에, 왼쪽의 일반적인 MSA 서비스 구조를 바탕으로 아래와 같이 설계 하였다. (필자는 서비스 중 주황색 부분의 BE를 담당)
설계한 프로젝트 구조는 아래 이미지와 같다.
📁 유저 목록
- 판매자 (구독 서비스 관리, WEB - TypeScript)
- 소비자 (구독 서비스 구매, APP - ReactNative)
📁 서비스 목록
- 인증·인가 서비스 (Auth Service, Django) : 로그인, 회원가입
- 조회 서비스 (Lookup Service, Django) : 구독 상품을 조회
- 판매자 웹 서비스 (Seller Service, Django) : 구독 상품 등록, 변경, 삭제, Dashboard
- 결제 서비스 (Payment Service, Spring) : 구독 상품 결제 및 구독 관리
- 검색 히스토리 서비스 (Search Service, Django) : 검색 히스토리 조작 서비스 (최근 검색어, 추천 검색어)
- 채팅 서비스 (Chatting Service, Nodejs) : 판매자-소비자 1대1 채팅 서비스
- 메일 서비스 (Mail Service, FastAPI) : 구독 상품 변경시 약관 전송 메일
📁 DB 목록
- RDB (PostgreSQL) : User, Product, Payment 관련 Table
- NoSQL (MongoDB) : Chatting, SearchHistory 관련 Document
📁 기타
- Redis : 조회 서비스 - 캐싱용 In-memory DB
- RabbitMQ, Celery : 메일 서비스 - 비동기 메시지 큐 작업
- AWS EC2, Docker : 공통 - 컨테이너 인프라 환경
- AWS S3, RDS : 스토리지, DB 저장소
프로젝트 간 주요 고민 사항
MSA 프로젝트에서 맡은 서비스 구현을 진행하면서, 많이 고민했던 부분에 대해 되돌아보며, 차례대로 앞으로 글로 남겨보려고 한다.
📁 글 목록
- 1. 조회 서비스 - 페이지 네이션과 캐싱을 이용한 구독 상품 리스트 조회 구현기 (링크)
- 2. 조회 서비스 - 조회수 구현하기 1 - 동시성 이슈 해결하기 (부제 : ORM 부터 Transaction Isolation Level 까지, 링크)
- 3. 조회 서비스 - 조회수 구현하기 2 - 쿠키를 활용하여 중복 접근 해결하기 (링크)
- 4. 조회 서비스 - QueryProfiling을 통한 성능 최적화 (링크)
- 5. 검색 히스토리 서비스 - NoSQL vs RDB, Singleton 적용기 (링크)
- 6. 메일 서비스 - 동기 기반 메일 서비스 비동기 전환기 (링크)
'프로젝트 경험기 > MSA 경험기' 카테고리의 다른 글
[MSA 경험기] 모아 구독 (6) 검색 히스토리 서비스 (by. NoSQL, Singleton) (1) | 2022.11.27 |
---|---|
[MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화 (0) | 2022.11.25 |
[MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키와 동시성) (1) | 2022.11.23 |
[MSA 경험기] 모아 구독 (3) 조회수 구현 1 (by. 쿠키와 동시성) (1) | 2022.11.23 |
[MSA 경험기] 모아 구독 (2) 페이지 네이션, 캐싱을 적용한 상품 조회 (2) | 2022.11.23 |