Spring Cloud MSA

...·2024년 7월 4일

spring

목록 보기
4/6

MSA란?

Micro Service Architecture의 약자로, 서비스를 구축하는 방식 중 하나를 말한다.

Monolithic

하나의 프로젝트에 모든 비즈니스 로직과 설정 데이터들을 넣어 개발하는 방식이다.

MSA

각각의 비즈니스 로직을 분리하여 개별 프로젝트로 생성한 뒤 가장 앞단에서 API Gateway와 같은 분배기를 통해 각 서비스 서버에 요청을 분산하여 관리한다.

장단점

장점

  • 서비스별 스케일링 가능
  • 서비스별 다른 프레임워크 사용 가능
  • 하나의 서비스가 off 되더라도 나머지 동작 가능
  • 부분적으로 로직 업데이트 가능

단점

  • 초기 구성의 난이도
  • 시스템이 돌아가지만 특정 서비스가 off되면 재기능을 못할 수 있음
  • 서버 간 호출 비용
  • 분산 관리

MSA의 여러 요소

  • 서비스 로직
  • 게이트웨이
  • 모니터링 서버
  • 변수관리 서버

스프링에서 MSA

Spring Cloud Gateway: SCG

URL 주소에 대해서 아래 세부 경로에 따라 스프링 부트 애플리케이션에 분배하는 분배기 역할을 수행한다.

스프링 클라우드 게이트웨이는 MSA 가장 앞단에서 클라이언트들로부터 오는 요청을 받은 후 경로와 조건에 알맞은 마이크로서비스 로직에 요청을 전달하는 게이트웨이이다.

게이트웨이는 개념적으로는 아주 단순하지만 가장 앞단에서 무중지 상태로 모든 요청을 받아야하기 때문에 설정하기에 까다롭다.

Spring Cloud Gateway의 특성

스프링 부트, Eureka, Config와 같은 서비스들은 블로킹 기반으로 모두 톰캣 엔진들 사용했다.
하지만 게이트 웨이의 경우 비즈니스 로직 처리보단 단순하게 지나가는 통로, 즉 I/O 처리를 중점적으로 진행하기 때문에 논 블로킹 방식으로 동작하는 WebFlux와 NettyEngine을 사용한다.

WebFlux는 기존에 스프링 부트에서 사용했던 JPA와 같은 블로킹 방식의 의존성들을 모두 사용하지 못한다.

Actuator

Actuator는 스프링 애플리케이션의 기능을 엔드 포인트로 제공하는 의존성이다. 이 Actuator를 활용하여 가동 중인 스프링 클라우드 게이트웨이에 새로운 라우팅을 추가하고 삭제할 수 있다.

global filter

스프링 클라우드 게이트웨이에서 글로벌 필터는 모든 라우팅에 대해서 적용되는 필터이다.

클라이언트의 요청은 필터 -> 마이크로서비스 -> 필터 형태로 이동되며 같은 필터라도 마이크로서비스를 접근하기 이전이면 pre, 이후면 post라고 명명한다.

각각의 필터는 Order 값을 가질 수 있으며 pre 필터의 경우 Order 값이 작을수록 빠르게 동작하며, post 필터의 경우 Order 값이 작을수록 늦게 동작한다.

local filter

스프링 클라우드 게이트웨이에서 지역 필터는 특정 마이크로서비스 라우팅에 대해서만 동작을 진행하는 필터이다.

Spring Cloud Eureka

모니터링 서버로 Eureka Client 설정을 해둔 서버를 Eureka Server에 띄워준다.
모니터링 기능과 함께 추가적으로 Spring Cloud Gateway에 목록을 전달하여 Gateway가 로드밸런싱 대상을 설정하도록 작업한다.

Eureka 서버는 단순하게 MSA를 구성하는 마이크로 서비스들을 모니터링하는 감시자 서버의 역할을 한다고 볼 수 있지만, 깊게 보면 현재 존재하는 마이크로 서비스들을 Gateway에게 알려주어 시간과 부하에 따라 유동적으로 스케일 아웃되는 서버들을 모두 가용할 수 있도록 하는 역할을 수행한다.

Spring Cloud Eureka Client

Eureka Server에 등록되는 요소로 스프링 부트 애플리케이션과 같은 여러 스프링 프레임워크 서버에 설정이 가능하다.

Spring Config Server

변수 값들을 제공하는 서버로 특정 경로로 접근하면 여러 사전에 설정해둔 변수 값들을 제공 받을 수 있다.
MSA를 구축하면 각각의 스프링 부트 어플리케이션에 application.properties에 값을 명시하는 것이 아닌 config server로부터 데이터를 받아서 사용한다.

Config Repository

Config Server는 단순하게 데이터를 전달하는 매개체로 실제 데이터는 Config Server 뒷단에 깃허브 레포지토리와 같은 저장소를 올려서 물려서 사용한다.

Spring Config Client

Config Server로부터 변수 데이터를 받기 위한 Client 서버 설정

참고: 스프링 클라우드 MSA

profile
주니어 백엔드 개발자

0개의 댓글