728x90
반응형
마이크로서비스 아키텍처(Microservices Architecture) 소개 #1
Introduction to Microservices Architecture
마이크로서비스 아키텍처(Microservices Architecture)는 소프트웨어 시스템을 작고 독립적인 서비스 단위로 분할하여 개발하고 배포하는 소프트웨어 아키텍처 패턴입니다.
이 아키텍처 패턴은 전통적인 모놀리식 아키텍처와 대조적으로, 하나의 큰 애플리케이션을 여러 개의 작은 서비스로 나누어 각 서비스가 고유한 기능을 수행하고, 독립적으로 운영됩니다.
각 마이크로서비스는 자체적으로 배포 가능하며, RESTful API 등을 통해 서로간에 통신합니다.
마이크로서비스 아키텍처의 특징
- 독립적 배포성: 각 마이크로서비스는 자체적으로 배포 가능하며, 서로간에 영향을 미치지 않습니다. 이로 인해 새로운 기능을 빠르게 출시하고 오류를 수정할 수 있습니다.
- 높은 확장성: 각 마이크로서비스는 독립적으로 확장할 수 있으므로 시스템 전체적으로 자원을 효율적으로 사용할 수 있습니다.
- 느슨한 결합: 각 마이크로서비스는 독립적으로 개발되고 운영되기 때문에 다른 서비스와의 결합도가 낮아집니다.
- 다양한 기술 스택: 각 서비스는 독립적으로 개발되므로 필요에 따라 다른 기술 스택과 언어를 사용할 수 있습니다.
- 팀 자율성: 각 마이크로서비스는 독립적으로 운영되므로 팀별로 자율성을 갖게 됩니다.
- 높은 가용성: 하나의 서비스 장애가 전체 시스템에 영향을 미치지 않으므로 전체적인 가용성이 향상됩니다.
전문용어 설명
- 서비스 디스커버리 (Service Discovery): 서비스 디스커버리는 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 파악하는 메커니즘을 의미합니다. 클라이언트가 서비스 디스커버리를 사용하여 특정 서비스의 위치를 알아내고, 해당 서비스와 통신할 수 있습니다. 대표적으로 Netflix의 Eureka가 있습니다.
- API 게이트웨이 (API Gateway): 클라이언트와 서비스 간의 통신을 중개하는 역할을 수행하는 서비스를 의미합니다. API 게이트웨이는 단일 진입점을 제공하여 보안, 로깅, 라우팅 등의 기능을 담당합니다. 대표적으로 Netflix의 Zuul, Spring Cloud Gateway가 있습니다.
- 분산 데이터 관리 (Distributed Data Management): 각 마이크로서비스가 자체 데이터베이스를 가질 수 있으며, 데이터의 일관성을 유지하기 위해 이벤트 소싱, CQRS 패턴 등을 고려합니다. 이를 통해 데이터를 일관성 있게 유지하고 서비스 간의 데이터 동기화를 보장합니다.
- 분산 트랜잭션 (Distributed Transaction): 여러 서비스 간의 트랜잭션 처리를 위해 사용하는 기술입니다. 분산 트랜잭션 매니저를 사용하여 여러 서비스의 트랜잭션을 하나로 묶고, 일관성을 유지할 수 있습니다.
- 서킷 브레이커 (Circuit Breaker): 서비스 간의 호출에서 발생할 수 있는 장애를 처리하는 패턴입니다. 서킷 브레이커는 서비스 호출이 실패할 경우, 일정 시간 동안 해당 호출을 차단하고 빠르게 실패 응답을 반환하여 전체 시스템의 안정성을 보장합니다.
- CQRS (Command Query Responsibility Segregation): CQRS 패턴은 읽기와 쓰기를 위한 서비스를 분리하는 패턴입니다. 읽기 요청과 쓰기 요청을 각각 다른 서비스가 처리하도록 분리함으로써 시스템의 복잡성을 줄이고 성능을 향상시킵니다.
성공사례
- Amazon:
- Amazon은 기본적으로 대규모 분산 시스템을 운영하기 때문에 마이크로서비스 아키텍처를 적용하여 서비스의 확장성과 가용성을 향상시켰습니다. 각 서비스를 독립적으로 개발하고 배포하여 개발 속도를 높였고, 이로 인해 새로운 기능을 빠르게 출시하여 고객들의 요구에 신속하게 대응할 수 있었습니다.
- 넷플릭스 (Netflix):
- 넷플릭스는 대규모 비디오 스트리밍 서비스를 운영하는데, 마이크로서비스 아키텍처를 적용하여 확장성과 유연성을 강화했습니다. 각 마이크로서비스는 자체적으로 확장 가능하며, 오류 발생 시 해당 서비스만 영향을 받아 시스템 전체적인 가용성이 향상되었습니다. 또한, A/B 테스트와 같은 개발 문화를 활용하여 새로운 기능을 실험하고 고객들의 반응을 신속하게 확인하여 서비스 개선에 활용했습니다.
- Uber:
- Uber는 글로벌적으로 많은 사용자들이 사용하는 승차공유 서비스입니다. 마이크로서비스 아키텍처를 적용하여, 각 지역의 요구사항과 법규에 맞춘 서비스를 개발하고 배포하였고, 이는 빠른 서비스 개발과 다양한 지역에 대한 적응성을 가능하게 했습니다.
실패사례
- Zalando:
- 유럽의 온라인 패션 리테일러인 Zalando는 마이크로서비스 아키텍처를 도입했지만 초기에는 서비스 간 통신, 데이터 일관성 등에 어려움을 겪었습니다. 초기의 잘못된 구현과 테스트 부족으로 인해 복잡성이 증가하고, 일부 서비스에서 장애가 발생하는 등의 문제가 발생했습니다. (하지만 이후에 기술과 프로세스를 개선하여 성공적으로 적용했습니다.)
- SoundCloud:
- 음악 스트리밍 서비스인 SoundCloud는 마이크로서비스 아키텍처를 도입하여 서비스 확장성을 향상시키고자 했습니다. 하지만 초기에는 트래픽의 급증으로 인해 서비스 간의 통신과 데이터베이스 관리에 어려움을 겪었습니다. 이로 인해 서비스의 가용성과 안정성에 영향을 미치는 문제가 발생했습니다. (이후에는 기술과 인프라를 개선하여 성공적으로 적용했습니다.)
728x90
반응형