유레카 클라이언트 설정

2024. 12. 11. 13:53Spring Microservice

Eureka 설정 상세 설명

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ # Eureka 서버 주소
  instance:
    hostname: my-service
    prefer-ip-address: true

스프링 부트 애플리케이션에서 Netflix Eureka를 사용해 서비스 디스커버리를 구성할 때 사용하는 application.yml 설정입니다. 각 항목이 어떤 역할을 하는지 아래에서 자세히 설명하겠습니다.


1. eureka

이 설정은 Eureka 관련 설정을 그룹화하는 최상위 키입니다. eureka 하위에 클라이언트와 인스턴스 관련 설정을 정의합니다.


2. eureka.client

eureka.client는 애플리케이션이 Eureka 클라이언트로 작동할 때 필요한 설정을 정의합니다. 클라이언트는 Eureka 서버와 통신하여 서비스를 등록하거나 다른 서비스 정보를 검색합니다.

2.1 service-url

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  • 의미: 클라이언트가 Eureka 서버와 통신하기 위한 URL을 설정합니다.
  • defaultZone:
    • 기본 Eureka 서버의 위치를 나타냅니다.
    • 클라이언트는 이 주소를 사용해 Eureka 서버와 통신하고, 서비스 등록 및 검색 작업을 수행합니다.
    • http://localhost:8761/eureka/는 로컬에서 실행되는 Eureka 서버를 가리킵니다. 이 URL은 실제 서버 위치(IP 또는 DNS 이름)로 변경할 수 있습니다.

다중 Eureka 서버

Eureka는 고가용성을 위해 여러 Eureka 서버를 클러스터로 구성할 수 있습니다. 이 경우 여러 서버 URL을 쉼표(,)로 구분해 설정합니다.

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

3. eureka.instance

eureka.instance는 현재 애플리케이션 인스턴스(서비스 제공자)의 설정을 정의합니다. 이 설정은 Eureka 서버에 등록될 서비스의 메타데이터를 제어합니다.

3.1 hostname

eureka:
  instance:
    hostname: my-service
  • 의미: 현재 애플리케이션 인스턴스의 호스트 이름을 설정합니다.
  • 기본값: 로컬 머신의 호스트 이름이 사용됩니다.
  • 사용 목적:
    • 다른 서비스가 이 서비스를 조회할 때 식별할 수 있는 이름으로 사용됩니다.
    • 서비스가 여러 인스턴스를 가지는 경우, 인스턴스 간의 구분을 위한 정보로 활용됩니다.
  • 예를 들어, hostname: my-service로 설정하면 Eureka 서버에 등록될 때 서비스의 기본 식별자가 my-service로 표시됩니다.

3.2 prefer-ip-address

eureka:
  instance:
    prefer-ip-address: true
  • 의미: 서비스 등록 시 IP 주소를 기본 식별자로 사용할지 여부를 결정합니다.
  • 기본값: false (호스트 이름을 기본 식별자로 사용).
  • true로 설정 시:
    • IP 주소를 사용하여 서비스가 등록됩니다.
    • 클라이언트가 서비스를 호출할 때, 호스트 이름 대신 IP 주소를 반환받습니다.
    • 주로 클라우드 환경이나 컨테이너 환경(Docker, Kubernetes)에서 많이 사용됩니다.
    • 동적으로 생성된 컨테이너는 고정된 호스트 이름보다 IP 주소를 사용하는 것이 더 안정적입니다.

Eureka 설정 흐름

  1. 클라이언트와 서버 간 통신:

    • 클라이언트는 service-url.defaultZone에 설정된 주소로 Eureka 서버에 HTTP 요청을 보냅니다.
    • 이 요청은 서비스 등록 또는 다른 서비스 조회에 사용됩니다.
  2. 서비스 등록 시 정보:

    • 클라이언트는 hostnameprefer-ip-address에 따라 Eureka 서버에 자신을 등록합니다.
    • prefer-ip-address: true라면, 등록 정보에는 IP 주소가 포함됩니다.
    • 추가로 메타데이터(예: 포트 번호, 서비스 이름 등)도 함께 전송됩니다.
  3. 서비스 검색 시 정보:

    • Eureka 서버는 클라이언트 요청에 따라 서비스 인스턴스 정보를 반환합니다.
    • 반환된 정보에는 hostname 또는 IP 주소가 포함되며, 이는 prefer-ip-address 설정에 따라 결정됩니다.

예시: Docker 및 클라우드 환경에서 활용

Docker 컨테이너 환경에서는 IP 주소가 동적으로 할당됩니다. 따라서 prefer-ip-address: true를 사용하는 것이 일반적입니다.

Docker Compose 예시

docker-compose.yml:

version: '3.8'
services:
  eureka-server:
    image: eureka-server:latest
    ports:
      - "8761:8761"
    networks:
      - eureka-network

  service-provider:
    image: service-provider:latest
    environment:
      - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/
      - EUREKA_INSTANCE_PREFER_IP_ADDRESS=true
    networks:
      - eureka-network

networks:
  eureka-network:
    driver: bridge

정리

설명 예시
service-url.defaultZone Eureka 서버의 URL로, 클라이언트가 서비스 등록 및 검색을 위해 통신하는 주소 설정 http://localhost:8761/eureka/
instance.hostname 등록될 서비스 인스턴스의 호스트 이름. 서비스의 고유 식별자로 사용됨 my-service
instance.prefer-ip-address 서비스 등록 시 IP 주소를 기본 식별자로 사용할지 여부. 클라우드 및 컨테이너 환경에서 유용함 true

이 설정을 통해 Eureka 기반의 동적 서비스 등록과 검색을 안정적으로 구현할 수 있습니다.