서비스 아키텍처
2023. 5. 12. 22:38ㆍ기타
이전에 다니던 회사에서 작업한 서비스들은 모두 MSA로 애플리케이션을 구현했었다.
그래서 MA의 특징과 MA와 MSA의 차이점, 그리고 각각의 장단점에 대해서 몰랐다..!
앞으로 신규 프로젝트를 설계할 때 어떤 아키텍처를 선택할 지 기준을 세우기 위해 정리해봤다.
MA vs MSA
MA(Monolithic Architecture: 모놀리식 아키텍처)
MSA(MicroService Architecture: 마이크로서비스 아키텍처)
모놀리식 서비스 아키텍처
Monolithic
: 단단히 짜여 하나로 되어있는
어플리케이션이 하나의 아키텍처로 구성되어있는 형태
대부분의 기업용 어플리케이션이 이에 해당
여러 비즈니스 로직들을 담은 하나의 시스템이 하나의 DB와 하나의 애플리케이션과 상호작용
모든 기능들이 하나의 시스템에서 동작
장점
- 개발과 관리가 용이
- 개발 환경 세팅에 시간이 덜 든다. 환경을 고려한 개발이 쉬움
- 모든 기능들에 대한 테스트(End to End)를 하기 쉬움
단점
- 서비스 크기에 비례하여 시스템이 무거워짐
- 시스템이 복잡해지고 커질수록 코드를 이해하기 어려움 (유지보수의 어려움)
- 작은 버그를 수정하더라도 전체를 다시 빌드/배포 해야함 (수정사항 즉시 적용이 어려움)
- 특정 기능에 오류 발생시 전체 시스템이 먹통이 됨 (작은 요소가 전체 시스템에 영향을 미침)
- 하나의 시스템으로 구성되기 때문에 기능별로 알맞은 언어 및 프레임워크를 선택하기 어려움
마이크로서비스 아키텍처
여러 모듈을 조합하여 애플리케이션을 구현하는 방식 (모듈: 경량화되고 독립적인 서비스)
모듈마다 자체 DB를 가지고 있기 때문에 개발부터 배포까지 효율적으로 수행 가능
여러 비즈니스 로직은 기능(모듈)별 각자의 DB 환경을 공유하고, 모듈별로 애플리케이션과 독립적으로 통신
서비스별로 서로 독립적인 시스템으로 구성
장점
- 하나의 기능을 개발 할 때 봐야하는 코드 양이 적음 (이해가 쉬움, 유지보수의 용이성)
- 하나의 서비스에 대한 문제는 하나의 서비스만 수정하여 빌드/배포하면 됨
따라서 상대적으로 빌드/배포가 빠름 - 각 기능에 맞는 언어와 프레임워크를 선택할 수 있음
단점
- 여러 모듈로 분산되어있어 관리 및 모니터링이 어려움
- 시스템이 커질수록 각각의 서비스가 독립적이기 힘들어짐
ex) MA일 경우 단순히 같은 시스템 내부에서의 method 호출
MSA일 경우 http 통신 등을 통해 호출해야함 - 모듈별로 애플리케이션과 통신하므로 다양한 통신에서 발생하는 오류가 상대적으로 잦음
- 상대적으로 통합테스트(시스템의 동작을 모두 확인하는 테스트)를 하기 어려움
ex) 통합 테스트를 End-to-End로 진행하기 위해서 각각의 마이크로 모듈과 UI, Gateway를 구동시켜야함
서비스의 확장 가능성을 고려햐여 모놀리식 아키텍처와 마이크로서비스 아키텍처를 적절하게 선택해야한다.
서비스의 확장 가능성이 낮거나 시스템이 크지 않을 경우 : 모놀리식 아키텍처
서비스의 확장 가능성이 높거나 시스템이 클 경우 : 마이크로서비스 아키텍처
를 사용하는 것이 적절하다.
'기타' 카테고리의 다른 글
줄바꿈의 종류 - LF, CR, CRLF (0) | 2021.02.10 |
---|---|
공백 문자(whitespace)를 인코딩하면 (0) | 2020.12.10 |