MSA 프로젝트- 소모임

박경희·2023년 9월 19일
1

프로젝트

목록 보기
13/16

어플 '소모임'을 모델로하여 MSA로 만든 프로젝트


프로젝트 기간 23.09.12 ~ 23.09.19

✅ 기획

  • 상용 서비스를 분석해서 Spring Cloud 기반으로 구성해보자(MSA)

  • MSA로 진행할만한 프로젝트 주제를 생각하다가 실제로 사용중인 '소모임' 어플같은 것을 만들어보고 싶어서 의견을 냈다.
    조원들과 여러 주제를 두고 이야기를 나누다가 '소모임'으로 진행하기로 결정.

  • MSA프로젝트는 다양한 서비스가 있어야 활용 가치를 제대로 습득해볼 수 있는데, '소모임' 어플이 마침 앨범, 게시판, 채팅, 커뮤니티 등 서비스가 다양하게 나뉘어져 있어서 MSA 프로젝트로 진행하기 적합하다 판단되어 조원들과 회의 끝에 '소모임'을 프로젝트 주제로 선정하였다.

➡️ 수업시간에 배민을 바탕으로 도메인을 분석하고 eureka, gatway를 사용하며 msa로 만들어 봤지만, 정확히 어떤게 msa라는건지,, eureka나 gatway가 뭔지,, 왜 쓰는건지 이해되진 않았다.

그래서 조원들과 회의를 하며 이렇게 구성하기로는 했지만, 이 때까지는 전반적인 흐름과 틀정도만 이해한 상태로 프로젝트를 시작했던 것 같다.

추후 서비스를 하나씩 만들고 각자 만든 서비스를 gatway와 eureka에 연결시키면서 점차 이해됐다.


ERD

  • MSA 로 모든 서비스를 찢기 전에 ERD 를 작성

community

user

chatting

프로젝트 진행하며 수정된 community


Server 분리

  1. Eureka Server (8761)
    ➡️ server 들을 관리하며 load balancer 제공

  2. Config Server (8888)
    ➡️ jwt token 발급을 위한 secret key config 공통 사용

  3. GateWay Server - (8000)
    ➡️ netty 의 non-blocking 기반으로 request 들을 각각의 server에 뿌려줌

  4. Auth Server
    ➡️ kakao oauth 처럼 인증서버를 따로 두고 해당 인증 서버에서 회원가입과 로그인을 완료 한 뒤 Token을 발급받아 Main 서비스로 쏴준다.

  5. User Server - Eureka Client
    ➡️ User 하위 도메인에는 Interest (유저의 흥미) , Reserve (유저의 찜 목록) 이 있다.
    User 를 MSA 기반으로 분리하지 않은 이유는 프로젝트 특성상 User에 트래픽이 몰릴 가능성은 적기 때문에 하나의 프로젝트에서 진행하기로 하였다.

  6. Community Server - Eureka Client
    ➡️ 프로젝트의 핵심 Server 라고 생각하기 때문에 실제로 실무를 돌때는 여러대의 server를 운용해야 할 것 이다.
    또한 MSA 기반으로 해당하는 community 와 관련된 하위 도메인들은 전부 다 분리 시켜 놓았다.
    community 를 생성하면 프론트에서 로그인한 userId를 같이 올려주고 CommunityMember 에도 같이 save 될 수 있게 해놓았다.

  7. Board Server - Eureka Client
    ➡️ Community 의 하위 도메인인 Board Server 고 CQRS로 게시글 쓰기와 읽기서버를 나눌 예정이다.

  8. Comment Server - Eureka Client
    ➡️ Board 의 하위 도메인인 댓글 서버 이다.

  9. CommunityMember Server - Eureka Client
    ➡️ Member가 가입한 CommunityList를 보여준다. Member가 Community에 가입할 때 Insert 된다.

  10. Schedule Server - Eureka Client
    ➡️ Community 의 하위 도메인인 일정 server이다.

  11. Album Server - Eureka Client
    ➡️ Board 의 하위 도메인인 사진첩 server 이다.

  12. Like Server - Eureka Client
    ➡️ board 와 album 의 하위도메인인 좋아요 server이다.
    like 추가 시 구분 값에 따라 board & album 의 필드에 like count 필드를 수정 하는 쿼리를 날린다. (좋아요 추가/삭제)

  13. Chatting Server - Eureka Client
    ➡️ node/express server로 구성 되어 간단히 채팅을 구현.
    mongo db 에 data 저장.

  14. Band - Client ( 3000 )
    ➡️ main project client

  15. Auth - Client ( 3001 )
    ➡️ auth server 의 client


auth server를 통한 로그인

✔️ 프론트에서 auth 서버를 통한 로그인 과정

  • FRONT 에서 auth 서버로 로그인을 누르면

  • auth 서버에서 짜놓은 로직으로 회원가입을 한다.

  • auth 서버에서 방금 가입한 계정으로 로그인을 하면 TOKEN이 발급되고, 그 TOKEN이 요청한 FRONT쪽으로 넘어오게 된다.

  • FRONT 에서 방금 받은 토큰을 다시 넘긴다. 이유는 토큰을 까야하기 때문.
    왜 우리가 바로 토큰을 까서 사용할 수 없는가? -> 우리의 시크릿 키랑 auth server의 시크릿키가 다르기 때문이다.

  • auth server에서 token을 parse 한 정보를 다시 FRONT로 보내준다.

  • 프론트에서는 Auth server에서 Email과 name 을 받아오게된다.

  • 우리의 service에 받아온 email 정보를 던져서 현재 가입한 회원인지 체크를 한다.

  • 가입된 회원이라면?
    mainpage로 넘겨주면서 전역 셋팅(유저정보를 프론트에서 가지고 있는 행위 )을 하고

  • 가입되지않은 회원이라면?
    추가정보 ( 비밀번호, 흥미, 등등 )을 받아서 우리의 service에 다시 저장한다.

  • 이렇게 하는 이유는 우리의 서비스에 필수적인 데이터로 흥미나 프로필이미지 등이 있는데 이런 데이터는 token에 없기때문이다.


1개의 댓글

comment-user-thumbnail
2023년 9월 25일

오우 msa를 직접해보시다니! 대단하시네요 👍🏻 토큰까지!

답글 달기

관련 채용 정보