인생을 코딩하다.

[MSA] MSA(MicroService Architecture)란 무엇인가? 본문

Spring

[MSA] MSA(MicroService Architecture)란 무엇인가?

Hyung1 2021. 9. 16. 21:59
728x90
반응형

MSA(MicroService Architecture)란 무엇일까요?

시스템을 여러개의 독립된 서비스로 나눠서, 이 서비스를 조합함으로써 기능을 제공하는 아키텍쳐 패턴입니다.

 

하나의 기능을 구현 하는데, 여러 개의 서비스를 조합하여 기능을 제공합니다. -> EX) 주문하기 : 사용자 정보 조회, 상품 정보 조회, 신규 주문 생성

왜 MSA(MicroService Architecture)를 사용할까요?

 

위의 그림의 왼쪽은 Monolitic 구조입니다. Monolitic 구조에는 아래와 같은 문제점이 존재합니다.

 

  • 단일 Container에 여러 기능을 통합하여 구성
  • 단단한 결합을 통하여 Service를 연결
  • 전체 시스템이 하나의 Project로 구성되어 개발 및 빌드를 통합적으로 진행하여야 함
  • 특정 서비스 및 Database에 치명적인 오류가 발생 할 경우 전체 서비스에 장애 발생
  • 시스템 다중화 시 전체 시스템에 대한 다중화를 진행

기업에서 여러 팀들이 각기 다른 서비스를 개발할텐데  Monolitic 구조로 개발을 하면 유지보수 비용, 개발 생산성, 커뮤니케이션 비용 등이 많이 증가하겠죠?

 

평소에도 Monolitic 구조로 개발을 할 때, 위와 같은 문제점이 있다고 느꼈고 위의 문제를 "어떻게 해결해야 할까?"에 관해 많은 고민을 했었습니다. 그리고 MSA(MicroService Architecture)에 관해 알게되었는데요, 제가 고민했던 여러 사항들을 담고있는 아키텍쳐 설계 패턴이라고 느꼈습니다.

 

따라서, 저는 MSA(MicroService Architecture)를 통해 위의 문제점을 해결할 수 있다고 생각하고,  현재 MSA에 관해 공부를하며 글을 작성하고 있습니다.

 

위 그림에서 오른쪽은 MSA(MicroService Architecture)입니다. 각각의 Container를 MicroService로 부르도록 하겠습니다. MSA(MicroService Architecture) 각 서비스 간 HTTP를 통해 조합되는데요, 아래와 같은 장점들이 존재합니다.

 

  • 독립된 배포 단위
  • 각 서비스는 쉽게 교체 가능
  • 각 서비스는 기능 중심으로 구성됨 EX) FrontEnd, 추천, 정산, 상품, 주문 등
  • 각 서비스에 적합한 프로그래밍 언어, 데이터베이스, 환경으로 만들어집니다.
  • 서비스는 크기가 작고, 상황에 따라 경계를 정하고, 자율적으로 개발되고, 독립적으로 배포되고, 분산되고, 자동화된 프로세스로 구축되고 배포됩니다.
  • 각각의 MicroService에서 발생하는 장애가 전체 시스템 장애로 확장되지 않습니다.

API Gateway가 필요한 이유는 무엇일까요?

여러 클라이언트가 여러 개의 서버 서비스를 각각 호출하게 된다면 매우 복잡한 호출 관계가 만들어질 것입니다. 이러한 복잡성을 통제하기 위한 방법이 필요합니다. 한 가지 해결책은 API 게이트웨이 입니다.

위에 User Interface와  MicroService 사이에 위치하는 API Gateway의 역할은 무엇일까요?

클라이언트가 다양한 서비스에 접근하기 위해서는 단일 진입점을 만들어 놓으면 여러모로 효율적이게 됩니다. 

 

다른 유형의 클라이언트에게 서로 다른 API 조합을 제공할 수도 있고, 각 서비스에 접근할 때 필요한 인증/인가 기능을 한 번에 처리할 수도 있습니다. 또한 정상적으로 동작하던 서비스에 문제가 생겨 서비스 요청에 대한 응답 지연이 발생하면 정상적인 다른 서비스로 요청 경로를 변경하는 기능이 작동되게 할 수도 있습니다.

 

정리하자면 API 게이트웨이는 다른 서비스와 연계해서 다음과 같은 기능을 제공합니다.

  • 레지스트리 서비스와 연계한 인증 동적 라우팅, 로드 밸런싱
  • 보안, 권한  서비스와 연계한 인증/인가
  • 로그 집계 서비스와 연계한 로깅, ex) 소비자 정보, 요청/응답 데이터
  • 메트릭 ex)에러율, 평균/최고 지연시간, 호출 빈도 등
  • 트레이싱 서비스와 연계한 서비스 추적 ex) 트래킹 ID 기록
  • 모니터링 서비스와 연계한 장애 격리(서킷 브레이커 패턴)

 

이번 글에서는 MSA가 무엇인지, 왜 사용하는지, API Gateway가 왜 필요한지, 역할이 무엇인지 알아보았습니다.

 

다음 글에서는 각기 다른 IP / Port/ instanceId를 가지고 있는 MicroService(인스턴스 서버)들의 정보를 레지스트리에 등록할 수 있게 하고, MicroService의 동적인 탐색과 로드밸런싱을 할 수 있게 도와주는 Spring Cloud Eureka에 관해 알아보도록 하겠습니다. 감사합니다.

 

 

728x90
반응형
Comments