마이크로서비스 아키텍처(Microservice architecture)는 잘 정의된 인터페이스와 기능을 갖는 단일 기능 모듈을 구축하는 것에 초점을 맞춘 소프트웨어 시스템 개발을 위한 독특한 아키텍처이다.
최근 몇 년간 기업들은 Agile을 위해 DevOps 및 지속적인 테스트 프로세스를 채택함에 따라 마이크로서비스는 점점 더 인기가 얻고 있다. 아마존, 이베이, 넷플릭스, 페이팔, 트위터, 우버와 같은 주요 온라인 기업들은 모놀리식(monolithic) 아키텍처를 버리고 마이크로서비스로 전환하고 있다.
모놀리식(monolithic) 아키텍처는 대형, 독립적인 유닛으로 구축된 애플리케이션으로 이루어져 있다. 전체 시스템이 깊게 연결되어 있기 때문에 이러한 애플리케이션을 쉽게 변경할 수 없다. 코드의 작은 수정조차도 소프트웨어의 완전히 새로운 버전을 작성하고 배포해야 할 수 있다. 모놀리식 애플리케이션은 또한 확장하기가 어렵다. 특정 기능을 확장하려면 전체 애플리케이션을 확장해야 한다.
마이크로서비스는 소프트웨어 개발을 모듈화 하는 방식으로 모놀리식(monolithic) 아키텍처의 문제점을 해결한다. 간단히 말해, 마이크로서비스는 애플리케이션을 여러 개의 개별적인 연결된 서비스들의 조합으로 구성한다. 각 서비스는 특화된 프로세스를 실행하며 독립적으로 배포된다. 필요한 경우, 서비스는 다른 기법들을 사용하여 데이터를 저장하고 처리할 수 있으며, 다른 프로그래밍 언어로 작성될 수 있다.
마이크로서비스 아키텍처 이해
모놀리식(monolithic) 애플리케이션에서는 모든 프로세스가 서로 많이 의존을 하고 하나의 서비스로 운영된다. 이러한 아키텍처에서는 한 프로세스의 대역폭에 대한 수요가 증가할 경우, 전체 아키텍처를 확장해야 한다.
모놀리식 애플리케이션에서는 모든 코드가 동일한 기반에 함께 배치되기 때문에, 특히 코드 기반의 크기와 복잡성이 확장됨에 따라 기능을 추가하거나 향상시키는 것은 복잡한 프로세스가 된다. 또한 모놀리식 애플리케이션은 장애에 취약할 수 있다. 굉장히 밀접하게 결합된 프로세스로 인하여 하나의 프로세스가 다운되면 쉽게 영향을 받기 때문이다.
이러한 문제들은 새로운 아이디어에 제약을 줄 수 있으며 기업이 유연하게 대응하기 어렵게 만들어 고객 중심의 시장에서 잠재적으로 기업을 불리하게 만든다.
마이크로서비스는 대형 애플리케이션을 독립적으로 작동하는 작은 단위로 분할할 수 있다. 각 '피스'는 자신의 역할이 있고 다른 구성 요소가 무엇을 하고 있는지와 상관없이 역할을 수행할 수 있다. 마이크로서비스 기반 애플리케이션은 이러한 구성 요소들의 서비스를 종합적으로 이용하여 사용자 요청을 처리한다.
마이크로서비스 아키텍처의 서비스는 상세 인터페이스에 연결되는 경량 애플리케이션 프로그래밍 인터페이스(API)를 사용하여 서로 '대화'한다. 이러한 서비스는 금전 거래, 송장 작성 및 데이터 처리와 같은 특정 비즈니스 기능을 수행하기 위해 만들어졌다. 각 서비스는 단일 작업을 수행한다. 서비스는 독립적으로 실행되므로 특정 기능에 대한 요구에 따라 배포, 업데이트 및 확장할 수 있다.
마이크로서비스 아키텍처를 구현하면 유연하고 확장 가능한 비즈니스 시스템을 만들수 있다. 그러나 모노리스에서 마이크로 서비스로 전환하려면 IT 인프라를 재구조화해야 한다.
마이크로서비스는 일반적으로 RESTful 및 웹 서비스 환경에 배포된 것과 동일한 솔루션을 많이 사용하기 때문에 이것이 반드시 나쁜 것은 아니다. 경험이 충분한 IT 팀이라면 합리적으로 쉽게 작업할 수 있다. 예를 들어, API 테스트(상대적으로 일반적인 프로세스)는 마이크로서비스 배포와 관련된 데이터 흐름을 검증하는 데 사용할 수 있다.
마이크로서비스 아키텍처는 모든 다양한 디바이스에 대한 인프라 접근을 항상 고려할 수 없는 현대의 디지털 비즈니스에 이상적이다. 많은 애플리케이션들은 모놀리식에서 시작되어, 팬데믹 이후의 세상에서 예상치 못한 요구 사항이 대두되면서, 마이크로서비스를 사용하여 개편되었다. 규모가 큰 엔터프라이즈 환경을 개편하는 것은 오래된 모놀리식 아키텍처와 마이크로서비스의 통신을 허용하는 API를 사용하여 달성할 수 있다.
컨테이너는 마이크로서비스 아키텍처의 훌륭한 예이다. 기업들이 종속성에 대해 걱정할 필요 없이 서비스를 개발하는 데 집중할 수 있도록 해준다. 클라우드 네이티브 응용 프로그램은 일반적으로 컨테이너를 활용하여 마이크로서비스로 구축된다.
마이크로서비스 아키텍처의 특성
다음은 마이크로서비스 아키텍처의 다섯 가지 주요 특성이다.
1. 다수의 구성 요소로 분할
마이크로서비스 아키텍처를 사용하여 구축된 소프트웨어는 정의에 따라 수많은 구성요소 서비스로 나뉜다. 각 서비스는 애플리케이션 무결성을 손상시키지 않고 독립적으로 생성, 배포 및 업데이트할 수 있다. 전체 애플리케이션은 다운그레이드하여 다시 배포하는 대신 몇 가지 특정 서비스를 조정하여 확장할 수 있다.
2. 견고하고 장애에 강함
마이크로서비스 아키텍처를 사용하여 구축된 애플리케이션이 쉽게 장애가 발생하지 않는다. 물론, 개별 서비스의 장애가 발생할 수 있으며, 분명 운영에 영향을 미칠 수 있다. 수많은 다양하고 독특한 서비스들이 서로 소통하여 마이크로서비스 환경에서 운영을 수행하게 되고, 어느 순간 장애가 발생할 수는 있다.
그러나 올바르게 구성된 마이크로서비스 기반 애플리케이션에서 다운타임이 있는 기능이 트래픽을 재지정하면서 연결된 서비스가 계속 작동할 수 있도록 할 수 있도록 할 수 있다. 또한 마이크로서비스를 모니터링하고 장애 발생 시 가능한 한 빨리 복구함으로써 업무 중단 위험을 줄일 수 있다.
3. 간단한 라우팅 프로세스
마이크로서비스는 데이터를 처리하고 논리를 적용할 수 있는 지능형 구성요소로 구성된다. 이러한 구성 요소는 한 요소에서 다른 요소로 정보를 전송하는 '덤 와이어'로 연결된다.
이 단순한 라우팅 프로세스는 일부 다른 엔터프라이즈 애플리케이션에서 사용하는 아키텍처와 반대다. 예를 들어, 엔터프라이즈 서비스 버스는 메시지 라우팅, 상호작용 및 비즈니스 규칙 적용을 위해 복잡한 시스템을 사용한다. 그러나 마이크로서비스는 요청을 받아 처리한 후, 적절한 출력을 생성하여 요청하는 구성 요소로 전달하기만 한다.
4. 분산된 운영
마이크로서비스는 수많은 플랫폼과 기술을 활용한다. 이로 인해 기존의 중앙 집중식 거버넌스 방식은 마이크로서비스 아키텍처를 운영하는 데 비효율적이다.
전 세계 개발자들이 운영 문제를 해결하기 위한 가치 있는 도구를 만들기 때문에 분산된 거버넌스는 마이크로 서비스에 더 적합하다. 이 도구들은 심지어 같은 문제에 직면한 다른 개발자들도 공유하고 사용할 수 있다.
마찬가지로, 마이크로서비스 아키텍처는 모든 마이크로서비스 애플리케이션이 고유한 데이터베이스를 관리하기 때문에 분산된 데이터 관리를 선호한다. 반대로, 단일 시스템은 일반적으로 모든 애플리케이션에 대해 중앙 집중식 논리 데이터베이스를 사용하여 작동한다.
5. 현대 비즈니스를 위해 구축됨
마이크로서비스 아키텍처는 현대 디지털 비즈니스의 요구를 충족시키는 데 초점을 맞추어 개발되었다. 전통적인 모놀리식 아키텍처는 팀이 UI, 기술 레이어, 데이터베이스 및 서버 로직과 같은 기능 개발에 참여한다. 반면 마이크로서비스는 교차 기능 팀에 의존한다. 각 팀은 메시지 버스를 통해 데이터를 송수신하는 개별 서비스를 기반으로 특정 제품을 만드는 책임을 맡는다.
'Software Engineering > 개발 모델 및 아키텍쳐' 카테고리의 다른 글
Monolithic, Microservices, Nanoservices Architecture (0) | 2023.05.20 |
---|---|
정보 시스템 수명 주기 (0) | 2023.03.13 |
결합도(Coupling)와 응집도(Cohesion) (0) | 2023.03.11 |
사용자 인터페이스(UI/UX) 설계 (0) | 2023.03.10 |
다양한 라이프 사이클(SDLC) 모델 비교 (0) | 2023.03.09 |
댓글