MSA (Micro Service Architecture) 란 무엇일까?

안녕하세요. 오늘은 Micro Service Architecture에 대해 이야기 해보고자 합니다. 한동안 MSA가 굉장히 화두였는데, 요즘은 분위기가 식어지는 듯하여 오늘 블로그에 이 글을 적게 되었습니다.

우리는 백엔드 개발을 위해서 Spring, Django 등 다양한 프레임워크를 사용하여 개발을 하게 됩니다. 보통 이들 프레임워크를 이용해서 특정 기능을 수행하는 API를 설계하고 개발하여 서비스하는 것이 기본 형태이죠.

 

Monolothic Architecture

이렇게 UI, 비즈니스 로직, 데이터 레이어까지 모든 것을 한 통 속에서 운영하는 방식을 모놀리틱 아키텍처라고 이야기 합니다. 흔히 학부에서 운영체제 과목을 수강해보신 분들이라면, 모놀리틱 커널이라는 단어를 들어보셨을텐데, 거기에서 나오는 모놀리틱과 동일한 단어입니다.

그런데, 이러한 개발 방식에 조금 단점이 존재합니다. 만약 개발에 문제가 생겨 다른 API 호출을 하면서 오류가 발생했습니다. 그렇게 되면 모든 서비스가 중단이 되어 버리죠. 이를테면, 카페 주문 서비스를 목적으로 한 백엔드 서버가 있다고 했을 때, 주문 조회에서 오류가 발생하여 서버가 종료가 되어버리면, 다른 서비스 조차도 사용할 수 없게 되어버리는 것이죠.

따라서 우리는 이러한 서비스를 분리하여 개발하고, 운영함으로써 하나의 서비스에서 오류가 발생해도 다른 서비스에는 문제가 생기지 않도록 하기 위해 MSA(Micro Service Architecture)를 이용하여야 합니다.

 

Micro Service Architecture

우리가 MSA를 접하기 전에 반드시 짚어두고 가야할 점이 있습니다. 비록 MSA가 모놀리틱 아키텍처의 단점을 보완하였다고는 하지만 그것이 모든 서비스에 적용되는 것은 아닙니다.

서비스의 특징에 따라서 MSA가 효율적일 수도 있고, 그렇지 않을 수도 있습니다. 앞에서 설명했다시피 특정 서비스가 각 API별로 종속적이지 않다면, 그것은 MSA가 효율적일 수 있겠지만 모든 서비스가 하나의 통합으로 이루어져야 한다면 오히려 개발 프로세스가 복잡해지기만 할 뿐, 모놀리틱 아키텍처를 사용하는 것보다 비효율적인 과정의 형식으로만 남게 됩니다.

 

Micro Service Architecture

마이크로 서비스 아키텍처는 위 이미지처럼 각 역할 별로 서버가 분리되어 있기 때문에 한쪽 API에서 문제가 발생하더라도 다른 API는 정상적으로 운영되어 이루어지기 때문에 안정적으로 서비스를 운영할 수 있다는 장점이 있습니다.

또한 각 API별로 각기 다른 언어, 다른 DBMS를 쓸 수 있어 개발하는 데 있어서도 다양성을 높일 수 있고, API 특징 별로 자유로운 개발이 가능하다는 것도 장점으로 꼽을 수 있겠죠.

모놀리틱 아키텍처는 UI까지 모두 서버에 들어가 있는 형태여서 보통 이러한 형태의 개발은 JSP+Spring 조합 혹은 HTML+PHP 조합이라고 얘기합니다.

모놀리틱 아키텍처는 모든 것을 하나의 통합으로 사용하기 때문에 배포가 쉽습니다. 이를 테면 JSP + Spring 조합으로 하여금 war 파일로 배포하면 배포한 war 파일만을 Tomcat 등의 WAS에 올리면 바로 운영이 시작되는 형태인 것이죠.

하지만 마이크로 서비스 아키텍처는 각기 API별로 서버가 다르게 되어 있기 때문에 단순히 파일 하나로 배포할 수는 없습니다. 따라서 이를 서비스할 수 있는 환경으로 만들어주기 위해 Docker compose 내지, Docker Swarm 등의 컨테이너를 별도로 사용하여 운영 환경을 지도하여야 합니다.

 

마치며...

여기까지 MSA에 대한 간단한 이야기를 다뤄봤습니다. 비록 내용은 별 거 없지만 어떻게 설계하는지에 따라서는 이 글에 해당된 이미지보다 더 크고 복잡하게도 설계가 될 수 있는 부분 중에 하나라고 말씀을 드리고 싶습니다.

그리고 또 한 가지는 로드 밸런싱을 하게 되면 노드의 수가 증가함에 따라 운영 측면에서 봤을 때는 모놀리틱 아키텍처가 장점으로 볼 수 있습니다. 반대로 MSA는 해당 API 수에 따라서 노드가 증가하기 때문에 모니터링 해야하는 갯수가 그만큼 많아지는 것은 단점으로 볼 수 있겠죠.

따라서 우리는 이것이 무조건 좋다고 채택하기 보단, 충분히 장단점을 숙지하고, 본인의 컴퓨터 사양을 맞추 듯 판단하는 것이 적절하다고 생각하면서 이 글을 마치겠습니다.

comments powered by Disqus

Tistory Comments 0