데브허브 | DEVHUB | Mastering Challenges of Cloud-Native Architectures With Spring by Timo Salm @ Spring I/O 2025Mastering Challenges of Cloud-Native Architectures With Spring by Timo Salm @ Spring I/O 2025
- 이 강연은 5년 전 만들어졌음에도 클라우드 네이티브 아키텍처의 도전 과제에 대한 지속적인 관련성을 강조합니다. ⏳
- 발표자는 Broadcom의 Spring 전문가로, Spring, RabbitMQ 등 오픈소스 프로젝트의 주요 기여자입니다. 🧑💻
- 마이크로서비스는 복잡한 분산 시스템으로, 연쇄 장애, 디버깅 어려움, 사용자 경험 저하 등의 도전 과제를 안고 있습니다. 🧩
- 예시 애플리케이션은 주문, 제품(동기 REST), 배송(비동기 RabbitMQ) 서비스로 구성된 공급망으로, 일반적인 마이크로서비스 통신 패턴을 보여줍니다. 🚚
- Spring Boot는 자동 구성으로 개발 생산성을 높이고, Spring Framework는 IoC 컨테이너와 환경 추상화를 제공합니다. 💡
- Spring Cloud는 마이크로서비스 및 분산 애플리케이션의 복잡한 패턴을 해결하기 위한 구현을 제공합니다. 🌐
- 12-Factor App 방법론은 2012년에 만들어진 현대 분산 애플리케이션을 위한 모범 사례 프레임워크입니다. 📖
- 코드베이스 (Factor 1): 모든 코드는 Git과 같은 버전 관리 시스템에 추적되어야 하며, 모노레포와 멀티레포의 장단점(콘웨이의 법칙)을 고려해야 합니다. 🗄️
- 의존성 (Factor 2): 모든 의존성은 명시적으로 선언되어야 하며, Spring Boot BOM과 스타터는 버전 호환성을 자동으로 관리하여 개발을 용이하게 합니다. ⛓️
- 설정 (Factor 3): 코드로 부터 설정을 분리해야 하며, Spring Cloud Config는 Git과 같은 외부 소스에서 환경별 설정을 중앙 집중식으로 관리합니다. 🛠️
- 동적 설정 변경:
@RefreshScope 어노테이션과 액추에이터 엔드포인트를 통해 애플리케이션 재시작 없이 런타임에 설정을 변경할 수 있습니다. ♻️
- 백킹 서비스 (Factor 4 & 5): 데이터베이스와 같은 백킹 서비스는 연결된 리소스로 취급되어야 하며, 현대 애플리케이션은 무상태(stateless)로 설계되어 수평 확장성과 고가용성을 확보합니다. 💾
- 서비스 견고성: 백킹 서비스 및 외부 서비스와의 통신에서 타임아웃, 재시도 패턴 등을 통해 시스템의 견고성을 확보하는 것이 중요합니다. 🛡️
- 로드 밸런싱: Kubernetes 서비스와 DNS는 분산 시스템에서 요청을 여러 인스턴스에 효율적으로 분배하는 데 사용됩니다. ⚖️