학습 키워드
- MSA (Microservices Architecture)
- Service Discovery (Eureka)
- API Gateway (Spring Cloud Gateway)
- Load Balancing (FeignClient)
- Circuit Breaker (Resilience4j)
- Config (Spring Cloud Config)
학습 한 내용
기존 모놀리식은 서버 하나에 모든 기능을 넣었다면, MSA는 기능을 서비스 단위로 쪼개서 여러 서버에 나눠 올리는 것이다. 서버가 많아지면 관리가 힘든데, 이를 해결해 주는 필수 도구들을 정리했다.
Eureka (서비스 위치 저장소)
- 역할: API 서버들의 주소록
- 설명: 서버가 켜질 때 내 이름은
USER-SERVICE이고 주소는 192.168.0.5:8080라고 유레카에 등록한다. 다른 서비스들은 유레카만 보고 서로를 찾아간다.
Spring Cloud Gateway (단일 진입점)
- 역할: 서비스들의 정문
- 설명: 클라이언트는 수십 개의 서비스 주소를 알 필요 없다. 게이트웨이 주소 하나로 요청을 보내면, 게이트웨이가 주소를 보고 적절한 서비스로 연결해 준다. 여기서 JWT 인증 같은 공통 필터 처리를 적용할 수 있다.
FeignClient (서비스 간 호출 및 로드밸런싱)
- 역할: 서비스끼리 대화할 때 쓰는 무전기
- 설명: 주문 서버가 상품 서버의 데이터를 가져와야 할 때 사용한다. 인터페이스에 어노테이션만 붙이면 실제 호출 코드를 알아서 짜준다. 여러 대의 상품 서버가 있을 때 골고루 요청을 나눠주는 로드밸런싱 기능이 포함되어 있다.
Resilience4j (장애 대응 서킷 브레이커)
- 역할: 시스템의 두꺼비집
- 설명: 어떤 서비스 하나가 고장 나서 응답이 안 오면, 시스템 전체가 마비될 수 있다. 이때 Resilience4j가 고장 난 서버로의 요청을 차단하고 미리 준비한 대체 로직(Fallback)을 실행해 시스템 전체가 죽는 걸 막는다.
Spring Cloud Config (중앙 설정 관리)
- 역할: 서버 설정값들의 중앙 통제실
- 설명: DB 주소나 API 키 같은 설정값을 서버마다 일일이 수정하지 않고, 중앙 서버 한 곳에서 관리한다. 설정이 바뀌면 서버 재시작 없이 실시간으로 반영할 수 있다.
MSA는 결국 잘 쪼개고, 잘 연결하고, 잘 버티는 것 이 핵심이다. 스프링 클라우드가 제공하는 도구들은 이 복잡한 과정을 자동화해준다. 특히 Resilience4j처럼 서버 하나가 맛이 갔을 때 해당 요청을 차단하고 fallback으로 기본값을 주는 기능은 안정성이 중요한 프로젝트에 필수적이다.