Design/Designing Data-Intensive Applications 5

저장소와 검색 (2)

트랜잭션 처리와 분산 일반적인 온라인 어플리케이션에서는 여러 종류의 데이터가 사용자 입력을 기반으로 삽입되거나 갱신된다. 이는 클라이언트와 서버 간의 대화식이기에, 이 접근 패턴을 온라인 트랜잭션 처리( online transaction processing, OLTP )라고 한다. OLTP는 이익을 산출하는 비즈니스에 맞닿아 있기에 대부분의 데이터 베이스는 OLTP 에 맞추어 설계되고 발전되었다.  하지만 시간이 지남에 따라 사람들은 데이터 베이스를 "데이터 분석 ( data analytic )" 목적으로도 많이 사용하기 시작했다. 데이터 분석은 기존 트랜잭션과 접근 패턴이 매우 다르다. 분석에 사용되는 쿼리는 사용자에게 원시 데이터만을 반환하지 않고, 많은 수의 레코드에 대한 집계 통계를 계산해야 했기..

저장소와 검색 (1)

이 장에서는 데이터베이스가 저장과 검색을 내부적으로 어떻게 처리하는지에 대해 다룬다. JPA나 Typeorm 과 같은 ORM을 사용하는 애플리케이션 개발자들이 이를 알아야하는 이유는 처음부터 자신의 저장소 엔진을 구현하기 위해서라기 보다는 여러 저장소 엔진 중에 애플리케이션에 가장 적합한 엔진을 선택하기 위함이다. 관계형 데이터베이스와 NoSQL 데이터베이스의 저장소 엔진, 그리고 로그 구조 계열 저장소 엔진과 (B-Tree와 같은) 페이지 지향 계열 저장소 엔진을 검토해보도록 하자.  데이터베이스를 강력하게 만드는 데이터 구조 아래와 같은 아주 간단한 데이터베이스를 가정해보자. #!/bin/bashdb_set () { echo "$1,$2" >> database}db_get () { grep "^$1,..

데이터 모델과 질의 언어

내 언어의 한계는 내 세계의 한계를 의미한다.- 루트비히 비트겐슈타인, 논리-철학 논고(1922) 요즘 개발 커뮤니티에서 "요즘 어플리케이션들이 AI Wrapper 다"라는 이야기를 심심치 않게 들을 수 있다. 이곳 저곳에 생성형 AI 관련 기능을 넣으면서 나온 이야기인듯 한데.. 결국 기존 어플리케이션도 Database Wrapper가 아니냐는 이야기로 귀결된다. 그만큼 현재 데이터 베이스 모델들은 각종 ORM 혹은 데이터 베이스 콘솔이나 CLI 등으로 잘 추상화가 되어 있어서 개발자들은 이들을 사용하는데 불편함을 느끼지 못한다. 데이터 모델은 다양한 유형을 갖고 있고, 각 유형마다 어떤 연산은 빠르게 어떤 연산은 매우 느리게 동작하기도 한다.이 장에서는 다양한 데이터 모델 및 그들의 질의 언어 ( Q..

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

확장성 부하 기술하기 성능 저하를 유발하는 흔한 이유 중 하나는 부하 증가다. 확장성은 증가한 부하에 대처하는 시스템 능력을 설명하는 데 사용하는 용어지만 시스템에 부여하는 일차원적인 표식은 아니다. 단순은 "~은 확장 가능하다" 와 같은 말은 의미가 없다. 오히려 확장성을 논한다는 것은 "시스템이 특정 방식으로 커지면 이를 대처하기 위한 좋은 조치는 무엇일까", "추가 부하를 다루기 위해 계산 자원을 어떻게 투입할까" 같은 질문을 고려한다는 의미다. 저자는 트위터의 트윗 처리 방식을 대표적인 예시로 말한다.  트위터의 주요 동작은 크게 두 가지, (1) 트윗 작성과 (2) 홈 타임라인 조회이다. 트윗 작성은 초당 46,000번 발생하고, 홈 타임라인 조회는 초당 300,000번 발생한다. 사실 이 정도..

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

오늘날 많은 애플리케이션은 계산 중심보다는 데이터 중심적이다. 고도의 계산으로 인해 CPU의 성능이 중요하기보다는 많고 복잡하며 변화하는 데이터를 잘 다루는 데에 애플리케이션의 방점이 찍혀있다.  이 책은 데이터 시스템의 원칙과 실용성, 그리고 이를 활용한 데이터 중심 애플리케이션을 개발하는 방법을 모두 담고 있다. 책에서 소개된 다양한 도구가 공통으로 지닌 것은 무엇이고 서로 구별되는 것은 무엇인지, 그리고 어떻게 그러한 특성을 구현해냈는지 알아보도록 한다. 데이터 시스템에 대한 생각 일반적으로 데이터 시스템은 데이터베이스, 큐, 캐시 등 다른 범주의 도구들을 모두 포괄하는 용어이다. 그런 포괄적인 용어를 사용하는 데에는 두 가지 이유가 있다. 1. 최근에 등장한 도구들은 다양한 사용 사례(use-ca..