⚠️ Config, Discovery 순환참조 문제

✅ 에러 로그

DiscoveryClient_CONFIG-SERVICE/169.254.172.2:config-service:8888 - was unable to send heartbeat!
...
Caused by: java.net.UnknownHostException: discovery-service.internal.local: Name or service not known

🧠 트러블 분석

  1. config-service는 application.yml에서 eureka.client.service-url.defaultZone을 통해 discovery-service에 등록하려고 함.

  2. 하지만 discovery-service는 spring.config.import=configserver: 설정을 통해 config-service에서 설정 파일을 받아야만 기동됨.

  3. 결과적으로 discovery-service가 없으니 config는 Eureka에 등록 못 하고,

    config가 없으니 discovery도 설정 못 받아 기동 못 하는 딜레마 구조, 즉 순환 참조가 발생.

🔁 순환 의존 구조

config-service
   ↓
Eureka Client 초기화
   ↓
discovery-service 에 등록 시도
   ↓
DNS 혹은 Eureka 서버 미가동으로 실패
   ↓
스레드가 반복 재시도하며 장애 상태 진입

이 과정에서 실제 에러는 java.net.UnknownHostException 이지만, 루트 원인은 config-service가 Eureka에 의존하고, Eureka가 config-service가 떠야 구성 정보를 받을 수 있다는 구조적 순환


✅ 해결방법

config-service의 application-prod.yml 파일에서

eureka:
  instance:
    prefer-ip-address: true
    health-check-url-path: /actuator/health
  client:
    enabled: ${EUREKA_ENABLED:true}  # 기본값 true (즉, 환경변수로 false 설정 시 끔)
    ...

image.png

이렇게 해준다음 ecs 서비스 생성할 때 환경 변수로 fasle를 줬다.

즉 , Eureka에 의존하지 않아도 부팅되도록 설정을 한것이다.