프로젝트를 생성할 때 Eureka Server 의존성을 추가합니다. 이 Eureka Server는 API Gateway와 각 서비스의 위치 정보를 관리하는 역할을 하게 됩니다.
아래와 같이 application.yml
파일을 설정합니다:
server:
port: 8761
spring:
application:
name: discovery-service
eureka:
client:
register-with-eureka: false
fetch-registry: false
server.port
: Eureka 서버가 사용할 포트를 8761
로 지정합니다. 이 포트에서 Eureka 대시보드에 접근할 수 있습니다.spring.application.name
: 이 애플리케이션의 이름을 discovery-service
로 설정하여, Eureka 서버에 등록할 때 이 이름을 사용합니다.eureka.client.register-with-eureka
: 현재 애플리케이션을 자체적으로 Eureka에 등록하지 않도록 설정합니다.eureka.client.fetch-registry
: 현재 애플리케이션이 Eureka 서버로부터 등록 정보를 가져오지 않도록 설정합니다.EurekaServerApplication
클래스에 @EnableEurekaServer
애너테이션을 추가하여 이 애플리케이션을 Eureka 서버로 설정합니다:
package com.example.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
@EnableEurekaServer
: Spring Cloud에서 제공하는 애너테이션으로, 해당 애플리케이션을 서비스 디스커버리를 위한 Eureka 서버로 동작하도록 합니다.application.yml
에서 설정한 포트를 사용하여 대시보드에 접속할 수 있습니다. 여기서는 8761
포트를 설정했으므로 http://localhost:8761
로 접근하면, 아래와 같이 Eureka 대시보드를 확인할 수 있습니다.
이렇게 설정이 완료되면 기본적인 Eureka Server 구성이 완료됩니다!
Eureka 서버에 등록될 클라이언트 서비스 프로젝트를 생성합니다. 이때 Eureka Discovery Client 의존성을 추가해줍니다. 이 클라이언트는 서비스 등록 및 검색을 통해 다른 서비스와의 통신이 가능하게 됩니다.
아래와 같이 application.yml
파일을 작성하여 Eureka 서버와의 연결을 설정합니다:
server:
port: 0 # # 사용 가능한 임의의 포트 할당합니다.
spring:
application:
name: user-service # 이 서비스의 이름을 설정합니다. Eureka 서버에 등록될 때 사용됩니다.
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # Eureka 서버의 URL을 지정합니다.
register-with-eureka: true # 이 서비스가 Eureka 서버에 등록되도록 설정합니다.
fetch-registry: true # Eureka 서버로부터 다른 서비스 정보를 받아오도록 설정합니다.
server.port
: 클라이언트 서비스의 포트를 지정합니다. 예를 들어, 이 클라이언트를 8081
포트로 설정합니다.spring.application.name
: 클라이언트 서비스의 이름을 설정합니다. 예를 들어 example-service
로 지정하며, Eureka에 등록될 때 이 이름이 사용됩니다.eureka.client.service-url.defaultZone
: Eureka 서버의 주소를 지정합니다. 이 예시에서는 localhost:8761
에 있는 Eureka 서버를 사용합니다.eureka.client.register-with-eureka
: 이 클라이언트를 Eureka에 등록할지 여부를 설정합니다. true
로 설정하여 등록이 가능하게 합니다.eureka.client.fetch-registry
: 다른 서비스의 정보를 받아올지 여부를 설정합니다. true
로 설정하면 다른 서비스의 정보를 받을 수 있어, 서비스 간 통신이 가능해집니다.클라이언트 애플리케이션 클래스에 @EnableDiscoveryClient
애너테이션을 추가하여 서비스가 Eureka 서버와 연결될 수 있도록 설정합니다:
package com.example.userservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
@EnableDiscoveryClient
: 이 애너테이션은 해당 애플리케이션이 Eureka 서버에 등록되도록 하며, 다른 서비스와의 통신이 가능하도록 해줍니다.package com.example.userservice.user;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public String test() {
return "user-test";
}
}
클라이언트를 실행한 후, Eureka 서버 대시보드 (http://localhost:8761
)에 접속하여 등록된 클라이언트가 보이는지 확인합니다. example-service
가 Eureka 서버에 정상적으로 등록되었다면 대시보드에서 확인할 수 있습니다.
이제 클라이언트 서비스가 Eureka 서버와 연결되었으며, 다른 서비스와의 통신 준비가 완료되었습니다!
게이트웨이는 클라이언트의 요청을 받아 각 마이크로서비스로 전달하는 역할을 합니다. 이 예시에서는 Gateway 프로젝트를 생성하고, Spring Cloud Gateway와 Eureka Discovery Client 의존성을 추가하여 설정합니다.
게이트웨이 프로젝트 생성 시 Spring Cloud Gateway와 Eureka Discovery Client 의존성을 추가합니다.
✨ 주의사항
인텔리제이에서 GateWay 의존성을 추가하면 gateway-mvc 의존성이 추가됨으로 Reactive GateWay를 추가해줘야 한다.
아래와 같이 application.yml
파일을 작성하여 Eureka 서버와의 연결 및 서비스 라우팅을 설정합니다:
server:
port: 9000 # 게이트웨이 포트 지정
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # Eureka 서버의 URL 지정
# 게이트웨이 라우팅 설정
spring:
application:
name: apigateway-service # Gateway 서비스의 이름
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/** # /users/** 경로로 들어오는 요청을 user-service로 라우팅
- id: order-service
uri: lb://order-service
predicates:
- Path=/orders/** # /orders/** 경로로 들어오는 요청을 order-service로 라우팅
server.port
: 게이트웨이의 포트를 8080
으로 지정합니다. 이 포트로 클라이언트 요청을 받게 됩니다.spring.application.name
: 게이트웨이 애플리케이션의 이름을 api-gateway
로 설정합니다.eureka.client.service-url.defaultZone
: Eureka 서버의 URL을 지정합니다. localhost:8761
에서 Eureka 서버가 실행된다고 가정합니다.spring.cloud.gateway.routes
: 라우팅 설정입니다. 각 마이크로서비스에 대해 설정한 경로로 들어오는 요청을 해당 서비스로 전달합니다.lb://
는 로드 밸런싱을 위한 접두사로, Eureka에 등록된 서비스로 라우팅하도록 설정합니다.게이트웨이를 실행한 후, http://localhost:8761
에서 Eureka 대시보드에 접속하여 api-gateway 서비스가 Eureka에 등록되었는지 확인합니다.
등록이 완료되면, 클라이언트는 게이트웨이를 통해 각 마이크로서비스에 요청을 전달할 수 있게 됩니다.
이로써 Eureka Server, 클라이언트 서비스, Gateway 간의 기본 설정이 완료되었습니다.