inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

인증 관련 질문

해결된 질문

62

leesh5000

작성한 질문수 6

0

 

안녕하세요 좋은 강의 잘 보고있습니다.

이와 같이 마이크로 서비스로 프로젝트가 구성되면, 유저 인증과 관련된 부분은 어떻게 처리되는지 궁금합니다.

일단 스스로 생각해본 바로는, 게시글/댓글 쓰기, 좋아요 API는 로그인 한 유저만 가능하다고 하면, 각각의 서비스에서 클라이언트의 요청을 받았을 때 해당 요청을 유저 API를 호출하여 인증을 하는 방식이 있을 것 같은데 이 방법은 각 서비스들이 유저 서비스를 알고 있어야 한다는 단점이 있을 것 같습니다..

위와 같은 상황에서의 실무에서 모범 사례나 정형화된 방법이 있을까요?

java mysql spring-boot kafka redis

답변 2

1

쿠케

leesh5000님, 안녕하세요!

 

일단 게시글/댓글/좋아요 서비스가 유저 서비스를 알고 있어도 되는지에 대해서 고민해보셔도 좋을 것 같습니다.

도메인에 대한 의존 관계로 보면, 게시글/댓글/좋아요 서비스는 유저를 참조하고 있습니다.

유저는 참조될 뿐이지, 게시글/댓글/좋아요 서비스들을 도메인들을 참조하진 않습니다.

즉, 게시글/댓글/좋아요 서비스가 유저 서비스를 참조한다고 하더라도, 의존성 단방향에 대한 원칙은 여전히 지켜질 수 있습니다.

따라서 이러한 구조도 어색함은 없고, 어차피 회원 정보를 검증하거나 API 응답 모델에 같이 내려줘야 한다면 오히려 필요한 상황입니다.

그래서 인증(Authentication)과 인가(Authorization)를 어디에서 어떤 방식으로 수행할 수 있을지도 궁금하실 것 같은데요, 이 또한 구성에 따라 다양할 수 있습니다.(참고로 인증과 인가는 구분하시면 좋습니다)

 

하나의 예시로서 이러한 방법으로 구성할 수도 있을 것 같습니다.

게시글/댓글/좋아요 서비스는 사용자를 인증하고 리소스에 대한 접근 권한을 확인하기 위해, 유저 서비스를 호출하면 됩니다.

유저 서비스는 각 서비스에게 사용자 정보, 권한 등의 "인증" 정보를 내려줍니다.

유저 서비스는 "인가"까지 처리하진 않습니다.

만약 유저 서비스가 리소스마다 접근 권한까지 검증한다면, 너무 과도한 책임을 가지게 됩니다.

각 리소스에 접근할 수 있는지 인가에 대한 책임은 게시글/댓글/좋아요 서비스가 가질 수 있는 것입니다.

유저 서비스 측에서는 이러한 기능을 쉽게 만들 수 있도록 모듈을 제공할 수도 있는 것이고요.

시큐리티를 사용하든지, 필터나 인터셉터를 사용하든지, AOP를 구현하는지 등 이것도 구현 방식은 다양할 수 있습니다.

 

또 다른 예시로, API 게이트웨이에서 사용자 인증을 하면 됩니다.

마이크로서비스로 향하는 모든 요청 흐름은 API 게이트웨이를 통하도록 합니다.

그리고 게이트웨이에서 인증된 토큰 정보를 요청에 포함하고, 마이크로서비스로 라우팅합니다.

여기에는 사용자 인증 정보도 포함할 수 있습니다.

각 마이크로서비스는 토큰을 검증 및 파싱하여 리소스 접근 권한을 검증하면 됩니다.

 

구현은 항상 다양할 수 있고, 로그인 방식 또는 인증/인가 요구사항마다 모두 달라질 수 있기 때문에 구체적인 모범 사례를 말씀드리긴 어렵지만,

위와 같이 의존성, 인증/인가에 대한 개념, 책임 분리 등에 대한 관점만 이해하고 있으면 적절한 인증 방식을 구성하실 수 있을 것 같습니다!

0

인프런 AI 인턴

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

강의를 수강하시며 MSA(마이크로서비스 아키텍처) 환경에서의 유저 인증 전략에 대해 궁금하신 점이 생기셨군요. MSA에서는 개별 서비스 간의 인증이 중요한 과제이며, 다양한 방식이 존재합니다.

유저 인증 모범 사례

  1. API Gateway 사용:

    • API 게이트웨이를 통해 모든 클라이언트 요청이 통과하게 되며, 이 단계에서 인증 절차를 수행합니다. 로그인 후 토큰을 발급받고, API 요청 시 이 토큰을 헤더에 포함하여 인증합니다.
    • API 게이트웨이가 인증 토큰을 검사하고, 유효할 경우 요청을 내부 서비스로 전달하는 구조입니다. 이를 통해 개별 서비스는 인증 관련 로직을 신경쓰지 않아도 됩니다.
  2. OAuth2 / JWT 활용:

    • OAuth2JWT(JSON Web Token)를 통해 유저 인증을 처리할 수 있습니다. 사용자가 로그인하면 JWT를 발급받고, 이후 요청마다 JWT를 포함시켜 인증합니다.
    • 각 서비스는 JWT의 유효성을 검사하여 사용자를 인증하며, 유효하지 않은 경우 접근을 제한합니다.
  3. 세션 기반 인증:

    • 상태를 관리하는 방법으로, 유저가 로그인 시 세션을 생성하고 이를 통해 인증을 구현할 수 있습니다. 하지만 MSA에서는 일반적으로 상태 관리의 복잡성이 증가하므로 토큰 기반 접근이 선호됩니다.
  4. Federated Identity 및 SSO(Single Sign-On):

    • SSO를 통해 여러 서비스에 대해 한 번의 로그인으로 인증을 수행할 수 있도록 합니다. 이를 통해 사용자 경험을 향상시키고 인증의 일관성을 유지할 수 있습니다.

관련된 유사한 질문에 대한 게시물을 통해 더 많은 정보를 참고할 수 있습니다.

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

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

31

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

47

2

게시글 테스트 데이터 삽입

0

50

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

104

2

좋아요 기능 정합성 보장 방법

0

96

2

좋아요 동시성처리 최적의 선택?

1

135

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

92

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

59

1

조회수 조회 로직 질문

1

67

2

비로그인 유저도 어뷰징 방지 정책

1

72

2

CommentServiceTest의 테스트 로직 질문

0

54

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

74

2

path 쿼리 관련 질문드립니다!

0

60

2

antigravity 에디터를 쓰신다면 종료해주세요

1

123

0

프로젝트 구조

0

88

2

article_like_count api test

0

78

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

104

2

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

0

91

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

92

3

jpa ddl-auto none을 하는 이유와 join 방법

0

97

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

90

2

커서 기반 페이지네이션 과 무한 스크롤링

0

109

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

97

2

멀티 모듈이 아닌 MSA 환경에서 common

0

156

2