해당 게시글은 아래 MSA 강의를 참고하였다. ( 섹션 1 , Service Discovery )
Service Discovery 는 Load Balancer 을 통해 request가 들어올 경우 어느 서비스 인스턴스에게 전달할지에 대한 역할을 한다.
따라서, Service Discovery 를 구성하기 위해서는 관리할 인스턴스들의 정보를 등록해야한다.
프로젝트 생성 시, Dependencies 는 Eureka Server 만 추가한다.
기본설정
@SpringBootApplication
@EnableEurekaServer // Eureka 설정
public class DiscoveryserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryserviceApplication.class, args);
}
}
yml 설정
1. 포트변경
2. Application-name 설정
3. Eureka 설정 변경
server:
port: 8761
spring:
application:
name: discoveryservice
# 자신의 정보를 자신에게 등록하기 때문에 의미없음. 디폴트 : true
eureka:
client:
register-with-eureka: false
fetch-registry: false
Client-Server 생성
프로젝트를 생성 - 아래 dependencies
기본설정
Client 이기 때문에, @EnableDiscoveryClient 를 사용한다.
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
yml 설정
server:
port: 9001
spring:
application:
name: user-service
#Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 건지 선택하는 설정
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
Eureka Server 와 Client Server 가 잘 연결되어 있는지 확인.
2개의 프로젝트 모두 실행 중 이어야 한다.
Application 이름은 설정해준대로 user-service(대문자) 로 되어있으며 포트 번호또한 9001 로 정상적으로 연결된 것을 볼 수 있다.
Status 가 up 이면 연결상태이다. ( 반대는 down )
이후 3~4개의 서비스를 만들어준다.
port 만 변경해서 9001, 9002, 9003, 9004 를 만들어주었다.
하지만, 계속해서 포트번호를 부여하는 것은 비효율적이다.
따라서, 실행 시 자동으로 랜덤한 포트 번호를 정해주는 방법으로 수정한다.
yml 수정
server:
port: 0 # 랜덤 PORT
spring:
application:
name: user-service
#Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 건지 선택하는 설정
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
실행 결과
실제 포트는 아래 영문자+숫자 형식으로 나오지 않는다.
+ API Gateway 를 통해서 바로 호출 할 수 있지 않을까?
API Gateway 에서 바로 서비스 인스턴스를 호출 할 수 있지만, 도메인을 사용하는 것이 아닌 IP 를 사용하는 경우 추가로 설정하거나 IP 를 수정하는 등 여러 번거로움이 있을 수 있다. Service Discovery 를 이용하면 인스턴스의 ID 나 name 으로 호출 할 수 있기 때문에 효율적이다.
예를 들어 핸드폰에 전화번호를 등록할 때 이름(Service Discovery) 와 전화번호(Service Instance) 를 함께 등록한다. 이후에 전화번호가 변경되면 이름은 수정하지 않고 전화번호만 간단히 바꾸어주면 사용자는 이름으로만 검색해서 전화할 수 있다.ㅇ
'MSA' 카테고리의 다른 글
SOA 와 MSA 의 차이 (0) | 2024.03.23 |
---|
댓글