MSA 프로젝트를 진행할 때 Service Discovery를 Eureka 를 통하여 구현하였다..
이때 Eureka Client를 IP 주소 및 포트 번호를 통하여 과린하고 서비스 간의 라우팅을 진행하도록 설계했다.
문제 발생
하지만 AWS Fargate를 통해 서비슬들을 배포할 때 문제가 발생했다.
Fargate로 Eureka 서버와 각각의 서비스들을 띄우고 각 서비스들을 Eureka Client로 Eureka 서버에 등록하여 사용하는데, 이때 Eureka 서버에 등록되는 것까지는 전혀 문제가 없었다. 하지만 이후 해당 서비스들을 호출하게 되면 500에러가 발생하게 되었다.
문제 원인
이는 Fargate에서 Eureka Client가 아래와 같이 등록되는데, 각 컨테이너의 private IP가 등로고디는 것이 아닌 AWS Fargate의 메타데이터에 접근할 때 사용되는 IP가 등록되기 때문이다.
AUTH-SERVER 169.254.172.2:auth-server:19092
COUPON-SERVER 169.254.172.2:coupon-server:19095
GATEWAY-SERVER 169.254.172.2:gateway-server:19091
기본적으로 local에서 테스트하며 작업을 할 때도 아래 그림과 IP가 모두 동일하게 등록되기에 이것이 문제라고 처음에는 생각하지 못했다.
다만 CloudWatch로 각 서비스들을 호출 했을 때 로그 기록을 살펴봤을 때 169.254.172.1:19092로 라우팅할 때 500에러가 계속 발생하는 것을 보아 각 컨테이너의 private IP로 라우팅을 해줘야되는 것인가? 라는 의심이 생기기 시작했다.
즉 아래의 경우는 Local에서 테스트했기에 특수한 경우이며 실제 서비스는 Eureka 에 Client에 등록될 때 IP와 port를 저장해두었다가 해당 값으로 라우팅을 해주기에 모든 컨테이너들의 각각의 private IP가 등록되어야 해당 위치로 라우팅을 해줄 수 있겠구나 라고 판단했다.

문제 해결
위 문제를 해결하기 위해 Eureka Client가 등록될 때 IP 주소와 PORT를 현재 떠있는 Container의 private IP를 받아와 등록하도록 하여 문제를 해결했다.
@Configuration
@Profile("prod")
public class EcsConfig {
@Bean
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
String ip = null;
try {
ip = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
config.setIpAddress(ip);
config.setPreferIpAddress(true);
config.setNonSecurePort(19092);
return config;
}
}
그 결과 아래와 같이 정상적으로 서비스가 등록되고 각 서비스들을 찾아서 호출할 수 있게 되었다.

문제 해결 과정을 정리한 내용만 보면 별 거 없어보이지만, 해당 문제의 원인을 추적하고 해결하기까지 굉장히 오랜시간이 걸렸다.(3일을 약 2~3시간 밖에 못자고..)
덕분에 Eureka가 각 서비스들을 등록하고 호출하는 방식과 Fargate에서 각 서비스들 간 연결에 대해 조금 더 자세히 공부할 수 있는 시간이 되었다.
'트러블 슈팅' 카테고리의 다른 글
| Jpa 테스트 시 TransactionRequiredException 발생과 해결 (0) | 2025.03.16 |
|---|---|
| SpringBoot 버전 업에 따른 RestClient 에러 발생 해결 (0) | 2025.02.16 |
| AWS CodeDeploy 에러 해결, 권한 문제 (0) | 2025.02.13 |
| QueryDSL 동적 조회 조건 생성 시 조인 문제 (3) | 2025.02.13 |
| 비동기 요청 시 AuditorAware 문제 (0) | 2025.02.13 |