Eureka Server & Spring Cloud Gateway

Eureka Server를 사용하는 이유

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

하지만, random IP, Port일 경우 마이크로 서비스의 정보를 알기가 쉽지 않기 때문에, 각 마이크로 서비스의 IP, Port 정보를 저장하고 검색해주는 Discovery Service(Eureka Service)가 필요하다.

 

Eureka Server 사용법

 

1. Dependency 추가 (gradle)

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

 

2. @EnableEurekaServer를 이용해서 eurekaServer로 등록한다.

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServiceApplication {

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

}

3. application.yml 파일 설정

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

#micro service의 id를 discovery-server로 지정
spring:
  application:
    name: discovery-Server

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

 

4. 실행 결과

 

 

 

 

 

 

 

Spring Cloud Gateway란 ?

spring cloud gateway는 API Gateway 역할을 하는데, MSA에서 API Gateway가 없다면 클라이언트가 각각의 마이크로 서비스의 IP, Port 정보를 모두 알고있어야한다. 이 마저도 랜덤으로 IP. Port가 할당되는 상황에서는 찾을 수가 없다.

그렇기 때문에 gateway는 이용해서 각각의 서비스에 맞게 요청을 전달해주는 역할을 한다.

또한 게이트웨이는 각 마이크로 서비스의 앞단에 존재하기 때문에 리버스 프록시(클라이언트의 요청을 받고 적절한 서비스로 라우팅),

인증 및 권한 부여, 로드밸런싱 의 역할도 한다.

 

 

Eureka Server에서의 Spring Cloud Gateway 사용법

 

1. Dependency 추가 (gradle)

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

2. 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/**

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'개발 > Spring' 카테고리의 다른 글

[JSP] Cookie와 Session  (0) 2023.04.18
REST Docs와 Swagger ui  (0) 2023.04.11
Java MVC 패턴을 이용한 간단한 미니 쿠팡 만들기  (0) 2023.04.04
DAO, DTO, VO  (0) 2023.03.16
Spring WebFlux로 Chatting service 만들기  (0) 2023.02.27