최근 취업준비를 하면서 클라우드 기반 서비스 / 솔루션 회사들에 지원을 하며
관련 용어와 기술들에 대해 고찰해보게 되었다.
앞으로 이해를 위해, 추후 다시 찾아보기 위해 포스팅을 남기려고 한다.
* Micro Service Architecture 마이크로 서비스 아키텍쳐 (MSA)
MSA 에 대해 얘기하기 전에 기존 방식인 Monolithic Architecture에 대해먼저 알아보면
Monolithic Architecture
Monolithic : 너무 큰, 변경할 수 없는
전통의 아키텍처를 지칭
소프트웨어의 모든 구성요소가 한 프로젝트에 통합 되어 있는 형태.
모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행된다.
따라서 애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야 한다.
코드 베이스가 증가하게 되면 모놀리식 애플리케이션의 기능을 추가하거나 개선하기가 더 복잡해진다.
장점
- 단순한 구조
- 개발환경과 방식의 통일
- 배포가 간편
- End to End 테스트가 용이
- 소규모 프로젝트에서는 합리적
단점
- 코드 전체를 한번에 이해하기 힘듦
- 빌드시간의 증가 (CI / CD 불가능)
- 새로운 기술을 적용할 때 프로젝트 전체를 건드려야 함
- 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기가 까다롭다.
- scale out이 불가능
위와 같은 아키텍처 의 단점을 보완하고자 나온 아키텍처 중 하나 MSA(MicroService Architecture)
MSA는 마이크로서비스와 같은 시스템의 단일 모듈이 프로그램의 다른 부분에 영향을 주지 않고 다른 요소 내에서 예상치 못한 변경을 생성하지 않고 독립적으로 변경될 수 있는 모듈식 애플리케이션을 지원
여러 기능이 통합되어있는 모놀리식 아키텍처와 달리 개별 기능을 하는 작은 서비스를 각각 개발해서 연결함, 보안 인증 등과 관련된 기능이 독립된 서비스를 구성하고 있음
장점
- 전체프로그램을 다시 배포하지 않고도 업데이트가 가능
- 독립적으로 개발가능 서비스 하나가 다운되더라도 전체 서비스에 영향을 끼치지 않음
- 서비스를 독립적으로 확장가능
- 리소스의 유연한 운용 가능
- 각 서비스에 따라 개별적으로 서버를 나눌 수 있어 메모리 및 cpu 관리에 효율적이다.
- 각 서비스가 모듈화 되어있고 모듈끼리 RPC, Message-driven 이용하여 통신하기 때문에 각 서비스의 개발 속도가 증가한다.
단점
- 서비스간 통신방법이 필요하고 복잡함
- 서비스끼리의 테스트가 어려움
- 복잡하고 독립된 구조로 인해 통합적인 유지관리가 어려워질 수 있음
- 서비스 간 호출 시 REST API 사용으로 인한 통신비용, Latency(지연시간)가 증가한다.
- 서비스가 분산되어 있어 트랜잭션 관리, 장애 추적 및 테스트 등이 쉽지 않다.
- 서비스마다 DB가 분리되어 데이터의 조회가 어렵고 데이터의 중복이 발생한다.
- 전체 서비스가 커짐에 따라 복잡도가 기하급수적으로 늘어날 수 있다.
** 왜 MSA 인가
MicroService Architecture가 클라우드환경과 찰떡궁합
잠시 Monolithic구조를 다시 살펴보면 각각의 모듈들이 합쳐져 큰덩어리로 시스템이 구축되어 있습니다.
사용량이 적은 모듈을 삭제한다고 하더라도 전체 시스템의 스펙은 변하지 않기 때문에
사용량단위로 과금을 해야하는 cloud환경에서는 비효율적!
하지만 MicroService구조는 서비스단위로 기능을 분리해서 구축할 수 있기 때문에, 사용하지 않는 기능 또는 사용량이 적은 기능을 축소해서 효율화시킬 수 있음.
비용면에서는 클라우드환경에서 MSA가 압승이지만 모든것이 완벽하지는 않음.
MSA로 시스템을 구축하게되면 그에 따른 새끼서비스들도 늘어나게되고 관리해야할 포인트가 증가하게 되는 단점도 존재.
그럼에도 불구하고 서비스들의 재사용성, 클라우드환경에 친화적이라는 장점때문에 현재 가장 핫한 아키텍처가 됨.
출처 - https://gruuuuu.github.io/cloud/architecture-microservice/
비교 도식
'TOTAL IT' 카테고리의 다른 글
오라클 DB와 GROUPING / GROUPING_ID / ROLLUP (0) | 2024.07.23 |
---|---|
MVC Pattern과 MVC1, MVC2 Model (0) | 2024.07.02 |
Spring(프레임워크)의 request process (0) | 2024.07.02 |
CS 지식 채우기 한 스푼 (네트워크) (0) | 2024.04.25 |
SSO (싱글 사인온)에 대해 (0) | 2024.04.22 |