"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Spring Boot 및 Spring Cloud를 사용하여 마이크로서비스 개발

Spring Boot 및 Spring Cloud를 사용하여 마이크로서비스 개발

2024-11-06에 게시됨
검색:668

Developing Microservices with Spring Boot and Spring Cloud

마이크로서비스 아키텍처는 확장 가능한 모듈식 시스템을 구축하는 데 널리 사용되는 솔루션이 되었습니다. 마이크로서비스를 사용하면 모놀리식 애플리케이션을 더 작고 독립적이며 전문화된 서비스로 분할할 수 있으므로 시스템을 더 쉽게 유지 관리하고 발전시킬 수 있습니다. 이 게시물에서는 Spring Boot와 Spring Cloud를 사용하여 강력하고 효율적인 마이크로서비스를 만드는 방법을 살펴보겠습니다.

마이크로서비스 소개
마이크로서비스의 기본 아이디어는 애플리케이션을 독립적으로 개발, 배포 및 확장할 수 있는 작은 서비스로 분할하는 것입니다. 각 마이크로서비스는 특정 기능을 담당하고 일반적으로 REST API 또는 메시징을 사용하여 가벼운 방식으로 다른 서비스와 통신해야 합니다.

마이크로서비스의 장점은 다음과 같습니다.

  • 독립적인 확장성: 각 서비스를 별도로 확장할 수 있습니다.
  • 지속적 배포: 다른 사람에게 영향을 주지 않고 마이크로서비스를 업데이트하거나 수정할 수 있습니다.
  • 기술적 유연성: 각 서비스는 다양한 기술과 프레임워크를 사용하여 구현될 수 있습니다. 이제 Spring Boot와 Spring Cloud를 사용하여 마이크로서비스를 생성하고 관리하는 방법을 살펴보겠습니다.

이제 Spring BootSpring Cloud

를 사용하여 마이크로서비스를 생성하고 관리하는 방법을 살펴보겠습니다.

Spring Boot로 마이크로서비스 만들기

Spring Boot를 사용하면 최소한의 구성과 빠른 시작에 중점을 두어 마이크로서비스를 쉽게 구축할 수 있습니다. "사용자" 서비스(User-service)와 "주문" 서비스(Order-service)라는 두 개의 마이크로서비스를 만드는 것부터 시작해 보겠습니다.

  1. 스프링 부트 프로젝트 설정

마이크로서비스를 설정하려면 Spring 초기화를 사용하여 Spring Web 및 Spring Data JPA와 같이 필요한 종속성을 갖춘 새 프로젝트를 생성할 수 있습니다. 다음은 User-service에 있는 REST 컨트롤러의 기본 예입니다.

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity getUserById(@PathVariable Long id) {
        User user = new User(id, "Matheus");
        return ResponseEntity.ok(user);
    }
}

각 마이크로서비스는 자체 데이터베이스를 가질 수 있으므로 서비스가 독립적이고 분리되어 있습니다. 사용자 서비스의 경우 예를 들어 H2 또는 PostgreSQL을 사용한 구성을 사용할 수 있습니다.

  1. REST API 노출 각 마이크로서비스는 REST API를 통해 리소스를 노출하므로 다른 서비스나 클라이언트가 해당 기능을 사용할 수 있습니다. 다음은 사용자 서비스의 API를 사용하는 Order-service의 엔드포인트 예입니다.
@RestController
@RequestMapping("/orders")
public class OrderController {

    private final RestTemplate restTemplate;

    public OrderController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/{id}")
    public ResponseEntity getOrderById(@PathVariable Long id) {
        User user = restTemplate.getForObject("http://user-service/users/"   id, User.class);
        Order order = new Order(id, user, "Order details");
        return ResponseEntity.ok(order);
    }
}

RestTemplate은 마이크로서비스 간에 HTTP 요청을 만드는 데 사용됩니다.

Spring Cloud로 마이크로서비스 관리
Spring Boot는 마이크로서비스를 신속하게 생성하는 데 도움이 되지만 Spring Cloud는 분산 환경에서 이러한 서비스의 통신 및 복원성을 관리하기 위한 추가 도구를 제공합니다. 몇 가지 필수 구성 요소를 살펴보겠습니다.

  1. 유레카 디스커버리 서버 마이크로서비스의 과제 중 하나는 서비스 검색입니다. Eureka는 서비스가 고정 URL 없이도 스스로 등록하고 다른 서비스를 검색할 수 있게 해주는 검색 서버입니다.
  • spring-cloud-starter-netflix-eureka-server 종속성을 유레카 서버에 추가합니다.
  • 유레카 서버에 등록하려면 User-service와 Order-service 모두에서 application.yml 파일을 구성합니다.
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

이제 서비스는 유레카에 자동으로 등록되어 서로를 더 쉽게 찾을 수 있습니다.

  1. Spring Cloud 게이트웨이를 사용한 API 게이트웨이 마이크로서비스 아키텍처에서는 모든 서비스에 대한 단일 진입점을 갖는 것이 필수적입니다. API 게이트웨이는 클라이언트와 마이크로서비스 간의 중개자 역할을 하여 요청을 효율적으로 라우팅합니다.

spring-cloud-starter-gateway 종속성을 추가하여 간단한 게이트웨이를 만듭니다.

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/users/**
        - id: order-service
          uri: lb://ORDER-SERVICE
          predicates:
            - Path=/orders/**

이를 통해 /users/**에 대한 모든 요청은 사용자 서비스로 라우팅되며 /orders/**에도 동일하게 적용됩니다.

3.** 회로 차단기(Hystrix)를 사용한 복원력**

마이크로서비스 환경에서는 실패가 불가피합니다. Hystrix는 장애를 격리하여 과부하로부터 서비스를 보호하는 회로 차단기입니다. 다음은 다른 서비스를 사용하는 메서드에 이를 적용하는 방법에 대한 예입니다.

@HystrixCommand(fallbackMethod = "fallbackGetUser")
public User getUser(Long id) {
    return restTemplate.getForObject("http://user-service/users/"   id, User.class);
}

public User fallbackGetUser(Long id) {
    return new User(id, "Default User");
}

사용자 서비스가 실패하면 fallbackGetUser 메서드가 호출되어 시스템이 계속 작동하는지 확인합니다.

Spring Cloud와 결합된 Spring Boot는 확장 가능하고 탄력적인 마이크로서비스 개발을 위한 탁월한 인프라를 제공합니다. 서비스 검색, 라우팅, 오류 관리와 같은 기능을 통해 애플리케이션은 분산된 동적 환경에서 작동할 수 있도록 잘 준비됩니다.

모놀리식 애플리케이션에서 마이크로서비스로 마이그레이션하든 처음부터 시작하든 상관없이 Spring Boot와 Spring Cloud는 프로세스를 가속화하고 견고한 아키텍처를 보장할 수 있습니다.

포스트가 마음에 드셨나요? 질문이나 제안 사항이 있으면 댓글에 남겨주세요! 그리고 이 팁의 혜택을 누릴 수 있는 다른 개발자와 공유하는 것도 잊지 마세요.

릴리스 선언문 이 기사는 https://dev.to/matheusmartinello/developing-microservices-with-spring-boot-and-spring-cloud-5feh?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]에 문의하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3