Search
🐗

데이터 중심 애플리케이션 설계

데이터 중심 애플리케이션 설계
목차

01장. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

요즘 애플리케이션은 계산 중심(compute-intensive)보다는 데이터 중심(data-intensive) 애플리케이션이 대다수이다.
더이상 CPU 성능이 애플케이션을 제한하는 요소가 아니다. 더 큰 문제는 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도이다.
일반적으로 데이터 중심 애플리케이션은 공통으로 다음과 같은 것들을 필요로 한다.
나중에 다시 데이터를 찾을 수 있게 데이터를 저장하는 데이터베이스(database)
읽기 속도 향상을 위해 값비싼 수행 결과를 기억하는 캐시(cache)
사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공해주는 검색 색인(search index)
비동기 처리를 위해 다른 프로세스로 메시지를 보내는 스트림 처리(stream processing)
주기적으로 대량의 누적된 데이터를 분석하는 일괄 처리(batch processing)
우리가 이런 시스템을 사용하려고할 때, 저장소 엔진을 어떻게 만들지 고민하지 않는다.
그 이유는 이런 시스템들을 제공하는 것들이 추상화가 너무 잘 되어있기 때문이다. 그래서 잘 ‘활용’만 하면된다.
하지만 현실은 그리 쉽지 않다.
단 하나의 도구만으로 충족할 수 없는 상황들이 많아 여러 애플리케이션을 결합해서 활용해야만 한다.
그러나 각 애플리케이션마다 요구사항이 다르고 다양한 특성들을 가지고 있기 때문에, 어떤 접근 방식을 취하냐에 따라 적합한 애플리케이션들이 다르다.
이번 장에서는 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 데이터 시스템을 구축하기 위한 기초적인 노력을 살펴보는 것으로 시작한다.
신뢰성, 확장성, 유지보수성의 의미를 명확히 알고 이를 고려하는 몇 가지 방법을 개략적으로 알아보고자 한다.

신뢰성(Reliability)

“무언가 잘못되더라도 지속적으로 올바르게 동작함”을 보장하는 것이 신뢰성이라고 할 수 있다.
잘못될 수 있는 일을 결함(fault)라고 부른다. 그리고 결함을 예측하고 대처할 수 있는 시스템을 내결함성(fault-tolerant) 또는 탄력성(resilient)을 지녔다고 말한다.
다음은 각 결함에 대해 신뢰성을 보장하기 위한 방법을 알아본다.

하드웨어 결함

하드웨어 결함으로 인해 시스템 장애가 일어나는 경우 이를 해결하기 위해서 각 하드웨어 구성 요소에 중복(redundancy)을 추가하는 방법이 있다.

소프트웨어 오류

또 다른 부류의 결함으로 시스템 내 체계적 오류가 있다. 이 결함은 쉽게 말해 OS 수준에서 발생하는 장애를 말한다.
이 경우 신속한 해결책이 없다. 주의깊게 고려하고 테스트하고 측정하고 모니터링을 하며 대응해야 한다.

인적 오류

사람이 미덥지 않음에도 시스템을 신뢰성있게 만들려면 다음을 준수해야 한다.
오류의 가능성을 최소화하는 방향으로 시스템을 설계하라
사람의 실수로 장애가 발생할 수 있는 부분을 분리하라
장애 발생의 영향을 최소화하기 위해 인적 오류를 빠르고 쉽게 복구할 수 있게 하라
성능 지표와 오류율 같은 상세하고 명확한 모니터링 대책을 마련하라
조작 교육과 실습을 시행하라 (이 항목의 경우 잘 이해하지 못했다.)

확장성(Scalability)

유지보수성(Maintainability)