반응형
Ⅰ. 모놀리식 아키텍처와 MSA 비교
가. MSA의 개념 및 구성요소
|
||
개념 | 하나의 큰 애플리케이션을 여러 개의 작은 서비스 단위로 나누어 변경과 조합이 가능하도록 만든 아키텍처 | |
구성요소 | - API Gateway | - User Layer와 Micro-Service Layer 연계 - RESTful 기반 Request, Response 관리 |
- API Server | - 독립적으로 배포/관리 가능한 단위로 분리된 개별 서비스를 API 형태로 구현한 서버 계층 | |
- Persistence | - API Server에서 사용하는 데이터 지속성 계층 - 다양한 기술 기반 데이터베이스 활용 |
|
- User/Client | - 웹/모바일 등 클라이언트 어플리케이션 - MSA 제공 서비스를 API 통해 활용 |
나. 모놀리식 아키텍처와 MSA 비교
비교 | 마이크로서비스 아키텍처 | 모놀리식 아키텍처 |
배포 / 구동 | - DevOps 자동화, 고속 | - 배포/서버 가동시간 소요 |
개발 독립성 | - 상호 의존성 낮아짐 | - 전체 서비스 간 영향 높음 |
유지보수 | - 유지보수 용이, 단순 | - 전체 코드 및 서비스 이해 필요 |
확장성 | - 부분적 물리 확장 가능 | - 확장성 / 유연성 낮음 |
생산성 | - 다양한 언어 사용 가능 | - 선택된 특정 언어 의존 |
- 마이크로서비스 아키텍처는 독립적 팀 운영, 아키텍처 선택 자율성, 상향식 개발 가능
Ⅱ. MSA와 DDD(Domain Driven Design)
가. DDD의 개념 및 특징
개념 | 애플리케이션을 핵심 도메인으로 나누어 계속 진화하는 새로운 모델을 만들어 복잡한 애플리케이션을 다루는 소프트웨어 개발 방법 | |
특징 | 느슨한 결합 | - 도메인들 간에는 느슨한 결합으로 연동 인터페이스 설계 |
높은 응집 | - 도메인 내에서는 높은 응집으로 서비스들간 연동 설계 | |
유비쿼터스 언어 | - 개발자와 도메인 전문가 모두 이해 가능한 통일된 언어 | |
경계된 컨텍스트 | - 다른 모델과 구분되는 독립된 컨텍스트 설계 | |
컨텍스트 매핑 | - 경계된 컨텍스트간 데이터 공유 및 전달 매핑 설계 |
나. DDD 고려한 MSA의 설계 원칙
설계 요소 | 설명 | 구체적인 설계방법 |
유비쿼터스 언어 | - 모든 팀원들이 공유하는 공통 언어 사용 - 도메인 지식을 명확하게 전달하고 이해 |
- 도메인 전문가와 개발자 의사소통 - 코드 및 문서 유비쿼터스 언어 반영 |
경계된 컨텍스트 | - 도메인의 경계를 명확히 정의 - 마이크로서비스 독립적 관리 |
- 도메인 모델 기반 서비스 경계 정의 - 서비스 간 의존성 최소화 |
어그리게이트 | - 도메인 내에서 일관성 있는 트랜잭션 단위 정의 - 각 서비스는 자신만의 Aggregate 관리 |
- Aggregate가 관리하는 비스니스 로직 및 데이터 중심으로 설계 |
서비스 간 인터페이스 | - 마이크로서비스 간의 인터페이스 명확한 정의 - 서비스 간 계약 명확히 정의 |
- REST API, gRPC 프로토콜 사용 - 이벤트 기반 통합 |
이벤스 소싱 | - 도메인 모델의 상태 변경을 이벤트로 기록하고 이를 기반으로 상태를 복원 | - 상태 변화가 중요한 도메인에 이벤트 저장 - 이벤트 로그 통해 상태 추적 및 복원 |
CQRS | - 명령과 조회를 분리하여 성능과 확장성 개선 | - 명령/조회 분리, 쓰기/읽기 분리 |
독립적 데이터 저장소 | - 각 서비스는 독립적인 데이터 저장소 설계 - 데이터의 분리와 독립성을 보장 |
- 마이크로서비스별 데이터베이스 구축 - 서비스 간 데이터 공유 최소화 |
통합 및 협업 | - 서비스들 협업에 대한 전략 고려하여 설계 | - 이벤트 기반 아키텍처 비동기 처리 |
- 도메인 복잡성 관리, 독립적 확장, 서비스 경계와 책임 정의, 팀간 협업 지원
Ⅲ. Micro Service Architecture의 문제점 및 개선 방안
구분 | 문제점 | 개선 방안 |
설계 및 개발 | - 서비스 통합 복잡성 | - API Gateway 도입으로 요청 중앙 관리 - 서비스 메시 도입으로 통신 효율적 관리 |
- 데이터 일관성 문제 | - 이벤트 소싱 및 CQRS(명령과 질의 책임 분리) 적용 - 최종 일관성을 통해 비즈니스 로직 구현 |
|
- 개발자 및 팀간 협업 문제 | - 도메인 주도 설계 및 각 팀 명확한 책임 구분 - 문서화 및 코드 리뷰 프로세스 강화 |
|
배포 | - 배포 및 관리 복잡성 | - 쿠버네티스 등 오케스트레이션 툴 사용 - CI/CD 파이프라인 통해 지속 배포 |
- 버전 관리 및 호환성 문제 | - API 버전 관리로 호환성 문제 해결 - Backward Compatibility 고려 서비스 |
|
유지보수 | - 모니터링 및 디버깅 어려움 | - 중앙집중식 로깅(ELK Stack) 및 모니터링 시스템(Grafana) 구축 - 분산 추적(OpenTelemetry, Jaeger) 도입 |
- 서비스간 의존성 관리 어려움 | - 서비스 간 의존성 최소화 및 독립적 서비스 설계 - Circuit Breaker 패턴 도입으로 장애 전파 방지 |
Ⅳ. MSA 도입 시 고려사항
고려사항 | 설명 | 구체적인 고려 요소 |
서비스 설계 | - 각 서비스는 독립적으로 동작하도록 설계 - 설계 시 각 서비스 역할 책임 명확히 정의 |
- 서비스간 의존성 최소화 - 도메인 주도 설계 적용 |
운영 및 인프라 | - 마이크로서비스는 여러 서비스로 분리되어 운영되므로 효율적으로 관리하고 모니터링 필요 | - 서비스 오케스트레이션 도입 - 자동화된 배포 파이프라인 |
팀과 커뮤니케이션 | - 여러 팀이 각기 다른 서비스를 개발하는 방식이므로 팀 간의 협업과 소통이 중요 | - 서비스 간 인터페이스 계약 관리 - DevOps 문화 및 CI/CD 도입 |
반응형
'IT 기술 > SW공학 & 프로젝트 관리' 카테고리의 다른 글
WBS (0) | 2025.01.06 |
---|---|
XP(eXtreme Programming)특징 및 실천 방법 (0) | 2024.07.11 |
MSA와 Service Mesh (0) | 2024.07.03 |
MVC, MVP, MVVM, MVI 디자인 패턴 (0) | 2024.07.03 |
객체 지향 프로그래밍(OOP) 특징 (0) | 2024.07.02 |