마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 서비스들로 분리하여 개발하고 배포하는 소프트웨어 아키텍처 스타일이다. 각 서비스는 특정 비즈니스 기능을 수행하며, 다른 서비스와 독립적으로 개발, 배포, 확장될 수 있다.
단일 애플리케이션을 여러 작은 단위로 쪼갠 형태로, 이러한 작은 서비스들은 서로 통신하면서 전체 애플리케이션을 구성한다. 전통적인 단일체 구조(모놀리틱 아키텍처)와 대조되는 방식이다.
ㅇ 특징
- 독립적인 서비스
애플리케이션이 여러 독립 서비스로 나누어진다. 각각의 서비스는 특정 비즈니스 도메인에 대한 기능을 수행하며 다른 서비스와 독립적으로 운영될 수 있다. - 작은 단위의 개발과 배포
각 서비스는 별도의 코드 베이스를 가지고 있어, 독립적인 개발, 빌드, 배포가 가능하다. 이를 통해 특정 서비스에 대한 변경을 다른 서비스에 영향없이 수행할 수 있다. - 자율적인 팀
마이크로서비스는 독립적인 배포 가능성을 가지고 있기 때문에, 각 서비스는 별도의 팀에서 관리할 수 있다. 팀은 전체 시스템의 일부분에 대한 개발과 배포만 책임지며 이를 통해 민첩성이 증가한다. - 다양한 기술 스택 사용 가능
필요에 따라 적합한 기술 스택을 사용할 수 있다 한 서비스는 java로 다른 서비스는 python으로 개발할 수 있고 DB 역시 다르게 선택할 수 있다. - 경량화 통신
MSA간 통신은 일반적으로 REST API, gRPC, 메세지 큐 등을 통해 이루어지며 서비스 간에 비동기적으로 데이터를 주고 받는다.
ㅇ 장단점
장점
- 유연성 및 확장성
각 서비스가 독립적으로 배포되고 확장될 수 있기 때문에 특정 서비스에 대한 트래픽 증가에 맞춰 별도로 확장 가능합니다. 시스템 자원을 효율적으로 사용 가능하다. - 신속한 개발과 배포
각 서비스가 독립적으로 운영되므로 작은 단위로 빠르게 개발 배포가 가능하다. 애자일 방법론과 잘 어울리며 빠른 피드백 루프를 제공한다 - 독립적인 유지보수
한 서비스에 대한 변경이 다른 서비스에 영향을 미치지 않기 때문에 수정과 유지보수가 용이하다. - 기술 선택의 유연성
각 MSA는 독립적으로 기술을 선택할 수 있어 적합한 언어와 DB를 사용할 수 있다. - 개발 팀의 독립성
여러 팀이 동시에 개발을 진행할 수 있다. 조직의 효율성이 높아진다.
단점
- 복잡성 증가
작은 서비스가 많아지면서 네트워크 호출이 늘어나고 서비스간 통신이 복잡해진다. 이를 해결하기 위해 서비스간 API 게이트웨이나 메세지 브로커와 같은 추가 인프라가 필요할 수 있다. - 데이터 일관성 문제
각 MSA가 독립된 데이터 저장소를 사용하기 때문에 일관성을 유지하기 어려울 수 있다. 분산 트랜잭션이나 사간트패턴같은 기법이 필요할 수 있다. - 운영 및 모니터링의 어려움
서비스가 많아지면 모니터링과 로그 관리를 복잡하게 만든다. 분산된 여러 서비스에서 발생하는 문제를 추적하기 위해서는 중앙 집중형 모니터링 및 로깅 시스템이 필요하다. - 네트워크 오버헤드
서비스간 네트워크 통신이 많아지므로 성능 저하 및 지연이 발생할 수 있다.
ㅇ VS 모놀리틱 아키텍처
마이크로서비스 | 모놀리틱 | |
구조 | 독립적인 여러 서비스 | 단일 애플리케이션 |
개발 및 배포 | 개별 서비스만 독립적으로 배포 가능 | 전체를 한번에 배포 |
확장성 | 개별 서비스 단위로 확장 | 전체 애플리케이션 확장 |
기술 선택 | 각 서비스별로 다른 기술 스택 사용가능 | 동일한 기술 스택 |
팀 구조 | 서비스별 자율적 팀 운영 | 하나의 큰 팀에서 협업 |
장애 복구 | 장애가 발생해도 다른 서비스에 영양 최소화 | 전체 애플리케이션에 영향 |
데이터 관리 | 독립적인 데이터 저장소 | 중앙 집중형 데이터베이스 |
복잡성 | 초기 설정 관리 복잡, 각 서비스 유지보수용이 | 초기 설정 간단, 대규모 애플리케이션에서 복잡성 증가 |
'Software Engineering' 카테고리의 다른 글
Third Party (2) | 2024.10.23 |
---|---|
DevOps (2) | 2024.10.23 |
OOP 객체 지향 프로그래밍(Object-Oriented Programming) (1) | 2024.10.23 |
애자일(Agile) 방법론 (1) | 2024.10.23 |
TDD(Test-Driven Development) (0) | 2024.10.23 |