Eureka: 마이크로서비스 환경에서의 서비스 디스커버리와 클라이언트 설정

궁금하면 500원·2024년 7월 28일
0

MSA&아키텍처

목록 보기
15/42

1. Eureka 소개

Eureka는 Netflix에서 개발한 오픈 소스 서비스 디스커버리 서버입니다.
마이크로서비스 아키텍처에서 서비스 간의 상호작용을 단순화하고,
서비스 인스턴스의 위치를 동적으로 관리할 수 있도록 도와줍니다.
Eureka는 클라이언트가 서비스의 위치를 조회하고,
서버가 서비스의 등록 상태를 관리하는 기능을 제공합니다.
Eureka는 크게 두 가지 역할을 합니다

Eureka Server: 서비스 인스턴스와 관련된 정보를 저장하고 관리합니다.
Eureka Client: 서비스 인스턴스가 Eureka Server에 등록하고,
다른 서비스 인스턴스를 조회할 수 있게 합니다.

2. Eureka Server 구축하기

2.0.1. Maven 설정

Eureka Server를 설정하기 위해 먼저 Maven 의존성을 추가합니다.
pom.xml 파일에 다음과 같은 의존성을 추가하세요

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

그리고 Spring Cloud BOM을 추가하여 버전을 관리합니다

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.0.2. Java 설정

Eureka Server를 활성화하기 위해 메인 애플리케이션 클래스에 @EnableEurekaServer
애너테이션을 추가합니다

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

2.1. properties 설정

application.properties 파일을 설정하여 Eureka Server의 기본 설정을 구성합니다.

예를 들어:

spring.application.name=eureka-server
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

2.2. Client 등록 제외하기

Eureka Server 자체가 클라이언트 역할을 할 필요가 없으므로 eureka.client.register-with-eureka=false 설정을 통해 Eureka Server가 자신을 등록하지 않도록 합니다.

2.3. Registry 호출 저장 비활성화 하기

Eureka는 기본적으로 다른 Eureka Server와의 피어 인식을 지원합니다.
만약 이를 비활성화하고 싶다면,
다음 설정을 추가합니다

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.lease-expiration-duration-in-seconds=30
eureka.instance.lease-renewal-interval-in-seconds=10

2.3.1. Peer Awareness 처리

피어 인식을 비활성화하려면 eureka.server.enable-self-preservation=false 설정을 추가합니다.

이는 Eureka Server가 인스턴스의 상태를 정확히 반영하도록 합니다.

3. Eureka Client 설정하기

3.0.1. Maven 설정

Eureka Client를 설정하기 위해 Maven 의존성을 추가합니다.

pom.xml에 다음과 같은 의존성을 추가하세요

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.0.2. Java 설정

Eureka Client를 설정하려면, 클라이언트 애플리케이션의 메인 클래스에 @EnableEurekaClient 애너테이션을 추가합니다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

3.1. properties 설정

application.properties 파일에서 Eureka Server와의 연결을 설정합니다.

spring.application.name=my-service
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

3.2. Eureka Server 주소 지정

Eureka Client가 Eureka Server와 통신할 수 있도록 eureka.client.service-url.defaultZone 설정을 통해 Eureka Server의 주소를 지정합니다.

서버에서 등록된 application 세부정보 확인하기

Eureka Server의 웹 인터페이스에 접속하여 등록된 서비스와 인스턴스의 세부 정보를 확인할 수 있습니다. 브라우저에서 http://localhost:8761 주소로 접속하면, Eureka Dashboard에서 등록된 서비스와 인스턴스의 상태, 메타데이터 등을 확인할 수 있습니다.

결론

Eureka는 마이크로서비스 아키텍처에서 중요한 역할을 하며, 서비스 디스커버리와 등록을 간편하게 관리할 수 있도록 도와줍니다.

Eureka Server와 Eureka Client를 설정하는 과정에서 Maven 의존성, Java 설정, 그리고 프로퍼티 설정을 통해 이를 원활하게 운영할 수 있습니다.

또한, Eureka Dashboard를 통해 서비스의 상태를 모니터링하고 문제를 신속히 해결할 수 있습니다.

느낀점

Eureka를 사용하면서 서비스 디스커버리의 중요성을 실감할 수 있었습니다.

특히 마이크로서비스 아키텍처에서 서비스 간의 동적 상호작용을 지원하는 것은 개발과 운영의 효율성을 크게 향상시키는 요소입니다.

Eureka의 설정과 관리가 비교적 간단하여, 마이크로서비스 환경의 관리가 더욱 수월해질 것이라고 생각합니다.

Eureka를 통해 마이크로서비스 간의 커뮤니케이션을 보다 효율적으로 할 수 있는 기회를 얻었습니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글