이 글은 2019년에 작성된 필자 소유의 네이버 블로그에서 이동해 왔습니다.
Spring Cloud의 Ribbon을 이용하면 MSA의 복수개의 동일 서비스간에 호출을 위한 로드벨런스를 SW로 구축 할 수 있습니다. 다만 각 서비스간의 호출 관계에 필요한 서버 목록들을 호출하는 서버의 application.yml에 listOfServers라는 목록에 기록 했어야 했습니다.
Euerka는 Ribbon에서 호출할 서버 목록을 일일이 타이핑해서 관리해야 하는 단점을 보완해 호출되는 서비스들이 Eureka 서버에 자신의 서비스를 자동으로 등록해 별도의 서비스 등록을 해야 하는 수고를 덜어주는 서버입니다.(이러한 기능을 MSA에서는 Service Registry라 부릅니다.) Netlfex Eureka를 이용해 필요한 서비스(서버)의 등록, 탐색을 효율적으로 관리 할 수 있습니다.
※Netflex의 Eureka와 유사한 기능을 수행하는 Service Registry로는 K8S(Kebernetes)와 연동이 자유로운 Consul과 그외 Zookeeper 등이 있습니다.
사용법:
1. Eureka Server 만들기
- SpringBoot등을 이용해 @EnableEurekaServer Annotation이 추가된 빈 Eureka Server를 만듭니다.
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
Ex: EurekaServerApplication.java |
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
- Eureka Server를 위한 applicaton.yml 파일 설정(Spring Boot의 경우)
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
application.yml |
server: port: 8761 # Default : 8761 spring: application: name: eureka-server eureka: server: response-cache-update-interval-ms: 1000 #기본값은 30초이나 개발 편의를 위해 1초로 설정 enableSelfPreservation: false # 개발모드 client: register-with-eureka: false # 개발모드 fetch-registry: false # 개발모드 service-url: defaultZone: http://localhost:8761/eureka #기본값 설정 instance: prefer-ip-address: true # 각 서버별 접근을 IP로 하겠다는 의미 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
- dependency class 추가
org.springframework.cloud:spring-cloud-starter-netflix-eureka-server 라이브러리를 프로젝트에 추가합니다.
Ex: gradle의 경우
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
2. Eureka Client 설정
- Client dependency class 추가
spring-cloud-starter-netflix-eureka-client 클래스를 추가합니다.
Ex: gradle의 경우
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
- Client Service의 Main Application에 @EnableEurekaClient Annotation 추가하기
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
Ex: ServiceBApplication.java (Spring Boot) |
... import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; ... @EnableEurekaClient public class ServiceBApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ServiceBApplication.class); } } |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
- Client Service의 속성 파일을 통해 Eureka Sever 주소 설정하기
application.yml(Spring Boot의 경우) 파일 등과 같은 Client 서비스 속성 설정에 Eureka Server 정보를 기입
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
application.yml |
… spring: application: name: serviceB # 이 이름으로 Eureka에 등록됩니다. eureka: instance: prefer-ip-address: true # Eureka Server에 IP로 서비스 등록 client: service-url: defaultZone: http://127.0.0.1:8761/eureka # Eureka Server 주소 입력 … |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
- Ribbon에 설정된 listOfServers 항목 지우기
필요한 서비스간의 연결은 이제부터 Ribbon이 담당하기 때문에 기존에 listOfServers로 등록했던 서버 목록은 삭제하기 바랍니다.
Eureka 서버 확인
앞서 설정한 Eureka 서버로 접근을 합니다(http://localhost:8761). 아래의 예를 보면 1개로 구성된 ServiceA와 2개로 구성된 ServiceB를 볼 수 있습니다. 또한 Service0는 다운되어 있는 상태를 볼 수 있습니다. Eureka서버는 앞서 이야기 했듯이 Eureka Client에서 @EnableEurekaClient annotation이 활성화 되었으면 해당 client의 application.yml에 등록된 Eureka Server에 자신을 등록하게 됩니다. Client가 다운되게 되면 자동으로 Eureka Server가 인지하게 됩니다.
대표사진 삭제
사진 설명을 입력하세요.
마지막 정리
- Eureka Client가 시작 시 자동으로 Eureka Server(Service Registry)에 자동으로 자신의 상태 등록
: eureka.client.register-with-eureka : true (default 값)
- 주기적으로 Health-Check를 통해 Eureka Server에 자신이 살아 있음을 알림(기본 30초 마다 신호 보냄)
: eureka.instance.lease-renewal-interval-in-seconds: 30 (default)
- Eureka Client down이나 종료 시 자신의 상태 변경(DOWN) 혹은 서비스 목록 삭제
- Eureka Server에 등록되는 이름은 Client의 application.yml에 등록된 ‘spring.application.name’임
- @EnableEurekaClient annotation은 Eureka Server로부터 다른 서비스의 주소를 가져오는 역할과 자신의 주소를 Eureka Server에 등록하는 일 모두 수행
이번 포스팅은 여기까지 입니다.
실습은 Hystrix, Ribbon, Eureka, Zuul을 포함해 하나의 예제로 별도 포스팅 하겠습니다.
감사합니다.
'Application Modernization > Service Mesh' 카테고리의 다른 글
istio와 envoy 란 (0) | 2021.09.05 |
---|---|
OpenFeign 간단 예제 (0) | 2021.09.01 |
OpenFeign 이란? (0) | 2021.09.01 |
Ribbon : Load Balancer (0) | 2021.08.31 |
Hystrix : Circuit Breaker (0) | 2021.08.31 |