マイクロサービス(microservice)はソフトウェアアーキテクチャであり、ますます注目を集めています。
しかし、それは何を意味しますか?どのようなアーキテクチャをマイクロサービスと呼べるのでしょうか?
インターネット上には多くの記事がありますが、それらはあまり複雑で、初心者が理解しにくいです。私はこの概念は実は非常に簡単で、とても分かりやすく説明できると考えています。

一、モノリシックソフトウェア
マイクロサービスを理解するには、まずソフトウェアアーキテクチャの進化を理解する必要があります。
初期のソフトウェアでは、すべての機能が一緒に書かれており、これをモノリシックアーキテクチャ(monolithic software)と呼びます。

ソフトウェア全体が単一のまとまりであり、まるで統合された機械のようです。
考えると、ソフトウェアの機能が多いほど、モノリシックアーキテクチャはより複雑になり、多くの欠点も露呈してきます。
(1)모든 기능이 연결되어 서로 영향을 주고받아, 마지막에는 관리하기 어려워집니다.
(2)코드 한 줄만 변경해도 전체 소프트웨어를 재건축하고 배포해야 하므로 비용이 매우 높습니다.
(3)소프트웨어가 통합된 형태로 만들어졌기 때문에 각 기능을 개별적으로 개발하고 테스트할 수 없으며, 전체적으로 개발하고 테스트해야 하므로 폭포수 개발 모델을 채택해야 합니다.
이 세 가지 이유에 대한 자세한 분석은 이전 글 《소프트웨어 공학의 가장 큰 어려움》를 참조하세요.

결론적으로, 모노리틱 아키텍처의 대규모 소프트웨어는 개발 속도가 느리지 않을 뿐만 아니라 유지보수 및 업그레이드하기 어려운 복잡한 코드를 형성하여 프로그래머에게 무거운 짐이 됩니다.
이, 서비스 지향 아키텍처
위의 문제를 해결하기 위해 오랜 시간 동안 코드의 연결을 끊고 모노리틱 아키텍처를 분할하여 소프트웨어를 개별적인 기능 단위로 나누어야 한다는 제안이 나왔습니다.
약 20년 전, 인터넷의 등장과 함께 기능 단위가 원격 "서비스" 형태로 제공될 수 있게 되었고, 이로 인해 "서비스 지향 아키텍처"(service-oriented architecture, 약칭 SOA)가 탄생했습니다.

서비스(서비스)란 배경에서 끊임없이 실행되며 특정 기능을 제공하는 프로그램을 의미합니다. 가장 흔한 서비스는 웹 서비스로, 80번 포트를 통해 외부에 웹 페이지 접근을 제공합니다.
"서비스 지향 아키텍처"는 거대한 단일 프로그램을 개별적인 서비스로 분할하는 것을 의미하며, 이는 더 작은 프로그램입니다. 각 서비스는 독립적인 기능 단위로서 다른 기능을 담당하며, 서비스들은 통신 프로토콜을 통해 연결됩니다.

이러한 아키텍처는 많은 장점이 있습니다.
(1) 각 서비스는 기능이 단일하여 작은 소프트웨어와 같아 개발과 테스트가 용이합니다.
(2) 각 서비스가 독립적으로 실행되어 아키텍처를 단순화하고 신뢰성을 향상시킵니다.
(3)코드 재사용을 장려하고 지원하며, 동일한 서비스는 여러 목적으로 사용될 수 있습니다.
(4)다른 서비스는 독립적으로 개발하고 배포할 수 있어 업그레이드가 용이합니다.
(5)확장성이 좋으며, 기기나 기능을 쉽게 추가하고 높은 부하를 감당할 수 있습니다.
(6)단일 장애 지점이 발생하기 어렵습니다. 하나의 서비스가 실패해도 다른 서비스에 영향을 주지 않습니다.
단일 애플리케이션 아키텍처와 달리, 서비스 지향 아키텍처는 언어에 민감하지 않으며, 다른 서비스는 다른 언어와 도구로 개발할 수 있으며, 다른 시스템과 환경에서 배포될 수 있습니다.
이는 의미하며, 서비스 지향 아키텍처는 기본적으로 다른 서버에서 실행됩니다 , 각 서버는 한 가지 서비스를 제공하며, 여러 서버가 함께 완전한 네트워크 애플리케이션을 구성합니다.
삼, 마이크로서비스
2014년,Docker가 나타났으며, 소프트웨어 개발의 모습을 근본적으로 바꾸었습니다. 이는 프로그램을 컨테이너 내에서 실행시키며, 각 컨테이너는 별도로 실행 환경을 설정할 수 있고, 매우 적은 시스템 자원만을 사용합니다.

명백히, 컨테이너를 사용하여 "서비스 기반 아키텍처"를 구현할 수 있으며, 각 서비스는 더 이상 서버를 하나씩 사용하지 않고 컨테이너 하나만 사용합니다.
이렇게 하면 여러 서버가 필요 없습니다. 가장 간단한 경우, 로컬에서 여러 컨테이너를 실행하면, 하나의 서버만으로 서비스 기반 아키텍처를 구현할 수 있습니다. 이는 이전에는 불가능했습니다. 이러한 구현 방식을 마이크로서비스라고 합니다.

간단히 말해, 마이크로서비스는 컨테이너 기술을 사용하는 서비스 기반 아키텍처입니다. 여전히 "서비스"를 기능 단위로 사용하지만, 가볍게 구현되어 서버를 추가할 필요 없이 새로운 컨테이너(하나의 프로세스)만 생성하면 되므로 "마이크로서비스"라고 합니다.
하나의 마이크로서비스는 독립적입니다. 프로세스 입니다. 이 프로세스는 로컬에서 실행할 수도 있고, 다른 서버에서 실행하거나 클라우드(예: 클라우드 서비스와 클라우드 함수 FaaS)에서 실행할 수도 있습니다.
그 특징은 서비스 지향 아키텍처와 같지만, 더 가볍기 때문에 기능의 분리와 서비스화를 더 완전하게 할 수 있습니다. 또한, 표준화할 수 있어서 같은 컨테이너가 어디서 실행되든 결과가 동일하기 때문에, 시장에는 표준화된 마이크로서비스를 제공하는 SaaS 제품이 많습니다.
마이크로서비스의 이러한 두드러진 장점 때문에 최근 몇 년간 이렇게 인기가 있습니다. 컨테이너 기술과 클라우드 서비스와 함께, 앞으로의 소프트웨어 개발에서 점점 더 중요한 역할을 할 것입니다.
(완)












