Java Spring | 넷플릭스 유레카(Netflix Eureka)

사과농장주·2026년 3월 26일

자바스프링

목록 보기
5/8

학습 목표

스프링 클라우드와 넷플릭스 유레카의 서비스 디스커버리 엔진을 사용하여 서비스 디스커버리 패턴을 구현할 수 있다.

유레카란?

  • 유레카는 Service Discovery 중 하나

    넷플릭스 유레카 서버는 마이크로서비스에서 서비스들의 주소를 등록하고 찾게 해주는 서버


실습 준비

  • 넷플릭스 유레카 서버를 구축하려면 pom.xml에 의존성을 추가해야 한다.
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  • bootstrap.yml 파일에 스프링 클라우드 컨피그 서버의 위치를 알려주어야 한다.
    spring:
      application:
        name: eureka-server
      cloud:
        config:
          uri:
          - http://localhost:8888

유레카에 서비스 등록

  • 스프링 클라우드 컨피그에서 지정한 Git 저장소에 설정 파일을 생성한다.
    # eureka-server.yml
    server:
      port: 8761
    eureka:
      instance:
        # 유레카 인스턴스에 호스트 이름을 설정한다.
        hostname: localhost
      client:
        # 유레카 서버가 유레카 서비스에 등록되지 않도록 한다.
        register-with-eureka: false
        # 유레카 서버가 캐시 레지스트리 정보를 로컬에 캐시하지 않도록 지시한다.
        fetch-registry: false
        # 서비스 URL을 설정한다.
        service-url:
          defalut-zone: "http://${eureka.instance.hostname}:${server.port}/eureka/"
  • 유레카 서버에 등록

  • 서비스 디스커버리 대상 등록 상태

  • 서비스 애플리케이션이 실행되면 Eureka Server에 자신을 등록하고, 실행 중에는 주기적으로 상태 정보를 전달한다. dev 또는 live 서버를 중지하면 Eureka Server에서도 해당 서비스가 사라지는 것을 확인할 수 있다.



Eureka를 활용한 서비스명 기반 호출

  • 설정 정보가 담긴 Git저장소에서 기존 실제 주소 대신 서비스 이름으로 base-url 설정

  • @LoadBalanced는 RestTemplate가 유레카에 등록된 서비스명을 인식하고, 실제 인스턴스를 찾아 분산 호출할 수 있게 해주는 설정
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		// Spring에서 제공하는 HTTP 통신을 위한 템플릿 클래스이다.
		return new RestTemplate();
	}
  • 서비스에서 기존(localhost)과 달리 대신 서비스명(department-service)으로 요청하는 것을 확인 할 수 있다.

  • 라운드로빈
    도메인 포트번호를 알고 접근 하지 않기 때문에 department-service로 접근 하기 때문에 둘 중에 하나로 접근한다.


    1번째 요청 시 live로 요청

    2번째 요청 시 dev로 요청

  • dev, live로 왔다갔다 접근하는 것을 알 수 있다.

  • 실시간 반영 X, 주기적으로 통신 및 갱신 로컬에서 캐싱해서 그 정보로 캐싱

  • 이걸 해주는게 서비스 디스커버리?

profile
안녕, 나는 코딩 밭에서 사과를 줍는 사과농장주야 🍎

0개의 댓글