MSA 구조로 아키텍쳐를 설계하면 다음과 같은 고민이 있다.
1. authService와 PostService가 있다고 존재한다.
2. authService는 유저들의 authentication, authorization을 해주는 서버로, 회원가입, 로그인, 유저 데이터 수정과 같은 역할을 한다.
3. PostService는 게시판 서비스로 유저들이 게시글을 올리고 다른 유저의 게시글을 조회하고 커멘트를 남기는 서비스이다.
---> 이때 authService와 PostService를 각각의 마이크로서비스로 나누어 운영한다면 PostService에서는 유저 데이터를 어떻게 사용할 수 있을까? 이다.
즉 PostService도 유저 데이터가 필요하다. 게시글을 작성하고 조회하고 코멘트를 남기는 등의 작업은 모두 유저가 하는 것이기 때문이다.
해서 다음과 같은 해결 방법이 있을 것이다.
1. PostService가 유저 데이터를 필요로 할 때마다 authService에 요청을 해서 요청한 사람이 우리 서비스의 유저가 맞는지 확인하고 유저 데이터를 가져온다. (즉 유저 데이터는 authService가 사용하는 DB에만 저장됨)
2. PostService에도 유저데이터를 저장한다. (유저 데이터는 authService의 데이터베이스, postService의 데이터베이스 모두에 저장됨)
3. 유저 데이터를 저장하는 하나의 데이터베이스를 authService, PostService가 공유한다. (유저 데이터가 authService, postService가 사용하는 데이터 베이스가 아니라 또 다른 제 3의 유저 데이터 저장 데이터베이스에 저장됨)
각각의 1, 2, 3 해결방법에는 다음과 같은 문제가 있다.
먼저 1번 방법은 그러면 굳이 그 둘을 마이크로서비스로 쪼개야 할까?라는 문제가 생긴다. MSA는 각 도메인 별 의존관계가 낮다고 생각하는 서비스들을 분리시켜 하나의 서비스가 다운되더라도 다른 서비스는 동작할 수 있다는 것에 큰 의의가 있다. 그런데 1번 방법을 사용한다면, authService가 동작하지 않는다면 PostService 역시 동작이 불가능하다.
다음으로 2번 방법은 위에서 말한 MSA의 의의를 지킬 수 있다는 점에서 좋은 방법이다. 하지만 authService의 유저 데이터가 저장/수정/삭제 될 때마다 PostService의 유저 데이터도 계속해서 동기화를 해줘야 한다는 것이다.
마지막으로 3번 방법은 유저 데이터는 제 3의 데이터 베이스에 저장되므로 해당 데이터베이스가 다운되면 authService, postService 모두가 동작이 불가능하다. 즉 1번 해결방법과 비슷한 문제를 가지고 있다.
'memo' 카테고리의 다른 글
HiKariCP (0) | 2023.08.01 |
---|---|
firebase : Cloud Firestore (0) | 2023.06.10 |