인프런 커뮤니티 질문&답변

류윤환님의 프로필 이미지
류윤환

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway - Load Balancer ➀

Spring Cloud Gateway - Load Balancer 1강 보완 요청

작성

·

358

1

  • 일단 제 환경은 윈도우구요

  • apigateway-service 내의 application.yml 파일의 url를 일반 ip 어드레스가 아닌 loadbalancer 방식으로 변경하여 테스트하면 진행되지 않습니다;

  • 트러블슈팅에 장시간이 걸렸는데 혹시나 해서 제 피씨 네임을 인식하지 못하나 해서 hosts 파일에 본인 pc 네임과 127.0.0.1을 추가해주면 됩니다.

  • 만약 네 pc가 '뽀로로'인 경우

  • 뽀로로 127.0.0.1을 'C:\Windows\System32\drivers\etc'의 파일에 추가해줍니다.

답변 3

0

안녕하세요, 강의 잘 진행하다가 동일하게 uri를 lb://형식으로 바꿨을 때 500 Internal Server Error가 발생하며 진행되지 않습니다.
```java

pring:
  application:
    name: apigateway_service
  cloud:
    gateway:
      routes:
        - id: first_service
          uri: lb://MY_FIRST_SERVICE
          predicates:
            - Path=/first_service/**
... 
*/ // 질문 등록 시 주석처리 되어 추가
        - id: second_service
          uri: http://127.0.0.1:8082/
          predicates:
            - Path=/second_service/**
          filters:

```
eureka

image.png

이상 없이 status가 up 상태로 등록이 되어 있습니다.

image.png

위의 답변 처럼
IP로 시작되는 부분 (MY-SECOND-SERVICE)

  • application.yml 파일에 ${spring.cloud.client.ip-address} 설정을 지정을 아래와 같이 지정했습니다

    image.png

     

    Spring cloud 2023.0.3 버전
    Spring boot 3.3.5 버전을 사용하고 있습니다
    조언 부탁 드립니다..!

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

정보 공유 감사드립니다.

추가로, 말씀하신 내용에 보충 설명을 드리기 위해 몇가지 설정을 하고 테스트해 보려고 했는데, 아래 내용이 언급하신 내용과 맞지 않는다면 추가 글 남겨주시면 감사드리겠습니다.

먼저, apigateway-service에서 IP가 아닌 LoadBalancer 방식으로 변경하신 부분이 아래와 같이 lb:// 프로토콜을 사용하여 테스트 하셨다는 말씀이신지요? 아래 코드는 제가 테스트한 apigatewway-service의 application.yml 파일의 일부인데, FIRST-SERVICE의 경우에는 http://IP_address로 forwarding 되도록 하였고, SECOND-SERVICE는 lb://애플리케이션명으로 forwarding 되도록 설정하였습니다.

        - id: first-service
          uri: http://192.168.0.41:8081
          predicates:
            - Path=/first-service/**
        - id: second-service
          uri: lb://MY-SECOND-SERVICE
          predicates:
            - Path=/second-service/**

EUREKA에 등록 된 각 서비스들의 이름을 보시면, IP로 시작되는 부분도 있고 Hostname(제 경우 DESKTOP~ 으로 시작하는 부분)으로 시작되는 부분도 있고, 애플리케이션명으로 시작되는 부분도 있습니다.

image

각각의 경우는 아래와 같은 조건에서 생성되고 있습니다.

  • DESKTOP- 으로 시작되는 부분 (APIGATEWAY-SERVICE, MY-FIRST-SERVICE)

    • Eureka에 애플리케이션이 등록 될 때, 명시적으로 instance id를 지정하지 않으면, ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}} 값으로 지정

       

  • 애플리케이션명으로 시작되는 부분 (CATALOG-SERVICE)

  • IP로 시작되는 부분 (MY-SECOND-SERVICE)

    • application.yml 파일에 ${spring.cloud.client.ip-address} 설정을 지정


      image

apigateway-service에 lb://로 시작되도록 uri 설정을 하셨다면, 해당 요청은 서비스디스커버리인 Eureka 에 등록 된 애플리케이션명으로 요청을 전달하게 됩니다.

이러한 내용과는 별개로, 사용하시는 PC에 특정한 Hostname을 지정(기본 값 외에)을 하실 경우에는 말씀하신것처럼 hosts 파일에 Hostname과 IP를 지정하시는게 필요합니다. 이는 폐쇄적인 네트워크망에서 개발이나 운영을 하는 부분에서도 자주 사용되는 방법이기 때문에, 자신이 사용하시는 PC및 환경에 어떤 Hostname으로 등록되어 있는지, 또는 사용이 가능하도록 추가되었는지 확인하는게 필요할 수 있습니다.

추가로, 제가 테스트하는 WIndwos PC에 Docker Desktop을 설치하였을 경우에는 Docker Desktop Installer가 자동으로 아래와 같은 Hostname을 등록한 것을 알수 있습니다. 아래와 같이 설정 된 경우라면 , 저는 host.docker.internal URL을 사용하여 서비스를 사용할 수도 있습니다.

image

image

말씀드린 것 처럼, 언급하신 내용과 다른 방향의 답변이었거나, 다른 이견 있으면 다시 글 남격주시기 바랍니다.

감사합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.
제공된 정보에는 질문하신 내용에 대한 구체적인 해결 방법이 포함되어 있지 않습니다. Spring Cloud Gateway와 관련된 직접적인 내용이나 Load Balancer 설정 방법에 대한 정보가 없어 죄송합니다만, 유용한 문서나 자료를 찾기 위해서는 Spring 공식 문서나 관련 개발 커뮤니티를 참조하시는 것을 추천드립니다.

류윤환님의 프로필 이미지
류윤환

작성한 질문수

질문하기