[스프링] 스프링 Cloud로의 이관 및 마이그레이션 전략

기존 시스템 개요

저희 회사는 기존에는 단일 서버에서 운영되는 모놀리식 아키텍처를 사용하고 있었습니다. 이런 시스템은 관리 및 확장이 어렵고 장애 발생 시 전체 시스템에 영향을 미치는 문제가 있었습니다.


스프링 Cloud로의 이관 목표

새로운 시스템은 마이크로서비스 아키텍처로 설계되어야 했습니다. 이를 통해 서비스 간 분리독립적인 배포 및 확장성을 달성할 수 있었습니다. 또한, 장애 격리성능 향상을 목표로 스프링 Cloud로의 이관이 필요했습니다.


마이그레이션 전략

스프링 Cloud로의 이관을 위해 서비스를 단계적으로 분리하는 전략을 택했습니다. 먼저, 마이크로서비스를 개발하고, 아키텍처에 맞춰 리팩토링하는 단계를 거쳤습니다. 이후에는 스프링 Cloud의 기능을 활용하여 서비스 간 통신 및 구성을 관리하였습니다. 더불어, 서비스 디스커버리 및 로드 밸런싱을 위해 Eureka나 Ribbon과 같은 컴포넌트를 적용하였습니다.


이관 프로세스

  1. 마이크로서비스 분리: 각 기능을 독립된 서비스로 분리하고, 필요한 데이터베이스와 통신을 할 수 있도록 수정하였습니다.
    @FeignClient(name = "order-service")
    public interface OrderServiceClient {
     @GetMapping("/orders/{id}")
     Order getOrder(@PathVariable("id") Long id);
    }
    
  2. 서비스 디스커버리 구성: Eureka 서버를 구축하고, 각 서비스를 등록하여 서비스 디스커버리를 가능하게 하였습니다.
    eureka:
      client:
     service-url:
       defaultZone: http://localhost:8761/eureka/
    
  3. 로드 밸런싱 적용: Ribbon을 통해 서비스 간 로드 밸런싱을 구성하여, 각 서비스에 고르게 트래픽을 분산시켰습니다.
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
     return new RestTemplate();
    }
    

결론

스프링 Cloud로의 이관을 통해 저희 시스템은 마이크로서비스 아키텍처로의 업그레이드를 완료하였고, 이를 통해 확장성, 장애 격리, 서비스 간 통신 및 로드 밸런싱에 대한 요구사항을 모두 충족시켰습니다. 이를 통해 더 나은 사용자 경험과 안정적인 서비스 운영이 가능하게 되었습니다.


참고 자료