[MSA] API Gateway Service-4 | LoadBalancer

hanana·2023년 10월 27일
0
post-thumbnail

본 포스팅은 인프런 Dowon Lee님의
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 토대로 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4

LoadBalanacer

이전까지 원하는대로 포워딩된 것을 확인하였으니
이제 EurekaServer에 등록하고 LoadBalancer를 이용해보자.

ServiceDiscovery / Load Balancer

  • ServiceDiscovery
    클라이언트나 다른 서버가 IP주소,포트가 아닌
    서버스 이름으로 요청 시 해당 서비스 이름을 가진 인스턴스를 찾는 역할을 수행

  • LoadBalancer
    응답이 가능한 인스턴스중 적절한것을 선택하여
    요청을 전달함

APIGateWay 파일의 application.yml 포워딩할 uri를
기존 http://127.0.0.1:8081 과 같은 형태에서
lb://{ServiceName} 으로 변경이 필요하다.
* 예제의경우
http://127.0.0.1:8081 에서
lb://MY-FIRST-SERVICE 로 변경


application.yml

#생략
      routes:
        - id: first-service # id지정
          # uri: http://127.0.0.1:8081/ #포워딩할 uri
          uri: lb://MY-FIRST-SERVICE #등록된 MicroService 이름
          predicates: 
            - Path=/first-service/** 
          filters:
            - MyCustomFilter
        - id: second-service 
          # uri: http://127.0.0.1:8082/ 
          uri: lb://MY-SECOND-SERVICE 
          predicates: 
            - Path=/second-service/**
          filters:
            - MyCustomFilter
            - name: LoggingFilter
              args:
                baseMessage: Hi Logger!
                preLogger: true
                postLogger: true
#생략

호출이 정상적으로 수행됨을 확인할 수 있다.
https://velog.io/@hana0627/MSA-API-Gateway-Service-1

포워딩 기능역시 IP주소를 직접 입력하는것이 아니라,
이름으로 검색하여 ServiceDiscovery 가 해당 서비스를 찾아준다.


FIRST-SERVCIE , SECOND-SERVICE를 두개씩 실행시켜본다.

MY-FIRST-SERVICE 호출을 통해서 어느 인스턴스에서 응답을 처리하는지 확인해보자

MyFirstServiceController

@GetMapping("/check")
public String check(HttpServletRequest request) {
    log.info("Server port = {}" , request.getServerPort());
    return "Hi there. This is a message from First Service ON PORT " + env.getProperty("local.server.port");
}


매 요청시 번갈아가면서 인스턴스가 동작함을 확인할 수 있다.


Spring Cloud Gateway를 통해서

  • API Gateway
    요청을 한곳에서 처리
  • ServiceRouter
    요청을 다른 서비스로 전달
  • ServiceDiscovery
    IP주소, Port가 아닌 이름으로 서비스를 등록하여 검색
  • LoadBalanacer
    응답이 가능한 인스턴스를 적절히 선택하여 요청전달
  • 보안정책 및 로깅

등의 ServiceMash 기능을 손쉽게 구현할 수 있게되었다.


이후 강의내용은 실제 서비스 구축에 대한 내용으로
관련되어 기록해야 할 정보가 있다면 추가하되
강의내용을 정리해서 포스팅은 하지 않겠습니다.
읽어주셔서 감사합니다.

profile
성숙해지려고 노력하지 않으면 성숙하기까지 매우 많은 시간이 걸린다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN