마이크로서비스 아키텍처는 확장 가능한 모듈식 시스템을 구축하는 데 널리 사용되는 솔루션이 되었습니다. 마이크로서비스를 사용하면 모놀리식 애플리케이션을 더 작고 독립적이며 전문화된 서비스로 분할할 수 있으므로 시스템을 더 쉽게 유지 관리하고 발전시킬 수 있습니다. 이 게시물에서는 Spring Boot와 Spring Cloud를 사용하여 강력하고 효율적인 마이크로서비스를 만드는 방법을 살펴보겠습니다.
마이크로서비스 소개
마이크로서비스의 기본 아이디어는 애플리케이션을 독립적으로 개발, 배포 및 확장할 수 있는 작은 서비스로 분할하는 것입니다. 각 마이크로서비스는 특정 기능을 담당하고 일반적으로 REST API 또는 메시징을 사용하여 가벼운 방식으로 다른 서비스와 통신해야 합니다.
마이크로서비스의 장점은 다음과 같습니다.
이제 Spring Boot 및 Spring Cloud
를 사용하여 마이크로서비스를 생성하고 관리하는 방법을 살펴보겠습니다.Spring Boot를 사용하면 최소한의 구성과 빠른 시작에 중점을 두어 마이크로서비스를 쉽게 구축할 수 있습니다. "사용자" 서비스(User-service)와 "주문" 서비스(Order-service)라는 두 개의 마이크로서비스를 만드는 것부터 시작해 보겠습니다.
마이크로서비스를 설정하려면 Spring 초기화를 사용하여 Spring Web 및 Spring Data JPA와 같이 필요한 종속성을 갖춘 새 프로젝트를 생성할 수 있습니다. 다음은 User-service에 있는 REST 컨트롤러의 기본 예입니다.
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public ResponseEntitygetUserById(@PathVariable Long id) { User user = new User(id, "Matheus"); return ResponseEntity.ok(user); } }
각 마이크로서비스는 자체 데이터베이스를 가질 수 있으므로 서비스가 독립적이고 분리되어 있습니다. 사용자 서비스의 경우 예를 들어 H2 또는 PostgreSQL을 사용한 구성을 사용할 수 있습니다.
@RestController @RequestMapping("/orders") public class OrderController { private final RestTemplate restTemplate; public OrderController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/{id}") public ResponseEntitygetOrderById(@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는 분산 환경에서 이러한 서비스의 통신 및 복원성을 관리하기 위한 추가 도구를 제공합니다. 몇 가지 필수 구성 요소를 살펴보겠습니다.
eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
이제 서비스는 유레카에 자동으로 등록되어 서로를 더 쉽게 찾을 수 있습니다.
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는 프로세스를 가속화하고 견고한 아키텍처를 보장할 수 있습니다.
포스트가 마음에 드셨나요? 질문이나 제안 사항이 있으면 댓글에 남겨주세요! 그리고 이 팁의 혜택을 누릴 수 있는 다른 개발자와 공유하는 것도 잊지 마세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3