Microservice Architecture 란?
- 애플리케이션을 자율적인 다수의 서비스로 분리하여 개발
- 각자 별도의 프로세스에서 실행되며 가벼운 매커니즘으로 통신하는 작은 애플리케이션
- 작은 서비스들은 각자의 비즈니스 기능을 담당, 자동화된 절차에 독립적인 배포
- 각 서비스는 다른 프로그래밍 언어나 서로 다른 데이터 저장기술을 사용 가능
MSA 특징
MSA가 Monolithic의 문제를 해결
- 작은 서비스 단위로 확장 가능
- 일부의 장애가 시스템 전체 장애로 이어지지 않음
- 서비스 단위로 자율적 배포 가능
- 결과적으로 빠르게 변화하는 비즈니스 환경에 민첩하게 대응 가능
서비스를 통한 컴포넌트 화
- MSA에서는 서비스 단위를 컴포넌트로 정의
- 서비스는 응집도 높게 설계되어야 함
- 서비스 간에는 명확한 인터페이스가 필요
비즈니스 역량에 따른 조직 구성
- Conway의 법칙 : 시스템을 설계하는 조직은 그 조직의 소통 구조를 닮은 아키택처를 만든다.
프로젝트보다 제품에 집중
- 기존에는 개발(SI)과 운영(SM)이 분리되어 있음 -> 개발/운영 전체 라이플을 관리
- 단순 기능의 집합을 개발하여 넘기는 것이 아닌 가치를 전달할 수 있는 계기가 됨
똑똑한 End Point, 단순한 Pipe
- 도메인 로직은 각 서비스 내에 응집도 높게 유지
- 각 서비스 간의 연결은 HTTP API, MQ 등 사용
분산된 거버넌스
- 중앙에 강력한 표준이나 절차의 준수를 강요하지 않음
- 스스로 효율적인 방법론과 도구, 기술을 찾아 적용 (Like 지방자치제도)
분산된 데이터 관리
- 해당 서비스의 데이터 각자 관리
- 서로 다른 데이터 저장기술을 사용 가능
- 각 서비스는 API를 통해서만 다른 서비스의 데이터에 접근
- 트랜잭션 처리 어려움, 결과적 일관성의 적용
인프라 자동화
- CI/CD 등
장애 방지 설계
- 일부 서비스 장애가 전체 시스템 장애로 전파되는 것을 막는 것이 핵심
- 장애 발생이 고객에게 미치는 영향을 파악하는 것이 중요
MSA 장점
- 빠른 Delivery : 독립적 개발, 각 서비스의 네트워크를 통한 느슨한 결합
- 탄력적 선택적 확장 : 작은 서비스 단위로 확장, 코드베이스가 작아 상대적으로 비용이 저렴
- Polyglot Architecture 지원 : 특정 Task에 적절한 기술을 적용 가능, 고유한 언어/Framework 선택 가능
- 실험과 혁신 가능 : 작은 코드 베이스, 서비스간 느슨한 결합으로 기술을 쉽게 실험 가능
- 기술 부채 경감 : SW는 나이를 먹는다. Monolith는 강한 결합도 떄문에 코드 수정 어려움. ex) 은행권
MSA 단점
- 컴퓨팅 자원의 사용이 Monolith 보다 비효율적
- 성능 : 내부 호출보다 느림
- 메모리 : jvm 등 중복적인 자원 사용..은 개선이 됨 (서버 자원 비용 절감등을 이유로)
- 운영관리가 어려움 (모니터링 대상 증가, 다양한 장애 상황 발생 등)
- 기술의 다변화 및 단위 테스트 컴포넌트 테스트 난이도 증가
- DB 트랜잭션 처리 어려움, 분산환경에서 트랜잭션 어려움
MSA 도입 조건
사업/조직적 측면
- 중장기적 Business benefit을 올릴 수 있다는 합의 (시간이 오래 걸리기 때문)
- 고위 경영진의 강력한 Commitment 및 용기
- 단순 기술 도입이 아닌, 조직과 프로세스의 개선 작업 필요 (에자일 개발론 등)
- DevOps 문화가 정착이 되어야 함
기술적 측면
- Rapid Provisioning (클라우드, 인프라 자동화, Docker/Kubernetes)
- 정교한 Monitoring 및 장애관리 (다양한 레벨의 실시간 모니터링)
- 자동화 된 배포 (End to end 배포 파이프라인 구축)
질문
어떤 부분부터 분리를 해야 하는가?
- 비즈니스 변화에 민첩하게 대응해야 하는 기능
- 빈번한 빌드/배포
- 유연한 수평 확장이 필요한 기능
- But 중요도가 낮은 것 부터 하는 것이 좋다. (넷플릭스도 전환에 7년이 소요됨)
'Architecture' 카테고리의 다른 글
Kafka 1) 연결 모니터링 (2) | 2024.01.11 |
---|---|
MSA 5) MSA 분리 전략 : 도메인 주도 설계 (0) | 2023.11.01 |
MSA 4) MSA 분리 전략 : 분리 원칙 (0) | 2023.11.01 |
MSA 3) MSA 역량/성숙도 모델 (4) | 2023.10.18 |
MSA 1) MSA를 들어가기 앞서서 : Monolithic System (0) | 2023.10.18 |