백엔드/Spring Clould

스프링 클라우드의 주요 구성요소: 기본 개념과 용도

P_eli 2024. 11. 9. 15:22
728x90
반응형

스프링 클라우드(Spring Cloud)는 마이크로서비스 아키텍처(MSA)를 구축할 때 유용하게 사용되는 도구들을 모아놓은 프레임워크입니다. 여러 서비스들이 독립적으로 개발 및 배포되면서도 서로 통합되어 일관된 시스템을 이루도록 돕죠. 이를 가능하게 하는 주요 모듈들로는 Spring Cloud Config, Eureka, Zuul, Ribbon, 그리고 Hystrix 등이 있습니다. 각 모듈이 무엇을 하는지, 언제 어떻게 사용되는지 살펴보겠습니다.

 

1. Spring Cloud Config: 분산 설정 관리

기본 개념: Spring Cloud Config는 중앙 집중식 구성 서버입니다. 여러 마이크로서비스의 설정 파일을 중앙에서 관리하고, 필요할 때마다 동적으로 설정 값을 가져올 수 있게 합니다.

용도: 마이크로서비스는 서비스 개수가 많고 각기 다른 설정을 필요로 하기 때문에 일일이 설정 파일을 관리하는 것이 매우 번거롭습니다. Spring Cloud Config를 통해 설정을 한 곳에서 관리하면, 모든 서비스가 변경된 설정을 쉽게 반영할 수 있습니다.

 

사용 예시
여러 마이크로서비스가 데이터베이스의 URL이나 보안 키를 필요로 할 때, 이 설정을 중앙 서버에 저장해두고 각 서비스가 부팅 시 해당 값을 가져오도록 합니다. 예를 들어, 개발 환경과 운영 환경이 다르다면 환경별로 다른 설정을 Config 서버에 저장해두고 필요에 따라 가져올 수 있습니다.

 

2. Eureka: 서비스 등록과 발견

기본 개념: Eureka는 Netflix에서 제공하는 서비스 등록 및 발견(Discovery) 서버입니다. 각 서비스가 자신을 Eureka 서버에 등록하고, 다른 서비스는 필요 시 이곳에서 대상 서비스의 위치를 찾아 연결할 수 있게 됩니다.

용도: 마이크로서비스는 끊임없이 추가되거나 삭제되며, IP나 포트가 변경될 수 있습니다. Eureka를 통해 서비스가 자동으로 서로를 찾을 수 있게 해주면, 별도의 설정 없이도 마이크로서비스가 서로 소통할 수 있습니다.

 

사용 예시
예를 들어, 고객 정보 서비스와 주문 서비스가 별도로 운영될 때, 주문 서비스가 고객 정보 서비스를 필요로 하면 Eureka를 통해 현재 위치를 조회하고 연결할 수 있습니다. 각 서비스가 등록과 조회를 통해 동적으로 연결을 관리할 수 있으므로 매우 편리합니다.

 

3. Zuul: API Gateway

기본 개념: Zuul은 외부의 요청을 내부 마이크로서비스로 라우팅하고, 이를 필터링하여 제어하는 API 게이트웨이입니다. 모든 클라이언트 요청이 Zuul을 거쳐 원하는 서비스로 전달됩니다.

용도: API 게이트웨이는 보안, 인증, 로깅, 부하 분산 등의 다양한 기능을 수행하며, 외부의 접근을 제어하고 서비스로의 직접 접근을 막습니다. 이를 통해 보안을 강화하고, 서비스 간 경로를 일원화하여 관리가 용이해집니다.

 

사용 예시
쇼핑몰 웹 애플리케이션이 여러 개의 마이크로서비스(상품 서비스, 결제 서비스, 리뷰 서비스 등)로 구성되어 있다면, 모든 클라이언트 요청을 Zuul이 받아 각각의 서비스로 전달합니다. 이때 요청에 인증 필터를 추가해 로그인된 사용자만 서비스에 접근하도록 할 수 있습니다.

 

4. Ribbon: 클라이언트 부하 분산

기본 개념: Ribbon은 Netflix에서 제공하는 클라이언트 부하 분산 도구입니다. 여러 인스턴스 중에서 특정 로직에 따라 하나를 선택해 요청을 전송합니다.

용도: 마이크로서비스가 여러 서버에 분산 배포될 경우, 클라이언트 요청이 모든 서버로 고르게 분배되어야 합니다. Ribbon은 이런 부하를 자동으로 분산하여 특정 서버에만 과부하가 걸리지 않도록 합니다.

 

사용 예시
고객 서비스가 3개의 인스턴스로 배포되었을 때, Ribbon이 각각의 인스턴스에 순차적으로 요청을 보내거나 랜덤하게 요청을 분배합니다. 이를 통해 시스템 과부하를 줄이고 서비스의 가용성을 높입니다.

 

5. Hystrix: 장애 격리와 복원력

기본 개념: Hystrix는 서킷 브레이커(Circuit Breaker) 패턴을 구현한 도구로, 특정 서비스에 장애가 발생했을 때 해당 서비스에의 요청을 차단하여 전체 시스템으로의 확산을 막습니다.

용도: 마이크로서비스는 다양한 서비스에 의존하므로, 하나의 서비스가 실패할 경우 전체 시스템이 영향을 받을 수 있습니다. Hystrix는 장애 발생 시 그 요청을 차단하고, fallback(대체 처리)을 제공해 시스템의 안정성을 높입니다.

 

사용 예시
결제 서비스가 과부하로 인해 응답이 지연되거나 장애가 발생하면, 주문 서비스는 결제 서비스를 통해 결제 내역을 확인하지 않고 일정 시간 동안은 대체 응답을 제공하도록 설정할 수 있습니다. 이를 통해 사용자 경험을 보호할 수 있습니다.

 

스프링 클라우드 주요 모듈의 관계 설명

Spring Cloud는 마이크로서비스 아키텍처에서 서로 독립적인 서비스들이 원활하게 통신하고, 안정성을 유지하도록 다양한 도구를 제공합니다. 각 구성 요소가 어떤 역할을 하며, 어떻게 상호작용하는지 하나씩 살펴보겠습니다.

  • Spring Cloud Config
    Spring Cloud Config는 각 마이크로서비스가 필요로 하는 설정 정보를 중앙에서 관리합니다. 여러 서비스가 각각의 설정 파일을 따로 관리하는 대신, Config 서버를 통해 공통된 설정을 중앙에서 관리하고, 각 서비스는 필요할 때 Config 서버로부터 설정 정보를 가져올 수 있습니다. 이를 통해 설정 관리의 효율성을 높일 수 있습니다.
  • Eureka
    Eureka는 서비스 등록과 검색을 담당하는 모듈로, 서비스들이 자신의 위치(IP, 포트 등)를 Eureka 서버에 등록하고, 다른 서비스가 이를 조회하여 쉽게 위치를 찾을 수 있게 합니다. 마이크로서비스 환경에서는 서비스들이 유동적이고 위치가 변경될 수 있기 때문에, Eureka를 통해 동적으로 서비스 위치를 찾는 것이 중요합니다.
  • Zuul
    Zuul은 외부 클라이언트 요청을 내부의 마이크로서비스로 전달하는 API 게이트웨이 역할을 합니다. 모든 요청이 Zuul을 거쳐 각 서비스로 전달되며, 여기서 보안, 인증, 로깅, 부하 분산 등의 작업을 수행할 수 있습니다. 이를 통해 외부에서 내부 서비스로의 직접 접근을 막고, 중앙에서 통제할 수 있는 이점을 제공합니다.
  • Ribbon
    Ribbon은 클라이언트 측 부하 분산 도구로, 여러 서비스 인스턴스가 있을 때, 각 인스턴스에 요청이 고르게 분배되도록 합니다. Ribbon은 각 서비스의 상태를 확인하며 특정 서버에만 요청이 집중되지 않게 하여, 부하 분산을 통한 성능 최적화를 돕습니다.
  • Hystrix
    Hystrix는 장애 격리와 복원력을 제공하는 모듈로, 서킷 브레이커(Circuit Breaker) 패턴을 구현하여 특정 서비스가 과부하나 장애 상태일 때, 그 서비스로의 요청을 차단해 전체 시스템으로 장애가 확산되지 않도록 보호합니다. 필요한 경우 대체 응답(fallback)을 제공하여 서비스 안정성을 높입니다.

이처럼 Spring Cloud의 주요 모듈들은 각자의 역할을 통해 마이크로서비스 간의 연결과 통신을 효율적으로 유지하고, 장애 상황에서도 시스템의 안정성을 보장하는 데 기여합니다.

728x90
반응형