1.Welcome to the Spring Cloud

2025. 2. 28. 13:27Spring Microservice

Spring을 활용한 마이크로서비스 아키텍처(MSA)에 대한 개념을 이해하려면 먼저 Spring Boot, 그리고 Spring Cloud의 역할을 살펴볼 필요가 있습니다.

1. Spring Boot: 마이크로서비스를 위한 경량화된 Spring

Spring 개발자들은 시간이 지나면서 대규모 단일(monolithic) 애플리케이션에서 점점 더 작은 서비스 단위로 애플리케이션을 분할하는 방향으로 개발 패러다임이 이동하는 것을 감지했습니다. 이에 대응하기 위해 Spring Boot와 Spring Cloud가 등장하게 되었습니다.

1.1 Spring Boot란?

Spring Boot는 기존 Spring 프레임워크의 핵심 기능을 유지하면서도, 보다 간결한 설정빠른 개발 환경을 제공하기 위해 만들어진 프레임워크입니다. Spring Boot는 REST 기반의 마이크로서비스를 손쉽게 개발할 수 있도록 설계되었으며, 불필요한 설정 작업을 최소화하고, 내장된 기능을 활용하여 빠르게 애플리케이션을 배포할 수 있도록 도와줍니다.

1.2 Spring Boot의 주요 특징

  1. 내장 웹 서버 제공
    • Spring Boot는 기본적으로 내장 웹 서버(Embedded Web Server)를 포함합니다.
    • 기본적으로 Tomcat을 사용하며, 필요에 따라 Jetty 또는 Undertow로 변경할 수 있습니다.
    • 이 덕분에 별도의 애플리케이션 서버(Tomcat, JBoss 등)를 설치할 필요 없이 JAR 파일 형태로 애플리케이션을 실행할 수 있습니다.
  2. Spring 설정 자동화 (Auto Configuration)
    • Spring Boot는 애플리케이션의 설정을 자동으로 분석하여 필요한 Bean을 자동으로 등록해 줍니다.
    • 예를 들어, spring-boot-starter-web을 사용하면 자동으로 내장 Tomcat과 관련된 설정이 적용됩니다.
  3. Spring 스타터(Starter) 패키지 제공
    • Spring Boot는 개발자가 빠르게 프로젝트를 시작할 수 있도록 spring-boot-starter-xxx 형태의 스타터 패키지를 제공합니다.
    • 예를 들어, spring-boot-starter-web을 사용하면 웹 애플리케이션 개발에 필요한 기본적인 의존성을 한 번에 추가할 수 있습니다.
  4. 프로덕션 레벨의 다양한 기능 제공
    • Spring Boot는 모니터링, 보안, 상태 점검, 외부 설정 등 운영 환경에서 필요한 기능을 기본적으로 제공합니다.
    • Actuator를 사용하면 애플리케이션 상태를 쉽게 모니터링할 수 있습니다.

1.3 Spring Boot의 장점

  • 개발 생산성 향상
    • Spring Boot는 설정을 자동화하여 보일러플레이트 코드(Boilerplate Code, 반복되는 코드) 작성을 줄여주므로 개발 시간을 단축할 수 있습니다.
  • 내장 서버 제공
    • 별도의 외부 서버 설정 없이 애플리케이션을 실행할 수 있습니다.
  • Spring 생태계와의 쉬운 통합
    • Spring Data, Spring Security, Spring Cloud 등 다양한 Spring 기반 기술과 쉽게 연동할 수 있습니다.

2. Spring Cloud: 마이크로서비스 운영 및 배포 지원

Spring Boot를 활용하면 쉽게 마이크로서비스를 개발할 수 있습니다. 하지만 여러 개의 마이크로서비스를 운영하려면, 각 서비스 간 통신, 구성 관리, 로드 밸런싱, 장애 복구, 보안 등의 문제를 해결해야 합니다.

Spring Cloud는 이러한 마이크로서비스 운영에 필요한 다양한 기능을 제공하는 프레임워크입니다.

2.1 Spring Cloud란?

Spring Cloud는 마이크로서비스 아키텍처(MSA)를 쉽게 구현하고 운영할 수 있도록 도와주는 Spring 기반 프레임워크입니다. Spring Cloud는 여러 개의 독립적인 마이크로서비스를 손쉽게 배포하고 관리할 수 있도록 지원합니다.

2.2 Spring Cloud의 주요 기능

  • 서비스 디스커버리(Service Discovery)
    • 마이크로서비스는 동적으로 배포되므로, 각 서비스의 위치(IP, 포트 등)을 매번 고정할 수 없습니다.
    • Spring Cloud는 Eureka, Consul, Zookeeper와 같은 서비스 등록 및 검색 기능을 지원합니다.
  • API Gateway 및 로드 밸런싱
    • 마이크로서비스가 많아지면 이를 통합 관리할 API Gateway가 필요합니다.
    • Spring Cloud Gateway 또는 Netflix Zuul을 활용하면 API Gateway를 쉽게 구성할 수 있습니다.
    • 또한, Spring Cloud LoadBalancer를 이용하면 마이크로서비스 간 부하를 분산할 수 있습니다.
  • 분산 설정(Distributed Configuration)
    • Spring Cloud Config를 사용하면 애플리케이션 설정을 중앙 집중화하여 관리할 수 있습니다.
    • 이를 통해 개별 서비스의 환경 설정을 손쉽게 변경할 수 있습니다.
  • 분산 트랜잭션 및 메시징
    • 마이크로서비스 간 데이터 일관성을 유지하기 위해 SAGA 패턴, Kafka, RabbitMQ 등의 메시징 시스템과 통합할 수 있습니다.
  • 모니터링 및 장애 대응
    • Spring Boot Actuator 및 Micrometer를 활용하여 애플리케이션 상태를 모니터링할 수 있습니다.
    • Spring Cloud Circuit Breaker(Resilience4j)를 이용하면 장애 발생 시 자동으로 우회하는 기능을 구현할 수 있습니다.

3. Spring Boot와 Spring Cloud를 활용한 마이크로서비스의 이점

Spring Boot와 Spring Cloud를 활용하면 다음과 같은 이점을 얻을 수 있습니다.

빠른 개발 속도

  • Spring Boot의 자동 설정 기능을 활용하면 최소한의 코드로 마이크로서비스를 개발할 수 있습니다.

독립적인 배포 및 확장 가능

  • 개별 마이크로서비스를 독립적으로 배포할 수 있어 유지보수와 확장이 용이합니다.

유연한 클라우드 배포 가능

  • Kubernetes, Docker 등의 클라우드 환경과 쉽게 통합하여 운영할 수 있습니다.

운영 및 관리 용이

  • Spring Cloud가 제공하는 서비스 디스커버리, API Gateway, 로드 밸런싱, 모니터링 기능을 활용하면 대규모 마이크로서비스 시스템을 효과적으로 운영할 수 있습니다.

4. What are we building?

앞으로의 챕터들은 Spring Boot, Spring Cloud 및 기타 유용하고 현대적인 기술을 사용하여 완전한 마이크로서비스 아키텍처를 만드는 단계별 가이드를 제공합니다.

출처 : Spring Microservices in action. 2nd Edithion

🔹 아키텍처 개요

이 시스템은 Spring Boot 기반 마이크로서비스, Spring Cloud 기반 서비스 관리, Kafka를 통한 비동기 메시징, Prometheus 및 Grafana를 활용한 모니터링 등 다양한 기술이 조합된 형태로 구성되어 있습니다.

  1. 클라이언트(Client) 요청 흐름
    • 사용자는 Keycloak 서버에서 토큰을 발급받아 인증(Authentication)을 진행합니다.
    • 인증이 완료되면, 사용자는 Spring Cloud Gateway를 통해 요청을 전송합니다.
    • Spring Cloud GatewayEureka Service Discovery를 조회하여 Organization Service 또는 Licensing Service의 위치를 파악합니다.
  2. 조직 정보(Organization) 관리
    • Organization Service는 Keycloak에서 토큰을 검증한 후, 요청을 처리합니다.
    • 데이터베이스에서 조직 정보를 가져오거나 수정한 후, 클라이언트에게 응답을 반환합니다.
    • 동시에, 변경된 정보는 Kafka 토픽으로 발행(Publish)됩니다.
  3. 라이선스 정보(Licensing) 관리
    • Licensing Service는 Kafka에서 메시지를 구독(Subscribe)하여 조직 정보 변경을 감지합니다.
    • 변경된 데이터를 Redis(인메모리 캐시)에 저장하여 빠른 조회가 가능하도록 합니다.
    • 또한, 데이터베이스(Licensing Database)와 동기화하여 최신 상태를 유지합니다.
  4. 로깅 및 분산 추적(Distributed Tracing)
    • Zipkin을 통해 마이크로서비스 간의 호출 경로를 추적합니다.
    • Logstash, Elasticsearch, Kibana(ELK 스택)을 활용하여 로그를 수집, 저장, 조회할 수 있습니다.
  5. 모니터링 및 메트릭 수집
    • Spring Boot ActuatorPrometheus를 활용하여 애플리케이션 메트릭을 수집합니다.
    • Grafana를 사용하여 Prometheus에서 수집된 데이터를 시각적으로 분석할 수 있습니다.

🔹 사용된 주요 기술 및 역할

기술 역할
Spring Boot 마이크로서비스 개발을 위한 프레임워크
Spring Cloud Gateway API Gateway로서 클라이언트 요청을 서비스로 라우팅
Eureka (Service Discovery) 마이크로서비스 위치 관리 및 동적 검색
Keycloak 인증 및 인가(Access Token 발급)
Kafka 마이크로서비스 간 비동기 메시징
Redis 캐싱을 통해 빠른 데이터 조회 지원
Elasticsearch, Logstash, Kibana(ELK 스택) 로그 수집, 저장, 분석
Zipkin 분산 트랜잭션 추적 및 분석
Prometheus & Grafana 애플리케이션 모니터링 및 시각화

🔹 Summary

이 아키텍처는 Spring Boot 기반 마이크로서비스Spring Cloud를 통한 서비스 관리를 조합하여, 확장 가능하고 운영이 용이한 클라우드 네이티브 애플리케이션을 구축하는 방법을 설명합니다. Kafka를 활용한 이벤트 기반 통신, Zipkin을 통한 분산 트레이싱, Prometheus & Grafana를 활용한 모니터링 등을 통해 운영 효율성을 높이고, 장애 대응력을 향상시킬 수 있습니다.

이후 챕터에서 이러한 개념들을 하나씩 구현하며, 실제 애플리케이션을 구축하는 과정을 학습하게 될 것입니다. 🚀