https://www.notion.so/Service-MSA-88cf6b17b494414fa5890332ec181046
- Micro Service Architecture 의 줄임말으로써, 각 서비스를 독립적인 서비스로 연결한 구조를 의미한다.
- 장점은, 하나의 프로젝트 내 서비스 전체가 존재했던 모놀로그식 개발의 단점인 부분 장애가 전체 서비스의 장애로 확대될 수 있는것을 방지.
- 배포 시간이 오래걸리는 것을 해결, 한 Framework & Language에 종속적인 반면, 여러 언어로 개발이 가능하다.
- 재사용성이 용이하다.
- 단점은, 모놀로그식 개발보다 개발의 난이도가 높으며, 통신의 장애와 서버 부하 등이 있을 경우 트랜잭션을 어떻게 유지할지 결정, 구현이 필요함.
- 통합 테스트가 어려우며, 실제 운영환경에 대해 배포하는 것이 쉽지 않음. (단, 기획 단계부터 MSA로 개발하고자 한다면 배포하는 것에 대한 부담이 적어진다)
- 다른 서비스들과의 연동이 정상적으로 이루어지는지 테스트 과정이 필요함.
- API에 대한 문서는 Swagger를 사용하여 작성하였다.
- NodeJS의 라이브러리인 Cron(스프링에서는 Batch와 같다.) 을 통하여 하루가 지나갈 때마다 수집된 정보들을 각 Log Table에 저장함.
- 로그 기록 기간은 당일 기준 최소 1일 ~ 최대 1년까지의 기록을 볼 수 있다.
- 기능은 총 6가지의 기능이 있다.
- 신규 사용자 가입 횟수, 사용자 탈퇴 횟수, 사용자의 웹 로그인 횟수, 국가별 사용자 통계, 각 기능 기간별 합계, 각 기능 기간별 평균 총 6가지 기능이 존재한다.
- 하나의 언어에 종속적인 단점을 직접 느껴보자 하여 NestJS라는 NodeJS의 Express에서 파생된 라이브러리를 사용하여 개발해보고자 하였다.
- 마이크로 서비스 아키텍처(MSA)라는 개념을 어느정도 이해하고자, 하나의 독립적인 서비스를 하나의 프로젝트로 개발해보고자 하였다.
- Docker를 통하여 배포하는 것은 MSA만큼 적절한 상황이 없다 생각하여 PR(Pull Request)이 된 후 Pipeline을 통하여 Image생성 -> Container 과정을 겪어보고 싶었다.
- Visual Sudio Code
- NestJS(Version 3.0)
- TypeORM
- MariaDB
- Docker
- Doppler
- NestJS 프로젝트 세팅
- NestJS Framework 내 프로젝트 구조 세팅 (Provider 생성 및 Module 생성)
- DB구조 작성(ERD Cloud)
- 신규 사용자 가입 횟수, 사용자 탈퇴 횟수, 사용자의 웹 로그인 횟수 기능 구현
- 배치(Cron Library) 프로세스 구현 => NestJS에서는 Scheduler라고 명한다.
- 국가별 사용자 통계 기능 추가
- 각 기능 별 합계 & 통계 기능 추가
- Swagger API 문서 작성
- 합계 & 통계를 하나의 API로 모든 기능들의 결과를 확인할 수 있는 API 작성
- 통합 테스트
- Docker Image Upload
- MVC 패턴으로 구현.
- 각 Module이 Provider를 사용할 수 있도록 Export처리를 전역적으로 해주었음.
- Module 단위로 Controller와 Provider를 작성하였음.
- 기간은 당일 기준 **최소 1일 ~** 최대 1년까지의 통계를 볼 수 있습니다.
- 데이터는 저장되어있는 Log를 기준, Batch Process를 사용하여 1일을 주기로 각 기능의 Batch Table에 하루동안 쌓인 Log Table의 결과를 저장합니다.
- 회원가입 & SNS 첫 로그인 시 신규 사용자 가입 Log가 DB에 저장됩니다.
- 해당하는 테이블의 PK가 삭제되거나 특정 Column의 값이 변경되었을 경우 사용자 탈퇴 로그가 DB에 저장됩니다. - (삭제 여부나 삭제 시간 체크방법은 ?)
- ex ) 삭제 여부 컬럼값이 N → Y & 삭제 시간이 존재하는 경우 등
- 접속 횟수 Log는 로그인이 성공적으로 수행이 된 후에 Log Table에 저장됩니다.
- 중복 체크는 하루 기준으로 하며, 유저 DB의 PK를 사용하여 중복체크를 합니다.
- 1번 기능 Batch Table에서 사용자가 설정한 기간만큼 연산을 수행한 후 기간별 합계를 보여줍니다.
- 연산 과정은 프로젝트 내 비즈니스 로직에서 수행 예정입니다.
- 4번 기능 명세랑 동일합니다.
- End-User가 설정한 기간의 데이터 Count / 시작일~종료일만큼의 날짜
- 반올림은 없으며, 소수점 한자리수까지 보여줍니다.
- 로그인 시, IP로 접속 국가를 판단하여 해당하는 국가를 Log Table에 저장합니다.
- 기간별로 어느 국가에서 접속을 몇번 하였는지 확인할 수 있습니다.
- 중복체크는 하루 기준으로 하며, 유저 DB의 PK를 사용하여 중복체크를 하도록 합니다.
- MSA가 여러개일 경우, 환경변수 설정에 있어서 개발 시간의 손실이 생길 수 있다 생각하여서 하나의 Tool로 관리하자 생각함.
- .env 파일의 보안 이슈가 있다 하여, Doppler 사용을 하기로 최종 결정.
오늘의집 MSA Phase 1. 서비스 구축과 배포 with Mortar - 오늘의집 블로그