728x90

싸피 프로젝트 때 MSA 구조를 적용해 개발해 봤지만, 그 개념만 대충 알고 있어서 다시 한번 정확히 MSA가 어떤 것인지 알아보고자 강의를 보고 정리해봤다. 

강의는 네이버 클라우드 플랫폼의 [Talk&Talk] 누구나 쉽게 이해할수 있는 마이크로서비스 아키텍처(MSA) #1편을 참고했다. 

https://www.youtube.com/watch?v=8d4h7K_Fq-0

 


MSA가 무엇인지 설명하기 위해서는 모놀리식 아키텍쳐를 아는 것이 중요하다. 

모놀리식 아키텍쳐란 어플리케이션을 개발할 때 (여기서 어플리케이션은 하나의 시스템) 하나의 어플리케이션 안에 모든 서비스의 비지니스 로직이 들어가있는 구조이다. 

MSA는 모놀리식의 반대 구조인데, 예를 들어 쇼핑몰을 개발한다고 생각해보자. 쇼핑몰에는 사용자 관리, 상품 관리, 주문 관리 등이 있다. 

이것을 모놀리식 아키텍쳐과 MSA로 각각 표현하면

출처:[Talk&Talk] 누구나 쉽게 이해할수 있는 마이크로서비스 아키텍처(MSA) #1편

한 마디로 정리하자면.. 

모놀리식 아키텍쳐 -> 애플리케이션 안에 모든 비지니스 로직이 다 들어가 있는 구조

MSA -> 애플리케이션에 각각의 서비스들을 쪼개어서 구성 인 것이다. 

 

따라서 MSA 구조는 서비스를 비지니스 경계에 맞게 세분화하고, 서비스 간 통신은 네트워크 호출을 통해 진행하여 확장 가능하고 회복적이며 유연한 어플리케이션을 구성하는 것이다. 

내/외부적으로 서비스를 호출할 때는 API를 통해 호출하고, 특히 외부에서 호출할 때에는 API gateway를 두어 인증과 API에 대한 정책을 관리할 수 있도록 한다. 

 

그렇다면 이와 같은 MSA가 왜 인기있는 것일까? 

MSA 구조는 모놀리식의 반대이기 때문에 모놀리식의 단점에 대해 알면 MSA를 왜 사용하는지 알 수 있다. 

모놀리식의 단점은 크게 4가지로 나눌 수 있다. 

  1. 기존의 모놀리식 방식은 sw의 모든 구성요소가 한 프로젝트에 합쳐져 있어 큰 변화에 대한 대응이 어렵고, 새로운 기능 추가 및 업데이트에 어려움이 있다.
  2. 여러 역할을 하는 시스템이 하나의 sw로 집합되어 있어, 특정 부분에 문제가 생길 시 큰 장애로 이어질 수 있다.
  3. 여러 역할을 하는 시스템이 하나의 서버에 함께 올라가있기에, scale-out시 필요없는 자원이 증가된다.
  4. MSA 구조를 사용하면 민첩하고 손쉬운 배포 및 업데이트가 가능하다. (느슨한 결합)

이를 보면 모놀리식은 유연성에 한계가 있고, 여러 기능이 뭉쳐 강하게 결합되어 있다는 단점이 있다. 

바로 이러한 것들을 해결할 수 있는 방법이 MSA를 사용하는 것이다. 

 

그렇다면 MSA가 무엇인지 알아보았으니, 개발을 할 때 MSA 구조를 구성하기 위해서는 어떤 것들을 고민해야 할까? 

MSA 구조를 사용하면 서비스들이 분산되기 때문에 이러한 분산화된 서비스들을 통합 모니터링, 환경변수 관리하는 구성요소 관리가 중요하다.

MSA를 구조를 구성하기 위해서는 다음과 같은 부분들을 고려해야 한다. 

 

  1. Config management
    1.  환경 변수를 별도의 객체로서 관리
  2. Service discovery 
    1. 각각의 서비스가 서로를 호출할 때, 서비스에 대한 위치 정보를 관리할 수 있는 객체
  3. Api management
    1. 외부에서 요청을 할 때 허용된 요청, 트래픽 관리 등 API를 관리하는 것
  4. Centralized logging
  5. Centralized monitoring
    1. 서비스는 분산되어 있지만, 결국 모니터링은 하나의 대시보드 형태로 중앙집중화해서 관리하는 것이 필요하다. 
  6. Distributed tracing
    1. 마이크로 서비스간의 호출 추적
  7. Reslilence & falut tolerance
    1. 서비스가 체인에 연결된 전체 서비스에 파급 효과를 발생시킬 수 있기 때문에 서비스간 서킷 브레이커를 둬 서비스가 응답하지 않으면 다른 메세지를 보내는 등 서비스 하나의 장애가 전체적인 장애로 연결되지 않도록 해야한다.
  8. Auto-scaling & self-healing
    1. 자동 스케일링, 복구 자동화를 위한 통합 서비스 관리 효율화 

 

MSA 구조를 구현할 수 있는 기술에는 다양한 것들이 있는데, 가장 많이 사용하는 기술들은 spring cloud, 쿠버네티스 등이 있다. 이 둘의 특징이 상이하며, 어떤 것이 정답인지는 알 수 없다. 자신에게 맞는 기술을 사용하는 것이 중요할 것이다.

 

MSA 를 도입한 가장 유명한 기업에는 Netfilx가 있는데, Netfilx는 높은 재생 품질을 다운타임 없이 서비스 하는 것을 목표로 MSA 구조를 채택했다. 

국내 기업의 적용 사례에는 배달의 민족, 11번가 등이 있다. 

 

그렇다면 MSA를 구축하면서 직면할 수 있는 어려움은 무엇이 있을까?

사실 웬만큼 복잡한 시스템이 아니고서야 모놀리식이 더 낫고, 시스템의 복잡도가 높아야지 모놀리식 대비 MSA의 생산성이 높다라는 결과가 있다. 따라서 정말 복잡한 시스템이 아니라면 오히려 모놀리식이 나을 수도 있다는 얘기가 있어 MSA 구조가 만능이 아니라는 것을 알 수 있다. 

 


출처: https://www.youtube.com/watch?v=8d4h7K_Fq-0 [[Talk&Talk] 누구나 쉽게 이해할수 있는 마이크로서비스 아키텍처(MSA) #1편]

https://wonkooklee.github.io/thumbnail_maker/ [썸네일]

728x90

'Computer Science > Web programming' 카테고리의 다른 글

[Web] SSR vs CSR  (4) 2022.08.30
Spring 버전별 특징  (2) 2022.08.19
[Web] TDD 방법론  (1) 2022.05.24
[Web] REST vs RESTful vs REST API(RESTful API)  (2) 2021.12.31
[Web] DTO와 VO의 차이  (1) 2021.12.17
복사했습니다!