서비스 디스커버리 Eureka 서버 이해하기 및 실습

2024. 8. 17. 16:11·Spring
728x90
반응형

 

 

서비스 디스커버리

 

서비스 디스커버리 : 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능.

각 서비스는 등록 서버에 자신의 위치를 등록하고, 다른 서비스는 이를 조회하여 통신.

주요 기능으로는 서비스 등록, 서비스 조회, 헬스 체크 등이 있음.

 


 

Eureka

 

Eureka : 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로 서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리.

모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소 역할을 하며, 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성 보장.

 

Eureka 서버 설정

 

Eureka 서버는 서비스 레지스트리를 구성하는 중앙 서버

서버 설정 파일 예시 >

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false  # 다른 Eureka 서버에 이 서버를 등록하지 않음
    fetch-registry: false  # 다른 Eureka 서버의 레지스트리를 가져오지 않음
  server:
    enable-self-preservation: false  # 자기 보호 모드 비활성화

 

해당 설정을 통해 Eureka 서버를 구성하고, 클라이언트가 등록할 수 있도록 준비

 

Eureka 클라이언트 설정

 

각 서비스는 Eureka 서버에 자신을 등록해야 함

클라이언트 설정 파일 예시 >

spring:
  application:
    name: my-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/  # Eureka 서버 URL
    register-with-eureka: true  # Eureka 서버에 등록
    fetch-registry: true  # Eureka 서버로부터 레지스트리 정보 가져오기
  instance:
    hostname: localhost  # 클라이언트 호스트 이름
    prefer-ip-address: true  # IP 주소 사용 선호
    lease-renewal-interval-in-seconds: 30  # 리스 갱신 간격
    lease-expiration-duration-in-seconds: 90  # 리스 만료 기간

 

 

서비스 등록

 

spring-cloud-starter-netflix-eureka-client 의존성을 사용하고, 애플리케이션 이름만 설정 파일에 있다면 Eureka에 등록됨.

 

서비스 디스커버리

 

클라이언트 애플리케이션은 Eureka 서버에서 필요한 서비스의 위치를 조회

 

  • RestTemplate 사용하는 경우
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

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

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/get-data-rest")
    public String getDataWithRestTemplate() {
        String serviceUrl = "http://my-service/api/data";
        return restTemplate.getForObject(serviceUrl, String.class);
    }
}

 

클라이언트 애플리케이션은 Eureka 서버에서 필요한 서비스의 위치를 조회 함.

Spring boot 애플리케이션에서 @LoadBalanced 애노테이션을 사용하여 RestTemplate에 로드 밸런싱 기능 추가.

 

  • FeignClient 사용하는 경우
@SpringBootApplication
@EnableFeignClients
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
@FeignClient(name = "my-service")
public interface MyServiceClient {

    @GetMapping("/api/data")
    String getData();
}
@RestController
public class MyFeignClientController {

    @Autowired
    private MyServiceClient myServiceClient;

    @GetMapping("/get-data-feign")
    public String getDataWithFeignClient() {
        return myServiceClient.getData();
    }
}

 

클라이언트 애플리케이션은 Eureka 서버에서 필요한 서비스의 위치를 조회.

Spring boot 애플리케이션에서 FeignClient 사용하여 간편하게 서비스 호출 수행.

 


 

Eureka 실습

 

Eureka 서버 하나에 같은 기능의 인스턴스 2개 연결하기

 

👉🏻 https://start.spring.io/ 접속해서 server와 client 프로젝트 생성

 

Server > dependencies 에서 Eureka Server 추가

Client > dependencies 에서 Eureka Discovery Client, Spring Web 추가

 

 

Intellij에서 오픈 후 Gradle을 사용하여 위와 같이 한 프로젝트 안에 띄우기.

 

Eureka 서버 설정하기

application.properties

spring.application.name=server

// 포트번호
server.port=19090

// 기본값은 true. 유레카 서버에 등록되어야 하는 것은 서버가 아니라 클라이언트이므로 false
eureka.client.register-with-eureka=false

// 유레카 서버로부터 레지스트리를 가져올지 말지 정함 false
eureka.client.fetch-registry=false

eureka.instance.hostname=localhost

// eureka 클라이언트가 eureka 서버와 통신할 때 사용할 url 지정
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/

 

ServerApplication.java

 

ServerApplication 위에 어노테이션으로 @EnableEurekaServer를 추가해야 유레카 서버로 동작된다.

 

Client 설정하기

 

first client의 application.properties

spring.application.name=first

server.port=19091

eureka.client.service-url.defaultZone=http://localhost:19090/eureka/

 

second client의 application.properties

spring.application.name=second

server.port=19092

eureka.client.service-url.defaultZone=http://localhost:19090/eureka/

 

위와 같은 설정을 마치고 ServerApplication을 Run 한 뒤 localhost:19090으로 들어가보면 다음과 같은 창을 볼 수 있다.

 

 

Instance currently registered with Eureka 칸을 보면 아무것도 등록되어있지 않은데 이 부분은 FirstClient와 SeconClient를 실행시키고 새로고침을 하면 아래와 같이 잘 등록됨을 확인 할 수 있다.

 

 


 

헬스 체크

 

헬스 체크 : Eureka 서버가 주기적으로 서비스 인스턴스의 상태를 확인하여 가용성을 유지.

기본 헬스 체크 엔드포인트인 /actuator/health 사용

 

장애 처리 > 서비스 장애 시 Eureka 서버는 해당 인스턴스를 레지스트리에서 제거하여 다른 서비스의 접근을 차단 함.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

서킷 브레이커 Resilience4j와 API 게이트웨이 이해하기  (1) 2024.08.17
클라이언트 사이드 로드 밸런싱 FeignClient와 Ribbon 이해하기  (0) 2024.08.17
MSA와 Spring Cloud 이해하기  (0) 2024.08.17
Spring의 RestTemplate 이해하기  (0) 2024.08.17
Spring 데이터 검증 (Validation)하기  (0) 2024.08.17
'Spring' 카테고리의 다른 글
  • 서킷 브레이커 Resilience4j와 API 게이트웨이 이해하기
  • 클라이언트 사이드 로드 밸런싱 FeignClient와 Ribbon 이해하기
  • MSA와 Spring Cloud 이해하기
  • Spring의 RestTemplate 이해하기
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    스프링부트
    MSA
    연결리스트
    자료구조
    스프링
    스파르타코딩클럽
    프로그래머스
    이진트리
    C언어
    정올
    C
    progate
    내일배움캠프
    온코더
    devops
    자바
    Til
    도커
    코테
    형변환
    알고리즘
    깃
    깃헙
    springboot
    while문
    CI/CD
    java
    아파치카프카
    스파르타코딩
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
서비스 디스커버리 Eureka 서버 이해하기 및 실습
상단으로

티스토리툴바