PLOD

[Spring] MSA(MicroService Architecture) 본문

개발 공부/Spring framework

[Spring] MSA(MicroService Architecture)

훌룽이 2024. 8. 20. 09:49

MSA

  • 작고 독립적으로 배포 가능한 각각의 기능을 하는 서비스들로 구성된 아키텍쳐
  • 모놀리식 서비스에서 각각의 비즈니스 로직을 분리하여 개별 프로젝트로 생성한 뒤 가장 앞단에 API Gateway와 같은 분배기를 통해 각 서비스 서버에 요청을 분산하여 관리 
  • 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 자향 아키텍쳐
  • 서비스는 기능별로 구분
  • 서비스의 교체가 쉽다
  • 각 서비스의 최적인 개발언어 DB, HW , 소프트웨어 환경을 사용하여 구현
  • 각 서비스는 독립적인 배포가 가능

`

MSA 장단점

장점

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

단점

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

REST API

REST(Representational State Transfer)란 어떤 자원에 대하여 HTTP URL 및 HTTP Method를 통해 CRUD 연산을 수행하는 것

 

  • GET
    • URL에 데이터를 포함시켜 전송
    • 데이터를 헤더에 포함하여 전송
    • URL에 데이터가 노출되어 보안에 취약
    • 캐싱할 수 있음
    • READ 할 때 주로 사용
  • POST
    • URL에 데이터를 노출하지 않고 요청
    • 데이터를 바디에 포함
    • URL에 데이터가 노출되지 않아 GET 방식보다 보안이 높음
    • 캐싱할 수 없음
    • 노출되면 않되는 데이터를 전송해야 할 때(ex. 로그인) 할 떄 주로 사용

API Gateway

API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화 해주는 또다른 서버이다.  이 서버는 클라이언트 요청에 대해 어플리케이션 내부의 마이크로 서비스로 라우팅하는 역할을 수행 → 클라이언트 - 마이크로서비스 중개자 

 

  • API Gateway의 주요기능
    • 인증 및 인가
    • 로깅 및 모니터링
    • 부하 분산
  • API Gateway의 장점
    • 단일 진입점
    • 프로토콜 및 데이터 변환
    • 보안 및 권한 관리
    • 로깅과 모니터링
    • 부하 분산과 캐싱
    • 이중화 및 회복성
    • 버전 관리

스프링 부트

비지니스 로직 처리를 담당하기 위한 어플리케이션 서버. 즉 특정 경로에 대한 컨트롤러를 통해 요청 처리를 진행한다.

  1. Spring Cloud Gateway : SCG
    URL 주소에 대해서 아래 세부 경로에 따라 각각의 스프링 부트 어플리케이션에 분배하는 분배기 역할을 수행
  2. Spring Cloud Eureka Server
    모니터링 서버로 Eureka Client 설정을 해둔 서버를 Eureka Server에 띄워 줌 모니터링 기능과 함께 추가적으로 Spring Cloud Gateway에 목록을 전달하여 Gateway가 로드밸런싱 대상을 설정하도록 작업
  3. Spring Cloud Eureka Client
    Eureka Server에 등록되는 요소로 스프링 부트 어플리케이션과 같은 여러 스프링 프레임워크 서버에 설정이 가능하다.
  4. Spring Config Server
    변수 값들을 제공하는 서버로 특정 경로로 접근하면 미리 사전에 설정해둔 변수 값들을 제공 받을 수 있다. MSA를 구축하면 각각의 스프링 부트 어플리케이션에 application.properties에 값을 명시하는 것이 아닌 config server로 부터 데이터를 받아서 사용한다.
  5. Config Repository
    Config Server는 단순하게 데이터를 전달하는 매개체로 실제 데이터는 Config Server 뒷단에 깃허브 리포지토리와 같은 저장소를 물려서 사용한다.
  6. Spring Config Client
    Config Server로 부터 변수 데이터를 받기 위한 Client 서버 설정

     
Comments