[Spring Cloud로 개발하는 MSA] Service Discovery

유호빈·2024년 3월 26일
0

MSA

목록 보기
2/10

인프런의 "Spring Cloud로 개발하는 마이크로서비스" 강의를 보고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4

1. Spring Cloud Netflix Eureka

Service Discovery

Service Discovery란 Microservice Architecture(MSA)에서 각각의 다른 서버와 서비스들이 어느 위치에 있는지에 대한 정보를 등록하고, 외부에서 이를 검색하여 사용하기 위해 사용되는 개념입니다.

Service Discovery의 예시를 보면 다음과 같습니다.

  1. 1개의 서비스에 대해 오른쪽에 3개의 인스턴스가 존재한다고 하면 먼저 3개에 대한 정보를 각각 Service Discovery에 저장합니다.

  2. 클라이언트에서 Load Balancer에 요청 정보를 전달합니다.

  3. Service Discovery에 요청 정보가 전달이 되면 요청 정보에 맞는 서버의 위치 정보가 Load Balancer로 반환이 됩니다.

  4. 해당 서버로 사용자의 요청 정보가 호출되고 결과값을 반환 받습니다.

Spring Cloud Netflix Eureka

Spring Cloud Netflix Eureka는 Service Discovery 솔루션 중 하나로 아래에서는 Eureka를 이용하여 이 Service Discovery를 구현하려 합니다.

2. Eureka Service Discovery 생성

Eureka Service Discovery 서버 초기 설정

강의에서는 java 11을 사용하지만 저는 최신 버전인 java 17, Spring Boot 3.1.10 버전을 사용하였고, Dependency에 Eureka Server를 추가해 주었습니다.

프로젝트의 메인 클래스에 @EnableEurekaServer 애노테이션을 사용해 Eureka Server로 동작할 것임을 알려줍니다.

application.yml 파일에 다음과 같이 작성해줬습니다.

Eureka Server 라이브러리를 포함한 상태에서 스프링 부트를 실행하면 Eureka Client가 자동적으로 역할을 시도하려 하기 때문에 register-with-eureka 의 값을 false로 설정했습니다.

3. User Service 생성

Service Discovery에 등록할 서비스 추가

client로 사용될 프로젝트로, Eureka Discovery Client, Spring Web Dependency를 추가해줬습니다.

Eureka Client 는 @EnableDiscoveryClient 애노테이션을 사용해 클라이언트로 사용됨을 명시해줬습니다. 최신 버전의 Spring Cloud에서는 이를 사용하지 않아도 등록이 됩니다.

application.yml파일은 다음과 같이 작성해 주었습니다.

위에 설정에도 있는 fetch-registry는 Eureka 서버로부터 인스턴스의 정보를 주기적으로 가져올 것인지를 설정하는 것으로 true를 통해 갱신된 정보를 받게 됩니다.
defaultZone에 Service Discovery url 을 등록해 줍니다.

client 프로젝트 실행

한 개의 프로젝트를 application.yml 파일을 변경하지 않고 포트를 바꿔 실행해줍니다.
첫번째는 인텔리제이에서 실행시킵니다.
두번째는 다음과 같이 VM 옵션으로 포트를 변경해서 실행시켜줍니다.

마지막으로 터미널에서 port를 9003으로 설정해 실행시킵니다.

Eureka Server의 8761포트로 접속하게 되면 다음과 같이 인스턴스 3개가 동작하는 모습을 볼 수 있습니다.

4. User Service - Load Balancer

client 프로젝트 실행 시 위와 같이 등록하게 되면 실행 하는 과정에서 포트를 계속 지정해주어야 하는 불편함이 있습니다.

이를 해결하는 방법은 application.yml의 설정을 변경해 줍니다.

위와 같이 port를 0번으로 주면 랜덤한 포트로 프로젝트가 실행되고, instance-id를 부여해서 여러 인스턴스가 Eureka 서버에 등록되도록 할 수 있습니다.


위와 같이 2개의 인스턴스를 실행했을 때, 2개 모두 instance-id로 등록된 모습을 볼 수 있습니다.


이번 강의에서는 Service Discovery를 직접 구현해보면서 개념에 대해 자세히 알 수 있었습니다.

profile
시작하자

0개의 댓글