SW/마이크로서비스

마이크로서비스 : SOA, 모노리스와 차이점, 정의, 장점

얇은생각 2020. 4. 9. 19:30
반응형

마이크로서비스 아키텍처

우선 마이크로서비스 아키텍처는 하나의 어플리케이션을 여러 개의 서비스 집합으로 구성하는 것을 말합니다. 어디서 많이 보았던 개념인 서비스 지향 아키텍처 SOA가 있습니다. 1990년대 후반부터 발전한 객체 지향 분석 설계, 컴포넌트 기반 개발, Service Oriented Architecture, 즉 SOA의 연장선에 있습니다. SOA와 마이크로서비스 아키텍처의 공통점은 둘 다 소프트웨어 설계 시 서비스 중심을 설계를 지향하는 것입니다.

 

 

마이크로서비스와 SOA

서비스 오너십을 보면 마이크로서비스는 하나의 독립된 팀에서 개발하고 관리합니다. 반면 SOA 서비스는 중앙에 관련된 서비스를 공유하기 위한 공유 미들웨어 중심으로 개발하기 때문에 여러 팀, 즉 기획팀, 공통기능개발팀, 개발팀 등이 협업을 해서 만듭니다.

서비스 크기에서는 SOA의 경우는 서비스가 여러 개 모인 비즈니스 흐름에 집중하기 때문에 비즈니스 단위로 식별되고, 마이크로서비스는 작은 한 가지 일에 집중하기 때문에 비즈니스보다는 좀 더 작은 서비스로 식별이 됩니다. 서비스 공유 측면에서 보면 SOA는 중간에 UDDAI라고 하는 서비스 저장소나 미들웨어를 두고 통합하여 여러 개의 서비스를 공유하는 방식인 데 비해 마이크로서비스는 통합 없이 각각의 서비스가 제공하는 API를 보고 필요할 때 호출하여 사용하는 방식입니다.

또 서비스 통신 방식은 SOA는 WSDL이라는 명세와 SOAP이라는 프로토콜을 이용하여 통신하는데, 만약 WSDL 명세가 변경되면 이를 참조하는 클라이언트들이 모두 영향을 받게 됩니다. 이에 반해 마이크로서비스는 서비스 제공자가 노출한 Restful API를 호출하여 결과 값을 활용하므로 구현이 쉽고 클라이언트에 영향이 크게 발생하지 않습니다.

마지막으로 저장소의 경우는 SOA는 서비스 상 저장소의 분리를 고려하지 않아 통합 저장소를 사용하는 경우에 서비스를 분리하기가 쉽지 않은 데 비해 마이크로서비스는 서비스 상 별도의 저장소를 두고 인터페이스만을 통해 데이터를 캡슐화하고 제한하고 있기 때문에 분리 대체가 아주 쉽습니다.

 

 

마이크로 서비스와 모노리스

먼저 전통적인 시스템 구조인 모노리스 구조부터 살펴보면, 모노리스 설계는 하나의 단위로 개발되는 일체식 어플리케이션 설계입니다. 보통 사용자 인터페이스와 데이터베이스 그리고 서버 쪽 어플리케이션 3개로 구성있습니다.

서버 쪽 어플리케이션이, 즉 논리적인 단일 실행체이며, 단일 실행체이기 때문에 아무리 작은 변화라도 새로운 버전을 전체 build하여 배포해야 합니다. 그리고 단일 프로세스에서 실행이 됩니다. 확장이 필요할 경우에는 보통 로드 밸런스를 앞에 두고 여러 인스턴스 위에 모노리스, 즉 큰 덩어리를 복사하여 수평으로 확장할 수 있습니다.

여기서 단점이 발생합니다. 즉, 여러 개의 모노리스를 수평으로 확장된 상태라고 한다면 그 이후에 시스템에 작은 변화가 생기면 모든 모노리스를 다시 빌드, 배포해야 합니다. 또한 특정 기능만 확장할 수 없고 반드시 어플리케이션을 동시에 확장해야 합니다.

반면에 마이크로서비스는 서버 쪽이 여러 개로 구성되고, 각각의 서비스가 프로세스 위에 별도로 올라갑니다. 즉, 여러 개의 서비스 프로세스가 모여 어플리케이션을 구성합니다. 또한 각각의 저장소가 다르기 때문에 업무 단위로 확고한 모듈 경계를 가집니다. 특히 확장 시에는 특정 기능별로 독립적으로 확장할 수 있고, 특정 서비스의 변경 시에는 그 서비스만 build, 배포하면 됩니다. 또 각 서비스가 독립적이기 때문에 서로 다른 언어로 개발되는 것도 가능하며, 그래서 각 서비스는 서로 다른 팀이 개발, 관리할 수가 있습니다.

 

 

마이크로서비스 정의

마이크로서비스는 여러 개의 작은 서비스 집합으로 개발하는 접근 방법입니다. 각 서비스는 개별 프로세스에서 실행되고, HTTP 자원 API 같은 가벼운 수단을 사용하여 통신을 합니다. 또한 서비스는 Biz 기능 단위로 구성이 되고, 자동화된 배포 방식을 이용하여 독립적으로 배포됩니다. 또한 서비스들에 대한 중앙 집중적인 관리는 최소화하고, 각 서비스는 서로 다른 언어와 데이터, 저장 기술을 사용할 수가 있습니다.

 

SOA 구조

 

이 서로 다른 언어와 데이터 저장 기술을 사용할 수 있다는 것은 상품 서비스는 개발언어로 JAVA를 사용하고, 저장소는 오라클 관계형 DB를 사용하며, 상품 검색 서비스는 Node JS의 몽고 DB로 개발하고, 주문 서비스는 C#으로 마리아 DB로 개발할 수 있는 것을 말합니다. 이런 개념을 폴리그라시라고 합니다. 인터페이스만 만족한다면 서비스 안의 기술은 자율적으로 선택할 수 있게 하는 것을 말합니다.

반응형