inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)

[실습] User Microservice 만들기

user-service jwt

26

SJ

작성한 질문수 155

0

frontend 와 backend jwt 주고 받을때

controller 에서 @User 라는 데코레이션 혹은 그냥

@AuthenticationPrincipal AuthenticatedUser authenticatedUser,

만들어두고 사용하곤 했었는데

레파지토리를 나눠버렸을때는 어떻게 관리를 하게 되나요 ??

아키텍처 spring-cloud kafka msa devops

답변 2

0

JSCODE 박재성

안녕하세요 ! 질문 너무 잘 해주셨어요 ~

질문해주신 내용에 답변 드려볼게요 !

우선 레포지토리(서비스)를 분리한 MSA 환경에서는 보통 JWT 인증을 각 서비스마다 개별적으로 처리하지 않고, API Gateway에서 JWT 검증을 한 번 처리한 뒤에 내부 서비스로 사용자 정보를 전달하는 방식으로 많이 구성해요 !

구체적으로는 API Gateway에서 JWT를 검증하고, 토큰에서 추출한 사용자 정보(userId 등)를 HTTP 헤더(예: X-User-Id)에 담아서 각 내부 서비스로 요청을 전달해주는 방식을 주로 사용해요 !

그러면 내부 서비스의 Controller에서는 @RequestHeader("X-User-Id") Long userId 이런 식으로 간단하게 사용자 정보를 받아서 쓸 수 있게 돼죠 !

이 방식의 장점은 각 서비스마다 JWT 검증 로직이나 Secret Key를 중복해서 관리할 필요가 없다는 점이에요 !

인증 관련 책임을 Gateway에 몰아주고, 내부 서비스는 비즈니스 로직에만 집중할 수 있게 되는 구조인거죠 ~

참고로 어떤 방식이 더 좋다라기보단, 프로젝트의 규모나 구조에 따라 선택하시면 돼요 :)

추가로 궁금하신 점 있으시면 또 질문 남겨주세요~~

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. SJ님.

JWT(Json Web Token)를 활용하여 프론트엔드와 백엔드 간의 인증을 처리할 때, 특히 MSA(Microservices Architecture) 환경에서 각 모듈이 독립적으로 운영되는 경우, JWT의 핸들링 방법은 중요합니다. 각각의 서비스가 독립적으로 JWT를 검증하고 사용자 정보를 관리할 수 있도록 설계하는 것이 일반적입니다.

MSA 환경에서의 JWT 처리 방법:

  1. 중앙 인증 서버를 고려: MSA에서는 각 서비스가 분리되어 있기 때문에, A 서비스에서 받은 토큰을 B 서비스에서도 동일하게 검증할 수 있도록 중앙 인증 서버를 두는 것이 효과적입니다. 이를 통해 각 서비스가 동일한 인증 로직을 따르게 할 수 있습니다.

  2. 토큰 검증 로직 분리: 각 서비스가 JWT를 직접 검증해야 하는 경우, 검증 로직을 공통 모듈로 추출하여 각 서비스에서 재사용할 수 있도록 구성할 수 있습니다. 이 방식은 코드의 중복을 줄이고, 유지보수를 용이하게 합니다.

  3. @AuthenticationPrincipal 대체: @AuthenticationPrincipal 어노테이션은 Spring Security에서 사용되는 방식입니다. MSA에서는 각 서비스가 독립적이므로, AuthenticatedUser와 같은 객체를 공통 모듈로 사용해 직접적으로 생성 및 검증하는 로직을 구현해야 할 수 있습니다.

관련 자료나 유사 질문이 많은 경험담이 도움이 될 수 있습니다:
- Spring과 MSA 환경에서의 JWT 처리 실제 사례
- 분산 서비스에서의 인증 및 권한 관리

MSA 환경에서는 서비스 간의 독립성이 중요하기 때문에, JWT를 다루는 로직도 서비스 간에 결합도가 낮도록 설계해야 합니다. 이러한 설계를 통해각 서비스가 독립적으로 확장 가능하게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

라우팅 테이블 설정 중 궁금한게 있습니다.

0

26

1

애그리거트 질문있습니다!

0

21

2

젠킨스버전과 플러그인설치

1

26

2

DDD 는 마이바티스와 잘 맞지 않는건가요?

0

37

1

스프링부트 버전 문의드립니다.

0

27

1

cpu&memory 재설정하기에 질문이 있습니다.

1

33

2

Redlock 알고리즘 관해 궁금한게 있습니다!

0

28

2

시험 시작하기 전에 한 가지 질문 있습니다.

1

35

2

yml 작성하다가 에러 발생해서 문의 드립니다.

0

31

2

좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.

0

26

2

(강의 6분 50초 부분) Workspace 안에 index.html이 비어있음

0

26

2

gRPC 실무에서 질문

0

30

2

강의순서가 바뀌어 있습니다.

0

28

1

설치수업중에 질문드립니다.

1

44

2

MSA에서 서비스별 DB 작성에 관해

0

78

2

Microservice 에 DB 띄우기

0

59

2

MSA 프로젝트 요구사항 및 설계 에서의 FK

0

59

2

보상 트랜잭션을 위한 catch 문 안에서 에러가 발생한다면 어떻게 되는 건가요?

0

63

2

하나의 consumer에서 두가지 이상의 topic의 메세지를 받고자 할때 받는 메세지에 시간차와 상관없이 하나의 consumer에서 받을수 있나요?

0

74

2

카프카에서 발행한 이벤트를 처리중에 실패한 경우 보통 어떻게 처리하는지 궁금합니다

0

104

2

Kafka 비동기방식 적용하면서 질문 있습니다!

0

78

2

가용성에대한 질의..

0

61

2

궁금한게있어요..

0

76

2

MSA강의 보다 궁금해서 질문드립니다.

0

89

2