Skip to content

MSA

마이크로 서비스 아키텍처

글을 시작할 때 개념부터 설명하는 것은 정말 하기 싫은 일중의 하나입니다. '~~입문' 이런 책이 떠오르기 때문이죠.

아무튼 클라우드 관련 또는 엄청나게 많은 트래픽을 감당해야 하는 서비스에서 지난 몇년간 가장 빈번히 언급된 기술용어중의 하나가 Microservices Architecture(MSA)입니다. 혹자는 이것이 왜 주목을 받아야 하는지 모르겠다고 불평도 합니다만, 제 개인적 생각은 클라우드와 빅데이터 업계에서는 향후 10년간은 좀더 주의를 기울여야 할 기술분야가 될 것으로 판단합니다.

좀 과장해서 이야기하면 앞으로 나오는 모든 서비스는 MSA를 적용하지 않으면 개발 품질에서 뒤쳐진 것으로 평가될 수 있습니다.

MSA는 가장 쉽게 설명하면 전체 서비스를 확장하는 것 보다는 잘게 쪼개진 서비스들을 필요한 부분만 확장하는 것이 유리하다는 아이디어에서 출발한 소프트웨어 아키텍처입니다. 쉬운 개념이기는 한데 정확한 그림이 그려지지 않는 기술용어입니다. CBD가 개발방법론으로 처음 소개되어 주목받았을 때를 기억하는 분들이라면 비슷한 상황이라 평가할 수도 있습니다. 더 나아가 MSA는 SOA를 떠올리게 합니다. 서비스라는 단어를 사용하고 RESTful-API이기는 하지만 인터페이스를 강조하기 때문입니다. SOA의 실패 원인을 전문가들은 어떻게 보는지 모르겠지만 기존에 사용하던 소스를 전부 또는 상당부분 변경해야 한다는 것과 인터페이스 허브(ESB)로의 과도한 자원집중 전체 시스템 부담으로 작용하였기 때문으로 저는 판단합니다.

MSA는 SOA와 다른 접근법을 취합니다. 인터페이스 허브를 물론 둡니다만 API-Gateway는 RESTful API를 지원하기 때문에 가볍고 확장가능합니다. 잘 동작하는 오픈소스들이 많이 있습니다. 그리고 기술 요소 외연이 한층 넓습니다. 그 만큼 다양한 기술이슈와 연관되어 있으며 처음 접하는 낯선 용어들로 점철되어 있습니다.

MSA를 지원하는 기술들

PaaS 와 Containerlizing

사실 MSA가 생각보다 단순한 개념이기는 하지만 구현하기가 녹녹치 않습니다. 여러 문제를 맞이하게 되는데 첫번째가 Scale-Out될 때 서비스의 무중단과 실행 속도입니다. 이런 요구사항을 수용하기 위해서 PaaS 의 등장과 함께 Docker의 출현으로 많은 개발자들이 어플리케이션을 Dockerizing 하기 시작하면서 MSA가 다시 주목받기 시작했습니다. 왜냐하면 OS를 기동시킬 필요가 없는 컨테이너의 특성상 Scale-Out 이 수초 이내에 이루어질 수 있는데 이 컨테이너안에서 동작하는 어플리케이션이 Monolithic 하게 개발되어서는 무거워서 제대로 된 서비스가 불가능한 문제가 발생했기 때문입니다.

국내에도 매우 유명한 정부시스템중 일부가 PaaS 환경으로 전화될 때 Monolithic으로 구현되어 성능 등 다양한 문제가 발생했습니다.

Embeded WAS

컨테이너에 아주 가벼운 WAS를 추가해서 RESTful API로 각각의 서비스들과 서로 통신하게 할 수 있습니다.

Broker와 Proxy

CQRS 는 DB에 질의를 보내 처리할 때 단순 조회성 질의와 CUD(Create-Update-Delete)에 대한 질의는 분리하여 처리하는 패턴입니다. 사실 조회쿼리를 분리하는 방식은 예전에도 있었던 디자인 패턴입니다. 이를 구현할 수 있는 방법으로 쿼리를 받아서 전달하는 Broker를 구현해야 하며 Proxy도 정확히 구현 가능해야 합니다.

Message Queue 와 Pub/Sub

서로 공유해야 하는 데이터는 가능한 Event Sourcing 방식으로 처리되어야 합니다. Queue와 Pub/Sub는 이를 위해 필요한 기술입니다.

Actor Model

쓰레드 모델에서 액터 모델로의 전환이 가장 급격한 변화의 시작이 아닐까 합니다. 처리 방식은 Actor 간의 통신은 물론 다른 Actor를 활성화시키는 것도 필요합니다.

마치며

사실 더 많은 기술요소와 더 많은 설명이 필요할 것입니다. 이번 글에서는 정말 언급만 하고 중요한 기술용어라는 점만 기억해 주시면 감사하겠습니다.

https://docs.microsoft.com/ko-kr/azure/architecture/patterns/ 에는 다양한 디자인 패턴이 정의되어 있고 찾기 쉽게 정리되어 있습니다.

댓글