56
클라우드 네이티브
신뢰성
reliability
은 애플리케이션이 장애가 발생해도 여전히 작동을 신뢰할 수 있다는 것을 의미합
니다. 하지만
가용성
availability
은 일정 시간 동안 이용 가능하다는 것을 의미합니다.
신뢰성 관점에서 보면, 애플리케이션이 장애를 극복할 수 있도록 설계해야 합니다. 앞서 살펴
봤듯이, 마이크로서비스 아키텍처는 각 서비스가 독립되어 있고 장애 시에도 전체 애플리케이
션이 다운되지 않는다는 점에서 이런 것을 고려할 때 도움을 줄 수 있습니다. 서비스는 전체 시
스템의 가용성을 높이기 위해 수평적 확장을 고려해야 합니다. 예를 들어 어떤 서비스의 인스
턴스가 두 개 실행 중이라면 그중 하나에 장애가 발생한 경우 더 나은 신뢰성을 제공할 수 있습
니다. 이미 앞에서 네트워크는 믿을 수 없다는 사실을 살펴봤습니다. 그래서 설계할 때 항상 재
시도와 서킷 브레이커를 고려해야 합니다. 이에 대해서는
3
.
8
절에서 좀 더 자세히 다룹니다.
정리하자면, 신뢰성과 가용성을 고려한 설계를 한다면 시스템이 어떻게 동작하고, 복구 메커니
즘이 어떻게 작동하는지 확인할 수 있는 테스트를 해야 합니다. 물론, 애플리케이션을 스케일
링할 수 있다는 장점을 이용해 자동으로 회복할 수 있어야 합니다.
3.1.4
확장성과 비용
확장성과 비용은 매우 밀접한 관계입니다. 클라우드 네이티브 애플리케이션을 설계할 시 애플
리케이션을 어떻게 확장할 것인지만 생각할 뿐만 아니라 가장 비용 효율적인 방법도 생각해야
합니다. 투표 애플리케이션을 다시 떠올려봅시다. ...