With AI

Spring Cloud Eureka란?

  • -
반응형

 

Spring Eureka는 Spring Cloud의 구성 요소 중 하나로, 서비스 디스커버리 기능을 제공합니다. 즉, 마이크로서비스 아키텍처에서 서비스들이 서로를 동적으로 인식하고 통신할 수 있도록 도와줍니다. Eureka는 Netflix의 Eureka 서버를 기반으로 하며, 이를 사용하면 마이크로서비스 간의 통신을 효율적으로 관리할 수 있습니다.


1. Eureka의 역할

Eureka는 두 가지 주요 역할을 합니다:

  1. Eureka 서버 (Service Registry): 클라이언트 서비스가 자신을 등록하고, 다른 서비스의 정보를 검색할 수 있는 중앙 저장소 역할을 합니다.
  2. Eureka 클라이언트 (Service Discovery): 서비스가 Eureka 서버에 자신을 등록하고, 다른 서비스에 대한 정보를 찾기 위해 Eureka 서버에 요청을 보냅니다.

 

2. 구성 요소

  • Eureka Server: 서비스들이 등록될 중앙 서비스 디스커버리 서버입니다. Eureka 서버는 모든 서비스 정보를 관리하며, 클라이언트가 요청할 수 있도록 정보를 제공합니다.
  • Eureka Client: 서비스가 Eureka 서버에 등록되거나, 다른 서비스를 찾을 때 사용되는 클라이언트입니다. 클라이언트는 자신을 Eureka 서버에 등록하고, 다른 서비스들의 정보를 조회할 수 있습니다.

 

3. Eureka 서버 설정

Eureka 서버는 Spring Cloud Netflix에 포함되어 있으며, @EnableEurekaServer 어노테이션을 사용하여 활성화합니다.

Eureka 서버 설정 예시

1. application.yml 설정

server:
  port: 8761  # Eureka Server 포트

eureka:
  client:
    registerWithEureka: false  # 이 서버는 클라이언트가 아니므로 false
    fetchRegistry: false       # 다른 서버의 레지스트리를 가져오지 않음
  server:
    waitTimeInMsWhenSyncEmpty: 0 # 초기화 대기 시간 설정

 

2. EurekaServerApplication.java

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
 

4. Eureka 클라이언트 설정

서비스가 Eureka 서버에 자신을 등록하려면, @EnableEurekaClient 어노테이션을 사용하여 Eureka 클라이언트로 설정합니다.

Eureka 클라이언트 설정 예시

1. application.yml 설정

spring:
  application:
    name: my-service  # 이 서비스의 이름

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/  # Eureka Server URL

 

2. EurekaClientApplication.java

@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
 

5. 서비스 등록 및 검색

  • 서비스 등록: Eureka 클라이언트는 애플리케이션이 시작될 때 자동으로 Eureka 서버에 자신의 정보를 등록합니다. 이때, spring.application.name 속성이 서비스의 이름이 됩니다.
  • 서비스 검색: 다른 서비스는 Eureka 서버에 등록된 서비스 목록을 조회하여 특정 서비스의 위치를 동적으로 찾을 수 있습니다. 예를 들어, RestTemplate을 사용해 @LoadBalanced와 함께 서비스 검색을 할 수 있습니다.

서비스 검색 예시

@LoadBalanced
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}
 

이렇게 하면 RestTemplate을 사용하여 Eureka 서버에 등록된 서비스의 이름을 통해 자동으로 서비스 인스턴스를 찾아서 통신할 수 있습니다.

@Autowired
private RestTemplate restTemplate;

public String callOtherService() {
    return restTemplate.getForObject("http://my-service/endpoint", String.class);
}

 

위 예시에서 my-service는 Eureka 서버에 등록된 서비스의 이름입니다.

6. Eureka의 고급 기능

  • Heartbeat: Eureka 클라이언트는 일정 간격으로 Eureka 서버에 생존 신호를 보냅니다. 클라이언트가 일정 시간 동안 생존 신호를 보내지 않으면 Eureka 서버는 해당 클라이언트를 "down" 상태로 표시하고, 다른 서비스들이 이 정보를 통해 해당 서비스를 호출하지 않게 됩니다.
  • Self-Registration: 클라이언트는 자체적으로 서비스를 등록하며, 이는 Spring Cloud에서 기본적으로 제공됩니다. 다른 서비스가 실패할 경우 자동으로 대체 서비스를 선택할 수 있습니다.
  • 서비스 상태 관리: Eureka는 각 서비스의 상태를 UP, DOWN, STARTING, OUT_OF_SERVICE 등으로 관리할 수 있으며, 서비스의 상태를 기반으로 서비스들을 선택적으로 호출할 수 있습니다.

 

7. Eureka와 로드 밸런싱

Eureka와 함께 사용되는 @LoadBalanced 어노테이션은 클라이언트에서 로드 밸런싱을 제공하는 Ribbon과 통합됩니다. 이를 통해 여러 인스턴스가 있는 서비스 중 하나를 자동으로 선택하여 호출할 수 있습니다.

 

8. 장애 처리

Eureka 클라이언트는 장애가 발생한 서비스를 자동으로 제거하고, 다른 가용한 서비스를 선택하도록 설계되어 있습니다. 클라이언트가 등록된 서비스의 상태를 감시하고, 문제가 생기면 해당 서비스의 정보를 제거하여, 다른 서비스가 호출될 수 있도록 합니다.

 

Eureka의 장점

  1. 자동 서비스 등록과 발견: 마이크로서비스 아키텍처에서 서비스 간의 동적인 연결을 자동으로 처리할 수 있습니다.
  2. 가용성 관리: 서비스 상태를 모니터링하고, 장애가 발생한 서비스를 제외하여 다른 서비스에 트래픽을 전송합니다.
  3. 로드 밸런싱: 여러 인스턴스를 가진 서비스에서 자동으로 로드 밸런싱을 처리할 수 있습니다.

 

Eureka의 단점

  1. 중앙 집중식 서비스 관리: Eureka 서버가 다운되면 서비스 디스커버리 기능이 중단될 수 있습니다. 이를 보완하기 위해 Eureka 서버의 복제다중 서버 설정이 필요할 수 있습니다.
  2. 성능 문제: 서비스가 많아질수록 서버의 부하가 커질 수 있기 때문에 Eureka 서버의 성능을 고려한 설정이 필요합니다.

결론

Spring Eureka는 서비스 디스커버리자동화된 서비스 등록 기능을 제공하여, 마이크로서비스 아키텍처에서 서비스를 동적으로 관리할 수 있게 해줍니다. 클라이언트는 자신을 Eureka 서버에 등록하고, 다른 서비스들의 위치를 쉽게 찾을 수 있습니다. 이 기능은 Spring Cloud와 잘 통합되어 마이크로서비스 환경을 구축하는 데 중요한 역할을 합니다.

반응형

'With AI' 카테고리의 다른 글

2025년 04월 17일 IT 트렌드  (0) 2025.04.17
Loki란  (0) 2025.04.03
Authorization 헤더에서 Bearer를 붙이는 이유  (0) 2025.03.07
Spring Boot의 애플리케이션 설정파일  (0) 2025.03.07
Spring 환경에서 API 호출하기  (0) 2025.03.05
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.