개발/기능 개발

[Spring] Microservice 관리를 위한 Eureka Server 와 Spring Cloud Gateway

뽀글뽀글 개발자 2023. 2. 26. 22:38

Eureka Server란?

마이크로 서비스가 다른 마이크로 서비스를 호출하려면 대상의 IPPort를 알아야한다.

그렇기 때문에 각 마이크로 서비스의 IP, Port 정보를 저장하고 검색해주는 Discovery Service가 필요하다.

각각의 마이크로서비스의 정보를 가지고 있는 곳이 Eureka Server이고, Server에 등록된 마이크로 서비스가 Eureka Client이다.

 

Eureka Server 설정

의존성 추가

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

 

@EnableEurekaServer를 이용해서 EurekaServer로 등록

@SpringBootApplication
@EnableEurekaServer			//EurekaServer 활성화
public class DiscoveryServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(DiscoveryServiceApplication.class, args);
    }

}

 

application.yml 파일 설정

# 실행 포트 지정
server:
  port: 8761

# micro service의 이름을 discovery-server로 지정
spring:
  application:
    name: discovery-Server

# Eureka Server인데 Client 설정을 하는 이유:
# Eureka Library가 포함되어 있으면 스프링 실행 시 Eureka Client의 역할로써 등록되기 때문에
# 서버이지만 클라이언트로 설정한다.
eureka:
  client:
    register-with-eureka: false 	#유레카 레지스트리에 자기 자신을 등록하지 않겠다.
    fetch-registry: false   		#레지스트리의 정보를 가저오지 않겠다.

 

 

Eureka Client 설정

# 서비스 이름 설정
spring:
  application:
    name: my-first-service  # 유레카 서버에 등록될 서비스 이름

eureka:
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    service-url:
      defaultZone: http://${IP}:${PORT}/eureka  #유레카 서버 주소
    register-with-eureka: true
    fetch-registry: true

 

discovery server 접속 시 아래와 같이 등록된 마이크로서비스를 확인할 수 있다.

 

 

 

Spring Cloud Gateway란 ?

Eureka Server에서 마이크로 서비스의 정보를 가지고 있다면, 이제는 각각의 마이크로 서비스로 요청을 전달할 수 있어야한다.

각각의 서비스로 바로 요청을 보내는 것이 아닌 리버스 프록시 서버인 API Gateway 서버가 모든 요청을 받고 요청을 적절한 서비스로 전달한다.

여러 서버로 요청을 분산하기 때문에 하나의 서버에 가해지는 부하가 분산된다.

또한 모든 마이크로서비스에 인증 로직을 구현하면 너무 많은 중복 코드가 발생하기 때문에 프록시 서버에서 인증을 처리하여 중복을 줄일 수 있다.

 

Spring Cloud Gateway 생성

의존성 추가

implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

 

application.yml 파일 설정 - gateway에 등록할 서비스 정보를 등록

server:
  port: 8000

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka	 #등록할 eureka server url

spring:
  application:
    name: api-gateway-service		  
  cloud:
    gateway:
      routes:
        - id: MY-FIRST-SERVICE        #해당 라우터의 고유 식별자
          uri: lb://MY-FIRST-SERVICE  #해당 라우터의 주소
          predicates:                 #라우터의 조건 작성 /first-service/**로 시작하는 경우 해당 라우터로 요청 전송
            - Path=/first-service/**
        - id: MY-SECOND-SERVICE
          uri: lb://MY-SECOND-SERVICE
          predicates:
            - Path=/second-service/**