[Spring Boot] Spring Cloud Gateway, Eureka 연동하기 -MSA(4)

모지리 개발자·2022년 9월 22일
1

MSA

목록 보기
4/9

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
를 수강하면서 작성한 글입니다.

Intro

Spring Cloud Netflix Eureka 서버 만들기에서 Eureka서버를 만들어봤습니다.
이번 글에서는 Spring Cloud Gateway 만들기애서 만들었던 Spring Cloud Gateway와 Eureka를 연동해보겠습니다.

프로세스를 이해하자


1. 클라이언트로 부터 요청이 들어오면 API Gateway는 Eureka서버를 통해 해당 엔드포인트의 실제 주소값을 반환받습니다.
2. API Gateway는 Eureka서버로부터 받은 주소에 요청을 합니다.
3. 응답을 받고 클라이언트에게 응답합니다.

Eureka 서버에 등록하기

Eureka 서버에 등록되기 위해서는 아래의 의존성이 추가되어야합니다.
build.gradle

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

앞의 글에서 생성했던 apigateway-service, first-service, second-service 모두 Eureka 서버에 등록할 것이기 때문에 3개의 애플리케이션 모두 위의 의존성을 추가해주시면 됩니다.
application.yml

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

Eureka 서버에 등록하기 위해서는 register-with-eureka, fetch-registry는 모두 true로 변경해주셔야 합니다.

Eureka 서버 실행하기

현재 글에서는 discoveryservice repository가 Eureka 서버입니다.
먼저 discoveryservice application을 실행하겠습니다.

그후 apigateway-service, first-service, second-service 를 실행해보겠습니다.
Eureka 서버에 접속해보시면

3가지 서비스 모두 잘 등록되어있는 것을 알 수 있습니다.

application.yml 수정하기

apigateway의 application.yml 을 수정해야합니다.
위에서 등록된 이름을 바탕으로 application.yml 을 아래와 같이 수정하겠습니다.

routes:
        - id: first-service
          uri: lb://MY-FIRST-SERVICE
          predicates:
            - Path=/first-service/**
          filters:
#            - AddRequestHeader=first-request, first-request-header2
#            - AddResponseHeader=first-response, first-response-header2
            - CustomFilter
        - id: second-service
          uri: lb://MY-SECOND-SERVICE
          predicates:
            - Path=/second-service/**

수정 후 재실행 하셔야합니다.

POSTMAN을 통한 검증

first-service

second-service

모두 잘 응답하는 것을 볼 수 있습니다.

정리

  1. 클라이언트가 요청을 보낸다.
  2. API Gateway는 요청을 받고 해당요청을 어디로 보내야하는지 Eureka서버를 통해 알아낸다.
  3. Eureka 서버에게로부터 받은 응답을 통해 해당 서비스로 요청을 보낸다.
  4. 응답을 받고 클라이언트에게 보내준다.

결론

Eureka서버와 Spring Cloud API Gateway를 연동해보았습니다. 이를 통해 API Gateway는 서비스의 실제 주소값을 가지고 있지 않고 ID값만 가지고 있으면 통신이 가능해집니다.
결국 first-service 혹은 second-service에 url이 변경되거나 수정사항이 있다면 해당 서비스만 수정하면 되고 이는 결국 유지보수를 용이하게 만들어 줍니다.

다음 글에서는 Load Balancer를 적용해보겠습니다.

제가 잘못이해하고 있거나 잘못 작성한 부분이 있다면 지적, 비판, 피드백 뭐든 해주시면 감사하겠습니다!

profile
항상 부족하다 생각하며 발전하겠습니다.

1개의 댓글

comment-user-thumbnail
2023년 6월 27일

글 잘 보고 있습니다. ㅎㅎ
궁금한점이 있는데 서비스 user 의 '/user/test1' 가 '/user/test2'로 바뀌면 어떻게 되는거죠?
프론트에서는 /user/test1을 그대로 보내도 된다는 설명같은데
유레카서버가 user서비스의 로드밸런서를 연결시켜주더라도 /test1 로는 응답을 제대로 못하지 않을까요?

답글 달기