코딩공부/MSA

[Spring Cloud] Spring Cloud 프로젝트 개요

내일의기대 2024. 9. 10. 20:44

본 글은 공식사이트에 설명되 있는 내용을 토대로 Spring Cloud 프로젝트의 전체적인 개요에 대해서 정리한 글입니다.

Spring Cloud란

Cloud 환경의 어플리케이션을 "cloud-native"하게 개발할때 외부 설정, stateless, 로깅, 서비스간 연결등 다양하게 고려해야 할 사항이 많습니다.
Spring Cloud 프로젝트는 클라우드 어플리케이션을 개발할때 필요한 다양한 서비스를 포함하고 있어 편리한 개발에 도움을 줍니다.

Spring Cloud 구조 하이라이트

 


Spring Cloud의 구조는 위 그림과 같습니다. 먼저 Client 요청은 API Gateway를 통해 뒷단에 있는 마이크로 서비스로 전달이 됩니다. 이때 어느 서비스로 전달할지는 Service registry를 통해서 라우팅 정보를 얻습니다. 그리고 Distributed tracing을 통해 분산되어 있는 서비스들의 로그가 수집 및 추적됩니다. 마지막으로 마이크로 서비스의 설정정보는 Config server를 통해 외부 설정을 할 수 있는 구조로 설계되어 있습니다.

Service discovery

클라우드 환경에서 서비스의 정확한 위치에 대해서 알기 힘듭니다. Netflix Eureka와 같은 servcie registry는 여기에 활용될 수 있습니다. Spring Cloud에서는 Eureka, Consul, Zookeeper, Kubernetes와 같은 유명 registry의 DiscoveryClient 구현을 제공합니다. 또한 서비스간 부하 분산을 위한 Spring Cloud Load Balancer를 제공합니다.

API gateway

Server와 Client가 많은 Cloud 구조에서는 API Gateway가 유용한 경우가 많습니다. Gateway는 메시지 보호와 전달, 로드 조절과 같은 많은 유용한 것들을 할 수 있습니다. Spring Cloud Gateway는 API Layer의 정확한 조정을 할 수 있게 하고, service discovery와 client-side 로드밸렁싱 솔루션을 쉽게 설정 및 유지보수 할 수 있게 통합합니다.

Cloud configuration

클라우드 환경에서는 설정 파일이 어플리케이션에 쉽게 포함되서는 안됩니다. 설정이 여러 어플리케이션 / 환경 / 서비스 인스턴스에 적용될 수 있어야 하고 다운타임 없이 동적으로 변경되도록 유연해야합니다. [Spring Cloud Config]는 이러한 부담을 쉽게 할 수 있도록 설계되었고 Git과 같은 버전 컨트롤 시스템과 통합을 제공하여 설정을 안전하게 유지합니다.

Circuit breakers

분산 시스템은 신뢰하기 힘들 수 (unreliable) 있습니다. 요청은 타임아웃이나 fail을 마주할 수 있습니다. Circuit breaker는 이러한 이슈를 다루며 Spring Cloud Circuite Breaker 세 가지 유명한 선택지를 제공합니다: Resilience4J, Sentinel, Hystrix.

Tracing

분산 어플리케이션을 디버깅하는 것은 복잡하고 시간이 많이드는 일입니다. 어떤 장애든, 여러 독립 서비스간의 정모를 모아서 추적해야하는 일이 있을 수 있습니다. Micrometer Tracing은 여러분의 어플리케이션을 예측가능하고 반복가능한 방식으로 측정할 수 있게합니다. 또한 OpenZipkin BraveOpenTelemetry와 함께 사용하여 발생할 수 지연문제를 없앨 수 있습니다.

Testing

클라우드에서는 믿을 수 있고 신뢰 가능하고 안정적인 API의 장점을 얻을 수 있지만 이를 달성하기 위해서는 쉽지않은 과정을 겪어야합니다. 계약기반 테스트 (Contract-based Testing)는 고성과 팀이 목표 달성을 위햇 자주 사용하는 기술 중 하나입니다. 이는 API 컨텐츠를 공식화하고 이를 중심으로 테스트를 구축하여 코드가 검사받도록 합니다.

Spring Cloud Contract은 REST와 메시지기반 API들에 대한 계약기반 테스팅을 제공하고 컨트렉트는 Groovy, Java, Kotlin으로 작성될 수 있습니다.

마치며

Spring Cloud에는 Cloud 환경에서 어플리케이션을 구성할 때 도움이 되는 많은 프로젝트를 포함하고 있음을 알게 되었습니다. 문서를 보던 도중 계약기반 테스트(Contract-based Testing)라는 MSA에서 사용하는 생소한 테스트 개념을 알게 되었습니다. 앞으로 Spring Cloud에 대해서 조금 더 깊게 알아갈 예정입니다.