Programming/MSA

MSA에 대한 기본개념 - 4. 서비스를 나눈뒤 상호참조, 통합

armyost 2022. 6. 12. 19:57
728x90

MSA 서비스를 분리한 후에는 어떻게 통합(상호연동, 객체참조)할 것인가?

→ API Gateway

역할

서비스 라우팅

CORS(교차출처) 허용

ACL 적용하여 잘못된 호출 필터링

기타 보안정책 적용(ex. Prevent DDOS)

로드벨런싱

 

관련도구

Proxy, Kube Gateway Service, [Zuul, Ribbon]

 

 

→ Service Registry+Service Discovery

역할

서비스 Discovery가 가능하도록 서비스 경로 저장

 

관련도구

Eureka, Kube DNS Service, 일반DNS서비스, Feign Client

 

 

→ URI Path-based Call (Req-Res)

역할

동기호출

 

관련도구

REST API

 

→ Message Queue Call (Pub-Sub)

역할

비동기호출(Loosly Coupled)

 

관련도구

kafka, Stream, 기타 MQ 플랫폼

 

서비스 분리에 따른 통합 인증은 어떻게 할 것인가?

→ 토큰기반 인증/인가

역할

Token 기반의 사용자 세션관리. 범용프로토콜을 통한 인증/인가 정보 통신

 

관련도구

JWT, Oauth2.0, SAML3.0(데이터형식으로 XML사용)

 


Json Web Token에 대해서

 

  • Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다. 첫째는 토큰의 유형 (JWT)을 나타내고, 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분입니다.
  • Payload는 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. Payload 에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
  • Signature는 secret key를 포함하여 암호화되어 있습니다. 서명을 통해서 서버는 이 요청이 유효한지 평가합니다.
    ※ 여기서 Signature를 어떤 알고리즘을 사용할 것인지 고민하게 됩니다. 대표적으로 RSA(공개키 기반구조) 방식과 HMAC(해시를 이용한 메시지다이제스트)  방식이 주류인것 같습니다. 각 암호화 알고리즘은 장단점이 있고 제약사항이 다릅니다. 두 알고리즘이 가장 다른점은 RSA는 공개키로 복호화에 필요한 개인키를 수학적으로 도출하는 방식이며, MAC은 Key를 사전에 공유해야 합니다. (이 논쟁을 깊이 들어가면 포스팅 목적에서 벗어나므로 여기까지..)

 

JWT를 사용함으로써 얻을 수 있는

장점

  • URL  파라미터와 헤더로 사용(범용프로토콜 사용)
  • 수평 스케일이 용이
  • 디버깅 및 관리가 용이
  • 내장된 만료
  • 관련 오픈소스 많음

단점

  • 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없습니다.
  • 더 많은 필드가 추가되면 토큰이 커질 수 있습니다.
  • 비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있습니다.
  • Payload 부분이 그냥 Encoding된것이므로 정보가 쉽게 노출될 수 있습니다 → 노출자체가 치명적인것은 아님. 그러니 노출해도 괜찮은 정보만 JSON으로 주고받을것

OAuth2.0 이란?

위의 JWT라는 Token 기반 JSON 타입의 데이터로 인증/인가를 수행하는 개념을 프로토콜(규약)으로 정의한 것이다. 

규약으로 만들면서 Third Party끼리도 인증 방식과 인증시 주고받는 데이터가 통일되었다고 보면됨

 

OAuth는 단순 인가를 넘어 Role과 Grant 개념을 추가한것이 특징이다. 이 부분은 상당히 흥미로운 부분인데, 서버측의 리소스 보안을 '후차적인 프로그래밍 방식' 보다는 'Token으로 선처리'하겠다는 뜻이다. 프로그래밍 방식의 인가처리로 발생할 수 있는 누수현상을 방지하고 생산성이 향상된다. 

 

다양한 Parameter를 활용하여 추가적으로 필요한 기능을 사용할 수 있다. 

관련링크 : https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml

 

OAuth Parameters

scope authorization request, authorization response, token request, token response IETF [RFC6749]

www.iana.org