소프트웨어 시스템에서 중요하게 여기는 세가지 관심사는 신뢰성 확장성 유지보수성이다.
우선 신뢰성은 하드웨어나 소프트웨어 결함과 같이 무언가 잘못되더라도 지속적으로 올바르게 동작함을 이야기 한다.
마치 기계를 학습시키듯 고의적으로 결함을 유도함으로써 지속적으로 훈련하고 테스트해서 결함이 자연적으로 발생했을 때 잘 처리할 수 있도록 자신감을 높인다. 넷플릭스의 카오스 몽키가 하나의 예시다.
카오스 몽키는 아마존 웹 서비스 인프라의 프로덕션 인스턴스를 무작위로 마비시키도록 고안됐다. 그렇게 해서 약점이 노출되면 넷플릭스 엔지니어들이 더 나은 자동 복구 메커니즘을 구축해 이 약점을 없애도록 하는 것이 목적이었다. 즉 카오스 몽키라는 단어 의미처럼 무기를 든 야생 원숭이가 데이터 센터에 들어와 무작위로 인스턴스를 파괴하고 케이블을 끊더라도 중단 없이 고객에게 서비스를 제공한다는 개념이다.
다음으로 시스템이 현재 안정적으로 동작하여도 미래에 안정적으로 동작한다는 보장이 없기 때문에 성능 저하를 유발하는 흔한 이유 중 하나는 부하 증가이다. 따라서 확장성은 복잡도가 증가하면서 이를 처리할 수 있는 적절한 방법이 있어야 함을 이야기 한다.
아마존 내부 서비스의 응답 시간 요구사항을 99.9분위로 기술하고 있다. 99.9분위는 요청 1000개 중 1개만 영향을 주는 것이다.
보통 응답 시간이 가장 느린 요청을 경험한 고객들은 많은 구매를 해서 고객 중에서 계정에 가장 많은 데이터를 갖고 있어서 어쩌면 가장 소중한 고객이라고 여길 수 있다. 아마존은 응답 시간이 100밀리초 증가하면 판매량이 1% 줄어들고 1초가 느려지면 고객의 만족도 지표는 16% 줄어드는 현상을 관찰하기도 했다고 한다.
다만 신뢰성, 확장성을 달성하기 위한 쉬운 해결책은 없다. 운용성, 단순성, 발전성을 염두에 두고 시스템을 생각해야 한다. 즉 유지보수성에 대해서 더욱 고려해야 된다.
운용성은 운영팀이 시스템을 원활하게 운영할 수 있게 쉽게 만드는 것을 뜻하며 단순성은 복잡도를 최대한 제거해서 시스템을 이해하기 쉽게 만드는 것이다. 발전성은 이후에 시스템을 쉽게 변경할 수 있게 하는 것이다. 항상 운용성, 단순성, 발전성을 우선적으로 생각하며 시스템을 다룰 필요가 있다.
'DB' 카테고리의 다른 글
[SQL] 프로그래머스 고득점 kit 풀이 (0) | 2023.02.21 |
---|---|
프렌차이즈 레스토랑 DB구축 프로젝트 (0) | 2023.01.10 |