1장. 안정적이고 확장 가능하며 유지 관리가 용이한 애플리케이션
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
인터넷은 너무 잘 만들어져서 대부분의 사람들은 인터넷이 인간이 만든 것이 아니라 태평양과 같은 자연스러운 자원이라고 생각합니다. 이 정도 규모의 기술이 이렇게 오류가 없던 적이 언제였을까요?
앨런 케이, 닥터 돕스 저널과의 인터뷰(2012)
오늘날 많은 애플리케이션은 컴퓨팅 집약적이기보다는 데이터 집약적입니다. 이러한 애플리케이션에서 원시 CPU 성능은 거의 제한 요소가 되지 않으며, 더 큰 문제는 일반적으로 데이터의 양, 데이터의 복잡성, 데이터의 변화 속도입니다.
데이터 집약적인 애플리케이션은 일반적으로 일반적으로 필요한 기능을 제공하는 표준 빌딩 블록으로 구축됩니다. 예를 들어, 많은 애플리케이션이 그래야 합니다:
-
나중에 자신 또는 다른 애플리케이션이 다시 찾을 수 있도록 데이터를 저장(데이터베이스)
-
읽기(캐시) 속도를 높이기 위해 비용이 많이 드는 작업의 결과를 기억하세요.
-
사용자가 키워드로 데이터를 검색하거나 다양한 방식으로 필터링할 수 있도록 허용(검색 색인)
-
비동기적으로 처리할 다른 프로세스로 메시지 보내기(스트림 처리)
-
축적된 대량의 데이터를 주기적으로 크런칭(일괄 처리)
너무 당연하게 들린다면, 데이터 시스템이 매우 성공적으로 추상화되어 있기 때문에 우리는 별다른 생각 없이 항상 데이터 시스템을 사용하고 있기 때문입니다. 애플리케이션을 구축할 때 대부분의 엔지니어는 데이터베이스가 작업에 완벽하게 적합한 도구이기 때문에 처음부터 새로운 데이터 저장 엔진을 작성하는 것은 꿈도 꾸지 않을 것입니다.
하지만 현실은 그렇게 간단하지 않습니다. 애플리케이션마다 요구 사항이 다르기 때문에 서로 다른 특성을 가진 데이터베이스 시스템이 많이 있습니다. 캐싱에 대한 다양한 접근 방식, 검색 인덱스를 구축하는 여러 가지 방법 등이 있습니다. 애플리케이션을 구축할 때는 어떤 도구와 어떤 접근 방식이 당면한 작업에 가장 적합한지 파악해야 합니다. 그리고 하나의 도구만으로는 할 수 없는 작업을 수행해야 할 때 여러 도구를 결합하는 것은 어려울 수 있습니다.
이 책은 데이터 시스템의 원리와 실용성, 그리고 데이터 집약적인 애플리케이션을 구축하는 데 데이터 시스템을 사용하는 방법을 소개합니다. 다양한 도구의 공통점과 차이점, 그리고 각 도구의 특성을 어떻게 달성하는지 살펴봅니다.
이 장에서는 우리가 달성하고자 하는 것의 기본, 즉 안정적이고 확장 가능하며 유지 관리가 가능한 데이터 시스템을 살펴보는 것부터 시작하겠습니다. 이러한 것들이 무엇을 의미하는지 명확히 하고, 이에 대한 몇 가지 사고 방식을 간략히 설명한 다음, 이후 장에서 필요한 기본 ...