[Dining-together] Spring cloud eureka && spring API gateway로 Service Discovery Server와 gateway Server 구성하기

Jifrozen·2021년 10월 31일
2

Dining-together

목록 보기
23/25

Service Discovery && Registry

Spring Dicovery

  • 각각의 서비스의 위치가 등록된 서버에서 특정 작업을 위한 서버의 위치를 파악하는 작업이다. Spring Cloud eureka server을 사용

Spring Registry

  • 각각의 서비스가 자신의 위치(IP) 정보를 특정 서버에 등록 Registry하는 작업을 말한다. Spring Cloud Eureka client를 사용

과정

  1. Service Registry 기능을 할 Eureka Server 가 최초에 기동된다.
  2. Service Registry 서버인 Eureka Server 에 등록될 서비스들이 기동된다. 여기서 등록된 서비스는 Eureka Client 라고 한다.
  3. Eureka 서버는 자신에게 등록된 Eureka Client 에게 30초마다 Ping을 보내며 Health Checking을 수행한다.
    만약 30초마다 보내는 Heart Heat가 일정 횟수 이상으로 동작되지 않으면 Eureka Server는 해당 Client를 삭제한다.
  4. Eureka는 단지 서비스의 위치만을 표현하는 역할로 보통 Spring Cloud Gateway나 Netflix Zuul 과 같은 Gateway 서비스나 Ribbon 과 같은 클라이언트 사이드 로드밸런서와 함께 동작한다.

API gateway

MSA는 큰 서비스를 잘게 쪼개어 개발/운영하는 아키텍쳐이다. 하나의 큰 서비스는 여러 작은 서비스로 나누어지며, 만약 이를 클라이언트에서 서비스를 직접 호출하는 형태라면 다음과 같은 문제점이 생길 수 있다.

  • 각각 서비스마다 인증/인가 등 공통된 로직 구현

  • API 호출을 기혹하고 관리하는데의 어려움

  • 클라이언트에서 여러 마이크로 서비스에 대한 번거로운 호출

  • 내부의 비즈니스 로직이 드러나 보안의 취약

    API gateway는 API 서버 앞단에 모든 API 서버들의 엔드포인트를 단일화 해주는 또 다른 서버이다. API 에 대한 인증과 인가 기능을 가지고 있고, 메시지 내용에 따라 어플리케이션 내부에 잇는 마이크로 서비스로 라우팅 하는 역할을 담당

특히, eureka로 등록한 서비스들은 랜덤 포트번호를 가지도록 하였는데 계속 바뀐 포트번호를 다른 서비스에서도 알고있어야 하기 때문에 수정하고 다시 빌드하고 배포하는 과정이 필요하다. 많은 불편함을 가지기 때문에 모든 마이크로 서비스의 포트를 통일하는 과정이 필요했고 이런 문제의 해결 방안이 Spring Cloud gateway이다.

장점

  • 각각의 마이크로서비스들은 서로의 포트 번호를 몰라도 된다.
  • Front 에서는 요청을 Gateway로만 보내면 되기 때문에 Gateway 포트만 알면 모든 요청을 수행할 수 있다.
  • 모든 요청은 Gateway 를 거치기 때문에 로그를 쉽게 다룰 수 있다.
  • Gateway 가 요청의 진입점이므로 통합 인증을 수행할 수 있다.

필터

단일 진입점을 두어 필터를 이용해 인증과 로그 등을 쉽게 다를 수 있음. 필자의 프로젝트의 경우 AuthorizationHeaderFilter 를 두어 헤더 토큰값 인증을 수행하는 filter를 적용함.

참고

https://wonit.tistory.com/495
https://velog.io/@tedigom/MSA-제대로-이해하기-3API-Gateway-nvk2kf0zbj

0개의 댓글