상세 컨텐츠

본문 제목

SpringBoot MSA (10) - MicroService / UserService API Gateway 처리

Spring/SpringBoot-MSA

by ChrisMare 2023. 10. 17. 13:12

본문

앞 게시글에서는 서버 재실행 시 랜덤포트로 인해서 포트가 변경되어졌다.

따라서 앞에서 정리했던 API Gateway service에 등록하여 일정한 포트로 진행해보겠습니다.

 

우선

apigateway-service에 application.yml 파일에 user-service 라우트를 추가하겠습니다.

server:
  port: 8000

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

spring:
  application:
    name: apigateway-service
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/**
#        - 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/**
#          filters:
##            - AddRequestHeader=second-request, second-request-header2
##            - AddResponseHeader=second-response, second-response-header2
#            - name: CustomFilter
#            - name: LoggingFilter
#              args:
#                baseMessage: Hi, there
#                preLogger: true
#                postLogger: true

 

 

user-service 프로젝트 > controller > UserController.java

status 메소드에 현재 랜덤 지정된 포트 확인용으로 수정

@GetMapping("/health_check")
public String status() {
    return String.format("It's Working in User Service on PORT %s", env.getProperty("local.server.port"));
}

 

첫번째로 user-service의 api 테스트

잘 동작하는 것을 확인할 수 있다.

 

이제 apigateway-service의 포트 8000으로 해당 api를 테스트해보자!

 

404로 응답되는 것을 알 수 있습니다.

 

이러한 현상은 Users Service의 URI 와 API Gateway의 URI가 다르기 때문입니다.

 

api gateway uri : /user-service/health_check

user service uri : /health_check

위 처럼 다르기 때문에 Not Found 404가 응답되었습니다.

 

따라서 UserController에 RequestMapping 혹은 각 Mapping에 /user-service를 추가하면 됩니다.

user-service > controller > UserController.java > status 의 GetMapping 수정

@GetMapping("/user-service/health_check")
public String status() {
    return String.format("It's Working in User Service on PORT %s", env.getProperty("local.server.port"));
}

 

다시 서버 실행 후 apigateway-service 포트로 user-service의 status를 호출 해보겠습니다.

이제 정상적으로 호출되는 것을 볼 수 있습니다.

 

 

관련글 더보기

댓글 영역