MSA의 장점
- 빠른 Delivery
- Polyglot Architecture 지원
- 실험과 혁신 가능
- 탄력적이고 선택적인 확장
- 대체가능성
- 기술 부채의 경감
빠른 Delivery
각 서비스는 독립적으로 개발되고 느슨하게 결합
서비스는 작기 때문에 코드 수정에 대한 영향 범위가 상대적으로 작음
- 빠른 영향도 파악, 빠른 빌드, 빠른 테스트
각 서비스들은 네트워크를 통한 Interface로 느슨히 결합됨
- 서비스 간 자율적인 배포 가능
Polyglot Architecture 지원
전통적 개발 환경은 조직의 표준 기술을 만들고 모든 조직에 강제
특정 Task에 가장 적절한 기술을 적용 가능
각 서비스는 자신만의 고유한 언어/프레임워크 선택 가능
실험과 혁신 가능
최근 비즈니스 상황에서는 기술의 혁신이 필수적
Monolith 환경에서는 단순한 기술 실험도 어려움
- DB/Framework 변경은 물론 언어의 버전 업도 영향도와 비용 문제로 인하여 어려운 작업
마이크로서비스는 작은 코드 베이스, 서비스 간 느슨한 결합으로 새로운 기술들을 쉽게 실험해 볼 수 있음
탄력적이고 선택적인 확장
작은 서비스 단위로 확장 가능
Monolith는 전체 Scale Out이 필요하여 비효율적
각 서비스는 코드베이스가 작아 확장 비용이 상대적으로 저럼
대체가능성
언어/프레임워크를 완전히 새롭게 개발하거나 오픈소스/커머셜 솔루션으로 대체 가능
- 각 서비스가 작고 서비스 간에 느슨하게 연결되어 있기 때문
기술 부채의 경감
S/W도 나이를 먹고 관리하지 않으면 기술 부채가 쌓임
MSA는 서비스 크기가 작아 품질 관리에 용이
품질 향상을 위한 코드 개선 시 영향도 작음
- 지속적인 개선 작업이 조직의 문화로 자리잡을 수 있음
MSA의 단점
컴퓨팅 자원의 사용이 Monolith보다 비효율적
- 성능: 내부 호출보다 느리다
- 메모리: JVM 등 중복적인 자원 사용
운영 관리가 어려움
모니터링 대상 증가
배포 대상 서비스 증가 및 기술의 다변화
다양한 장애 상황 발생
단위 테스트 컴포넌트 테스트 난이도 증가
DB 트랜잭션 처리 어려움
서비스 간 Polyglot Data Store 사용
분산 환경에서 트랜잭션 어려움
트랜잭션(Transaction)?
Query가 실행되면 모든 과정이 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위이다.
트랜잭션은 4가지 특성을 가지고 있는데 앞 글자를 따 ACID 특성이라고 한다.
- 원자성 (Atomicity)
- 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장
- 일관성 (Consistency)
- 트랜잭션 수행 전, 후에 데이터 모델의 모든 제약 조건을 만족하는 것을 보장
- 격리성 (Isolation)
- 트랜잭션 수행시 다른 트랜잭션이 끼어들지 못하도록 보장
- 이로 인하여 deadlock이 발생할 수 있으므로 주의
- 지속성 (Durability)
- 성공적으로 수행된 트랜잭션은 영원이 반영되도록 보장