프로젝트 기간 23.09.12 ~ 23.09.19
상용 서비스를 분석해서 Spring Cloud 기반으로 구성해보자(MSA)
MSA로 진행할만한 프로젝트 주제를 생각하다가 실제로 사용중인 '소모임' 어플같은 것을 만들어보고 싶어서 의견을 냈다.
조원들과 여러 주제를 두고 이야기를 나누다가 '소모임'으로 진행하기로 결정.
MSA프로젝트는 다양한 서비스가 있어야 활용 가치를 제대로 습득해볼 수 있는데, '소모임' 어플이 마침 앨범, 게시판, 채팅, 커뮤니티 등 서비스가 다양하게 나뉘어져 있어서 MSA 프로젝트로 진행하기 적합하다 판단되어 조원들과 회의 끝에 '소모임'을 프로젝트 주제로 선정하였다.
➡️ 수업시간에 배민을 바탕으로 도메인을 분석하고 eureka, gatway를 사용하며 msa로 만들어 봤지만, 정확히 어떤게 msa라는건지,, eureka나 gatway가 뭔지,, 왜 쓰는건지 이해되진 않았다.
그래서 조원들과 회의를 하며 이렇게 구성하기로는 했지만, 이 때까지는 전반적인 흐름과 틀정도만 이해한 상태로 프로젝트를 시작했던 것 같다.
추후 서비스를 하나씩 만들고 각자 만든 서비스를 gatway와 eureka에 연결시키면서 점차 이해됐다.
Eureka Server (8761)
➡️ server 들을 관리하며 load balancer 제공
Config Server (8888)
➡️ jwt token 발급을 위한 secret key config 공통 사용
GateWay Server - (8000)
➡️ netty 의 non-blocking 기반으로 request 들을 각각의 server에 뿌려줌
Auth Server
➡️ kakao oauth 처럼 인증서버를 따로 두고 해당 인증 서버에서 회원가입과 로그인을 완료 한 뒤 Token을 발급받아 Main 서비스로 쏴준다.
User Server - Eureka Client
➡️ User 하위 도메인에는 Interest (유저의 흥미) , Reserve (유저의 찜 목록) 이 있다.
User 를 MSA 기반으로 분리하지 않은 이유는 프로젝트 특성상 User에 트래픽이 몰릴 가능성은 적기 때문에 하나의 프로젝트에서 진행하기로 하였다.
Community Server - Eureka Client
➡️ 프로젝트의 핵심 Server 라고 생각하기 때문에 실제로 실무를 돌때는 여러대의 server를 운용해야 할 것 이다.
또한 MSA 기반으로 해당하는 community 와 관련된 하위 도메인들은 전부 다 분리 시켜 놓았다.
community 를 생성하면 프론트에서 로그인한 userId를 같이 올려주고 CommunityMember 에도 같이 save 될 수 있게 해놓았다.
Board Server - Eureka Client
➡️ Community 의 하위 도메인인 Board Server 고 CQRS로 게시글 쓰기와 읽기서버를 나눌 예정이다.
Comment Server - Eureka Client
➡️ Board 의 하위 도메인인 댓글 서버 이다.
CommunityMember Server - Eureka Client
➡️ Member가 가입한 CommunityList를 보여준다. Member가 Community에 가입할 때 Insert 된다.
Schedule Server - Eureka Client
➡️ Community 의 하위 도메인인 일정 server이다.
Album Server - Eureka Client
➡️ Board 의 하위 도메인인 사진첩 server 이다.
Like Server - Eureka Client
➡️ board 와 album 의 하위도메인인 좋아요 server이다.
like 추가 시 구분 값에 따라 board & album 의 필드에 like count 필드를 수정 하는 쿼리를 날린다. (좋아요 추가/삭제)
Chatting Server - Eureka Client
➡️ node/express server로 구성 되어 간단히 채팅을 구현.
mongo db 에 data 저장.
Band - Client ( 3000 )
➡️ main project client
Auth - Client ( 3001 )
➡️ auth server 의 client
FRONT 에서 auth 서버로 로그인을 누르면
auth 서버에서 짜놓은 로직으로 회원가입을 한다.
auth 서버에서 방금 가입한 계정으로 로그인을 하면 TOKEN이 발급되고, 그 TOKEN이 요청한 FRONT쪽으로 넘어오게 된다.
FRONT 에서 방금 받은 토큰을 다시 넘긴다. 이유는 토큰을 까야하기 때문.
왜 우리가 바로 토큰을 까서 사용할 수 없는가? -> 우리의 시크릿 키랑 auth server의 시크릿키가 다르기 때문이다.
auth server에서 token을 parse 한 정보를 다시 FRONT로 보내준다.
프론트에서는 Auth server에서 Email과 name 을 받아오게된다.
우리의 service에 받아온 email 정보를 던져서 현재 가입한 회원인지 체크를 한다.
가입된 회원이라면?
mainpage로 넘겨주면서 전역 셋팅(유저정보를 프론트에서 가지고 있는 행위 )을 하고
가입되지않은 회원이라면?
추가정보 ( 비밀번호, 흥미, 등등 )을 받아서 우리의 service에 다시 저장한다.
이렇게 하는 이유는 우리의 서비스에 필수적인 데이터로 흥미나 프로필이미지 등이 있는데 이런 데이터는 token에 없기때문이다.
오우 msa를 직접해보시다니! 대단하시네요 👍🏻 토큰까지!