MSA 구축 (1) - Eureka Server & Eureka Client & Gateway 설정

오형상·2024년 10월 27일
0

Ficket

목록 보기
1/27
post-thumbnail

🎈 Eureka Server 구축

1. 프로젝트 생성

프로젝트를 생성할 때 Eureka Server 의존성을 추가합니다. 이 Eureka Server는 API Gateway와 각 서비스의 위치 정보를 관리하는 역할을 하게 됩니다.

Eureka Server 의존성 추가 예시 1

Eureka Server 의존성 추가 예시 2

2. application.yml 작성

아래와 같이 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 서버로부터 등록 정보를 가져오지 않도록 설정합니다.

3. @EnableEurekaServer 설정

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 서버로 동작하도록 합니다.

4. 실행 및 대시보드 접속

application.yml에서 설정한 포트를 사용하여 대시보드에 접속할 수 있습니다. 여기서는 8761 포트를 설정했으므로 http://localhost:8761로 접근하면, 아래와 같이 Eureka 대시보드를 확인할 수 있습니다.

Eureka 대시보드 화면

이렇게 설정이 완료되면 기본적인 Eureka Server 구성이 완료됩니다!


🚀 Eureka Client(Spring) 구축

1. 프로젝트 생성 및 의존성 추가

Eureka 서버에 등록될 클라이언트 서비스 프로젝트를 생성합니다. 이때 Eureka Discovery Client 의존성을 추가해줍니다. 이 클라이언트는 서비스 등록 및 검색을 통해 다른 서비스와의 통신이 가능하게 됩니다.

2. application.yml 작성

아래와 같이 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로 설정하면 다른 서비스의 정보를 받을 수 있어, 서비스 간 통신이 가능해집니다.

3. @EnableDiscoveryClient 추가

클라이언트 애플리케이션 클래스에 @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 서버에 등록되도록 하며, 다른 서비스와의 통신이 가능하도록 해줍니다.

4. 테스트용 API 생성

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";
    }
}

5. Eureka 서버와의 연결 확인

클라이언트를 실행한 후, Eureka 서버 대시보드 (http://localhost:8761)에 접속하여 등록된 클라이언트가 보이는지 확인합니다. example-service가 Eureka 서버에 정상적으로 등록되었다면 대시보드에서 확인할 수 있습니다.

이제 클라이언트 서비스가 Eureka 서버와 연결되었으며, 다른 서비스와의 통신 준비가 완료되었습니다!


🌉 Gateway 설정

게이트웨이는 클라이언트의 요청을 받아 각 마이크로서비스로 전달하는 역할을 합니다. 이 예시에서는 Gateway 프로젝트를 생성하고, Spring Cloud GatewayEureka Discovery Client 의존성을 추가하여 설정합니다.

1. Gateway 프로젝트 생성 및 의존성 추가

게이트웨이 프로젝트 생성 시 Spring Cloud GatewayEureka Discovery Client 의존성을 추가합니다.

✨ 주의사항
인텔리제이에서 GateWay 의존성을 추가하면 gateway-mvc 의존성이 추가됨으로 Reactive GateWay를 추가해줘야 한다.

2. application.yml 작성

아래와 같이 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: 라우팅 설정입니다. 각 마이크로서비스에 대해 설정한 경로로 들어오는 요청을 해당 서비스로 전달합니다.
    • id: 서비스 식별자입니다.
    • uri: 라우팅할 마이크로서비스의 주소입니다. lb://는 로드 밸런싱을 위한 접두사로, Eureka에 등록된 서비스로 라우팅하도록 설정합니다.
    • predicates: 특정 경로 패턴을 지정하여, 해당 경로로 들어오는 요청을 특정 서비스로 라우팅합니다.

3. Gateway 서비스와 Eureka 서버의 연결 확인

게이트웨이를 실행한 후, http://localhost:8761에서 Eureka 대시보드에 접속하여 api-gateway 서비스가 Eureka에 등록되었는지 확인합니다.

등록이 완료되면, 클라이언트는 게이트웨이를 통해 각 마이크로서비스에 요청을 전달할 수 있게 됩니다.

이로써 Eureka Server, 클라이언트 서비스, Gateway 간의 기본 설정이 완료되었습니다.

0개의 댓글