본문 바로가기

tech

마이크로 서비스 아키텍쳐는 왜 사용할까? MSA - Why Microservices architecture is getting popular?

반응형

오늘은 마이크로 서비스 아키텍쳐에 대해 알아 보겠습니다. 그리고 현재 제가 쓰고 있는 마이크로서비스 아키텍쳐에 대해서도 설명드리겠습니다.

 

1. 마이크로 서비스 아키텍쳐란?

 전통적인 서비스 설계에 있어서, 서버 앱은 하나의 단위에서 각종 논리적인 로직으로 구성되어서 설계 되었습니다.

모든 것이 하나로 합쳐져서 관계를 갖고 있었던 이유 중 하나는 하나의 코드에서 모든 서비스가 돌아가야 된다는 고정관념이 널리 지배적이 있고, 서버와 서버사이의 불필요한 물리적 거리와 네트워크 상 떨어짐이 다연히 비효휼적이다라고 여겨졌기 때문입니다.

이는 의존성과 복잡성 증가로 나중에 협업하거나 확장하는데 있어서 항상 불편을 겪어왔었습니다. MVC 같은 서버 패턴의 코드 설계 방식을 사용해도, 비지니스적인 요구사항을 하나의 서버코드에 모두 담아 관리하는 형태에서는 차후 복잡성 증가를 피하기가 어려웠습니다.

그럼 마이크로 서비스 아키텍쳐에서는 왜 그런 점이 보완되는지 알아보겠습니다.

 

마이크로 서비스 아키텍쳐

기존 모놀리스 서버의 설계 방식과 다르게, 서비스의 논리적인 단위인 서비스를 중점으로 서비스를 분리합니다.

예를 들어, 과거에 하나의 서버에서 인증, 주문, 배송 등의 각종 서비스의 요구사항을 모두 하나의 서버단위에서 처리했다면,

마이크로 서비스 아키텍쳐는 각각의 요구사항에 맞는 서비스 서버를 기획하고, 그 단위를 코드 단위로 서버 전체를 분리하는 형태로 서비스를 제작합니다.

 

다시 말해, 단일 서비스 단위의 서비스를 코드로써 분리하여 관리할 수 있고, 이것들이 모여서 하나의 모놀리스 서버와 같읕 형태로 서비스가 가능하다는 것입니다.

 

말로는 참 쉬운 것 같지만, 마이크로 서비스 아키텍쳐를 하기 위해서는 다양한 뒷받침 기술이 필요했습니다.

그 중 하나가 서버의 컨테이너 가상화 기술인 Docker 입니다.

도커 컨테이너 가상화 기술 사진

컨테이너 가상화 기술이란 기존 물리적/논리적 단위의 서버 위에 컨테이너 단위의 서비스 프로세스를 가상화해서 관리하는 기술입니다.

이를 통해서 네트워크 가상화는 물론, 데이터 볼륨 또한 컨테이너 위에서 가상화되어 관리할 수 있게 되었으며, 각종 서비스를 컨테이너 단위로 쉽게 실행하고, 관리할 수 있는 서버를 제작 할 수 있게 되었습니다.

 

이러한 도커의 기술 본펴화가 바로 Micro service architecture MSA 를 쉽게 구현할 수 있게 만든 장본인이고,

 개발자들은 도커가 설치될 수 있는 환경에서 굳이 같은 서버 언어가 아니어도 도커로 서비스 단위의 서버 서비스를 제작하고, 배포/설치를 쉽게 할수 있게 되었습니다.

 

이와 더불어서 Polyglot 프로그래밍 의 전성기를 열기도 했습니다.

서로 다른 서버 코드를 사용함에도, 도커를 통해서 하나의 서비스로써 서버 서비스를 제작 할 수 있기 때문에 서로 다른 서버언어들 스택도 하나의 큰 단위 서비스에 자신의 서버 코드를 적용하여 기여할 수 있게 되었습니다.

 

그럼 마이크로 서비스가 항상 효율적이고 최선인가? 정답은 노.!

마이크로 서비스 아키텍쳐는 물론, 초기 모놀리스 서버 환경에 비해 효율이 떨어지는 건 사실입니다. 그 이유는 하나의 컴퓨터 내에서 직접 데이터를 주고 받는 것이 당연히 빠르기 때문입니다.반면 마이크로 서비스 단위의 서버 환경에서는 서로에 대한 통신을 위해서 서비스를 서로 호출하는 프로토콜을 정의하고 서로 호출합니다. 이에 맞게 Event 를 주고 받는 프로토콜을 정의해서 Event driven architecture를 설계해서 사용하기도 합니다. 이벤트 드리븐 아키텍쳐는 Protobuf / JSON /Avro 같은 데이터 시리얼라이제이션을 통해, 이벤트 큐에 서비스끼리 통신을 주고 받는 형태로 만드는 것입니다. 단순히 서비스끼리 Rest 같은 형태로 이벤트를 주고받기에는 다양한 Fault 상황에 대한 대응이 어렵기 때문에 이런 부분을 고도화해서 MSA  를 구축하는게 일반적입니다.

 

Event-driven architecture - Wikipedia

Event-driven architecture (EDA) is a software architecture paradigm promoting the production, detection, consumption of, and reaction to events. An event can be defined as "a significant change in state".[1] For example, when a consumer purchases a car, th

en.wikipedia.org

 

현재 저는 MSA 로 서버를 구축하고 있으며, 이벤트 드리븐 아키텍쳐 및 다양한 Fault 에 대응되는 기술을 같이 사용하여 MSA 를 구축하고 있습니다. 2년여간 사용해 본 개인적인 경험으로써는 MSA 를 통해서 서비스의 성능은 물론 구축의 효율성 또한 높혀왔고, 재사용성 또한 높혀왔습니다.

 

과거에는 nginx 라는 Reverse proxy 를 MSA에 사용했었으나, 현재는 좀더 관리하기 편한 Traefik  을 사용하고 있습니다.

 

Serverless 서버기술도 MSA 같이 사용하기 좋은 기술이라고 생각합니다.

 

앞으로의 서버 환경은 과연 어떤일이 펼쳐질지 기대됩니다.

MSA 를 통해서 많은 서버개발자분들이 좀더 자유롭고 편리한 서버를 개발할 수 있기를 기대합니다.

 

반응형