현재까지의 진행 상황
- 12월 말에 팀 구성 완료(2BE + 2FE)
- 프로젝트 명: 오늘의 이웃
- 1월 초 거의 매일 회의하면서 아이디어 구체화와 기획 완료
- 1월 중순부터 아키텍처, DB, API 등의 설계를 시작
- 나를 포함한 백엔드 개발자가 같은 기업에 면접이 잡혀 약 2주 정도 백엔드 올 스톱
- 1월 말 설계 재개 및 MVP 구성 완료
아키텍처와 ERD, API 명세서와 기능 명세서 등이 1차적으로 완성되었다.
MicroService Architecture
우선 MSA 구조 형태로 서비스들을 분리하였다
- API Gateway - 라우팅 및 로드밸런싱 - Spring Cloud Gateway
- 서비스 디스커버리 - Eureka
- Auth - 인증, 인가 담당 - JWT, Oauth
- Chatting -1:1 채팅 및 1:N 채팅(지역 오픈 채팅방 느낌)
- User - 회원 정보 및 프로필, 후기 등등
- 상품 추천
- Product - 상품 관련 CRUD, 검색 등등
- Notification - 채팅 알림, 카테고리 알림 등
- Image - 이미지 등록 및 조회 등
- Config - 환경 설정
설계 및 구현 방법
- 각각의 서비스들은 필요에 따라 HTTP, Message Queue를 통해 통신
- 필요에 따라 DB를 분리하였으며 각각의 서비스는 Master와 Slave의 DB 보유
- Spring Cloud Config를 활용한 환경 변수, 속성 중앙화 및 관리
- 채팅과 카테고리 알람부분에서는 NoSQL인 MongoDB 나머지는 RDBMS인 MySQL 채택
추가 및 고려사항
- 추가를 해야 하나 경험이 없어 어떻게 도입 및 구현해야 할지 잘 몰라 공부중인 부분
- 설계와 구현 등에 대한 논의 필요한 부분
- 로그 시각화 (ELK or Granfana + Prometheus)
- Spring WebFlux 도입
- 카테고리나 지역 정보 같은 메타데이터 관리 전용 서비스 추가? 필요한 서비스에서 관리? 혹은 Redis 이용한 캐싱?
- 상품 추천은 계속 실시간으로 할지? 아니면 배치 작업을 통해 하루에 한 번씩 업데이트 할지
- 사비로 EC2를 사용하는 것이 처음이고, 취준생들이 모여 하는 프로젝트이기 때문에 서버 비용이 예상이 잘 안되기 때문에 무조건 성능을 높이기거나 기능을 생각하기보다는 적절한 Trade-Off가 필요하다