반응형
들어가기 전에
모놀리식 아키텍처(Monolithic Architecture)란?
마이크로서비스 아키텍처의 반대되는 개념으로 전통의 아키텍처를 지칭한다.
하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질때 모놀리식하다고 한다.
특징
- 내부 의존성이 강하다
- 구조적인 결합이 강력하게 유지된다.
- 비즈니스 컴포넌트들이 강한 결합 구조를 지니고 통일성이 있다.
장점
- 개발 초기 단순한 아키텍처 구조와 개발에 용이하다.
- 구조가 복잡하지 않다.
- 쉽게 고가용성 서버 환경을 만들 수 있다.(하나의 프로젝트에 모든 기능들이 들어있기 때문에)
- End-to-End 테스트가 용이하다
단점
- 프로젝트의 규모가 커짐에 따라 어플리케이션 구동시간이 늘어나고 빌드, 배포 시간이 길어진다.
- 작은 수정사항에도 전체를 다시 빌드하고 배포해야 한다.
- 많은 양의 코드가 몰려있어 유지보수가 힘들다.
- 일부분의 오류가 전체에 영향을 미친다.
- 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기가 까다롭다.
기능별로 적절한 기술 스택을 선정하는 것이 불가능하다.
MSA(Micro Service Architecture)란?
어플리케이션을 핵심 기능으로 세분화 한다.
각 기능을 서비스라 하며 독립적으로 구축하고 배포 할 수 있다.
추가되는 기능에 따라 적절한 기술 스택 선정이 가능하며, 기능별로 쪼개져 있기 때문에 빌드, 배포에 걸리는 시간이 짧다.
분산 환경이기 때문에 장애 포인트가 늘어나고 모니터링에 어려움을 겪을 수 있다.
특징
- Single Purpose (한 개의 목적만 수행)
서비스 하나에 책임도 하나다.
어플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트로 분해하고 이를 조합하여 솔루션을 제공한다.
비즈니스 영역의 한 부분에 대해서만 책임 담당한다. - Loose Coupling (느슨한 결합)
마이크로 서비스는 자신의 데이터 저장소가 있는 경우 데이터 저장소에 대한 오너십을 가지기 때문에 다른 서비스는 자신이 소유하지 않은 데이터에 접근할 때 데이터를 소유한 서비스가 제공한 인터페이스를 통해서만 접근이 가능하다.
DB도 쪼개져있다. - High Cohesion (높은 응집도)
단일 비즈니스를 수행하기 때문에 서비스의 기능들은 높은 응집도를 가진다.
각 서비스는 관현 행위와 데이터를 캡슐화하여 관리한다.
변경이 발생하는 경우 모든 변경사항이 하나의 단일 서비스에서만 수정되도록 해야 한다. - 상호 독립적으로 배포되어야 한다.
- 여러 어플리케이션에서 재사용할 수 있어야 한다.
- 두 서비스 사이의 데이터 교환을 위해 HTTP나 JSON과 같은 경량 통신 프로토콜을 사용한다.
- 마이크로서비스 기반의 어플리케이션은 다양한 언어와 기술로 구축 할 수 있다.
핵심 원칙
- 자율성 (Autonomy)
각 서비스는 다른 서비스와 독립적으로 변경되고 운영된다.
자율성을 위해선 느슨한 결합이 필요하며 독립적으로 배포가 가능해야 한다. - 회복성 (Resilience)
독립적으로 배포하므로 시스템 일부에만 영향을 미친다. - 장점
여러 서비스로 분리하여 장애를 격리시키지만 장애 지점이 늘어난다. - 단점 - 투명성 (Transparency)
MSA는 여러 서비스가 협업하기 때문에 모든 시스템이 투명하게 관찰되어야 한다.
문제를 관찰하고 진단하기 위해 비즈니스, 운영, infrastructure matric, 로그 등을 생성해야 한다. - 자동화 (Automation)
MSA는 단일 어플리케이션보다 복잡한 아키텍처를 가지기 때문에 자동화된 CI/CD를 통해 운영 및 배포를 안정적으로 수행해야 한다.
마이크로서비스 채택 전 고려해야 하는 내용
- 마이크로서비스 아키텍처를 사용하여 달성하고자 하는 목표는 무엇인가?
명확한 목표가 있어야 한다.
예) 기존 대비 1.5배 빠른 성능, 중단되지 않는 높은 가용성을 가진 서비스 등 결과를 기준으로 설명할 수 있어야 하며
시스템 사용자에게 이점을 제공하는 방식으로 설명 될 수 있어야 한다. - 다른 대안을 고려했는가?
마이크로서비스와 동일한 이점을 얻을 수 있는 다른 방법들이 있다.
때로는 MSA를 고려하지 않고도 적용 가능한 방법이 다양하게 존재하므로 고려를 선행한 후 진행하는 것이 좋다.
마이크로서비스 장단점
장점
- 출시 시간 단축
개별 마이크로 서비스에 변경 사항을 적용하고 배포 할 수 있어서 더 빠르게 제품을 출시 할 수 있다. - 유연한 확장
프로세스를 독립적으로 확장 할 수 있다.
부족한 성능을 나타내는 서비스만 별도로 확장이 가능한데 그 반대로 축소 또는 해제도 가능하다.
SaaS 제품을 구축하는 많은 회사들이 마이크로서비스 아키텍처를 통해 운영 비용을 더 잘 제어하고 있다. - 마이크로 서비스를 사용하면 기능이 분해되기 때문에 한 기능에 전체 시스템에 영향을 끼치지 않는다.
- 개발자 생산성
기존 모놀리식 시스템에서는 개발자 수를 늘리는 것만으로 생산성을 확장하는 것에는 한계가 있다.
MSA 적용하면 독립적으로 개발 할 수 있는 환경을 제공하여 개발자간 경합을 줄여 개발자 수를 늘리는 것이 개발 생산성과 직결될 수 있다. - 신기술 수용
기존 모놀리식 시스템은 일반적으로 기술 선택을 제한한다. 하나의 배포 플렛폼, 운영체제, 데이터베이스 유형에 고정되어 있기 때문인데 MSA를 도입하면 각 서비스에 대해 기술 선택을 다양하게 할 수 있다.
서비스 별 영역을 격리하여 새로운 기술의 이점을 적용 할 수 있고 기술에 문제가 있다고 하더라도 타 서비스로의 영향을 최소화 할 수 있다.
단점
- 도메인이 불분명 할 때 발생 가능한 문제들
서비스 경계를 잘못 설정하면 비용이 많이 들 수 있다.
더 많은 서비스 간 변경, 과도하게 결합된 구성 요소로 이어 질 수 있으며 모놀리식 시스템보다 더 나빠질 수 있다.
MSA를 적용하기 위해 서비스 전반에 걸쳐 많은 변경이 이뤄져서 높은 변경 비용이 발생할 수 있다.
도메인을 완전히 이해하지 못했다면 MSA적용 전에 도메인을 먼저 이해하는 것이 중요하다. - 유지보수의 어려움
패키지되어 고객에게 딜리버리되는 소프트웨어를 고객이 직접 운영하는 경우라면 MSA는 좋지 않을 수 있다.
이는 운영 도메인에 많은 복잡성이 추가되기 때문인데 모놀리식 배포를 모니터링하고 문제를 해결하는데 사용했던 이전 기술들은 새로운 분산 시스템에서 제대로 작동하지 않을 수 있다.
MSA로 마이그레이션 하기 위해서는 새로운 기술을 채택하여 문제를 해결해야 하는데 고객이 MSA를 관리하는데 사용 할 수 있는 기술이나 플랫폼을 운영할 것이라 기대하는 것은 어렵다.
마무리 하며 .. 장단점 다시보기
MSA가 핫한 이유들
- 작은 서비스들로 나누고 각 서비스를 독립적으로 만드는데서 오는 장점들 (loosely-coupled)
- 대용량 분산 환경에 적합
- 복잡도 감소
- 유연한 배포
- 재사용성, 확장성이 좋음
- 서비스별 기술 도입 및 확장이 자유로움
- 작은 서비스는 개발자가 이해하기 쉬워 개발/운영 단계의 생산성이 높음
- 지속적인 개발/deploy가 관련된 소수의 인원의 책임하에 이뤄질 수 있음
- fault isolation이 좋음
쉽게 사용하기 어려운 이유들
- 장애 추적, 모니터링, 메시징 처리가 어렵다.
해결을 위해서는 ELK, Splink 등의 서비스를 연동하여 사용하는 방안 고려 - 여러 서비스에 걸쳐있는 특징을 가질 때 트랜잭션을 다루기 어렵다.
부분적으로 서비스 병합 고려 - 여러 서비스에 걸쳐있는 특징을 가질 때 테스팅이 복잡하다.
테스팅 계획 및 방법에 투자가 필요하다. - 서비스 간 dependency가 있는 경우 release가 까다롭다.
dependency 관리 체계 수립 및 관련 조직 간 계획 마련 - 서비스 개수가 많고 유동적이기 때문에 CI/CD 및 서비스 관리 상의 문제가 발생 할 수 있다.
모니터링, CI/CD 자동화 기술 고려 - 모놀리스 시스템을 마이크로 서비스로 전환 할 때 많은 비용이 든다.
References
반응형
'IT 기본지식' 카테고리의 다른 글
고가용성 High Availability이란? (0) | 2022.02.16 |
---|---|
Load Balancer란? / L4 load balancer, L7 load balancer (0) | 2022.02.15 |
CI/CD 에 대한 간단 정리 (0) | 2022.02.14 |
3-Tier Architecture 정의 및 구성방식 (0) | 2022.02.13 |
[통신] TCP/UDP 가볍게 읽고 기억하기, TCP vs IP (0) | 2022.02.13 |
댓글