Chapter 7. Transactions
2023. 6. 6. 10:25
스터디/Designing Data-Intensive Applications
이번 장에서는 백엔드 개발자라면 매우 중요한 트랜잭션에 대해 소개합니다. 트랜잭션의 기본 개념과 더불어 다양한 DBMS에서 어떻게 트랜잭션을 구현하는지 살펴볼 수 있는 장이므로, 시간이 나실 때 읽을 것을 추천합니다. ACID Atomicity 원자성을 의미합니다. 트랜잭션 단위로 묶인 작업은 모두 성공하거나 모두 실패하는 트랜잭션의 속성입니다. MySQL은 트랜잭션의 원자성을 보장하기 위해 WAL(Write-Ahead Log)라는 로그성 파일을 활용합니다. 트랜잭션이 수행되는 과정에서 발생하는 데이터 변경을 로그로 WAL에 추가합니다(append). 만약 알 수 없는 이유로 시스템이 다운됐을 때, DBMS는 WAL를 참고해 반영되지 않은 트랜잭션의 작업을 디스크에 반영합니다. 트랜잭션이 WAL를 사용해..
Chapter 3. Storage and Retrieval
2023. 4. 10. 23:10
스터디/Designing Data-Intensive Applications
이번 챕터에서는 데이터베이스에 저장되는 데이터의 형태와 저장 방식에 따른 장단점에 대해 살펴보겠습니다. 데이터베이스는 데이터를 효율적으로 저장하고 찾기 위해 인덱스를 활용합니다. 이러한 인덱스를 저장하는 방식을 크게 분류하면 log-structured 형태와 page-oriented 형태의 저장방식으로 구분됩니다. Log Structured Indexes Hash Table 가장 기초적인 데이터 저장 및 조회 방법으로는 해시 테이블을 사용할 수 있습니다. 이 방법은 Key-value 형태의 데이터를 메모리 상에 유지하면서 주기적으로 디스크로 플러시합니다. 데이터는 append 형식으로 디스크 파일 끝에 추가됩니다. 디스크에 저장된 데이터는 segment 단위로 구분하며, 더 이상 쓰기 작업이 없는 seg..
Chapter2. Data Models and Query Languages
2023. 4. 9. 14:17
스터디/Designing Data-Intensive Applications
이번 챕터에서는 데이터베이스에서 데이터를 표현하는 다양한 형태의 모델에 대해 살펴보려고 합니다. 먼저, 관계형 데이터베이스의 데이터 모델부터 시작하여, 다양한 NoSQL 데이터베이스에서의 데이터 모델까지(document database, graph database) 다양한 형태의 데이터 모델에 대해 살펴볼 것입니다. 이러한 데이터 모델은 각각의 장단점을 갖고 있으며, 특정한 사용 사례에 적합한 데이터 모델을 선택하는 것이 중요합니다. 또한, 이번 챕터에서는 각 데이터 모델에 대한 쿼리 유형도 다룰 예정입니다. 관계형 데이터베이스의 경우 SQL을 사용하여 데이터를 검색하며, NoSQL 데이터베이스의 경우 각각의 데이터 모델에 맞는 쿼리 언어를 사용하여 데이터를 검색합니다. 데이터 모델링과 쿼리 유형에 대한..
Chapter1. Reliable, Scalable and Maintainable Applications
2023. 4. 8. 14:36
스터디/Designing Data-Intensive Applications
챕터 1은 데이터를 다루는 애플리케이션을 신뢰할 수 있고 확장 가능하며 유지 보수할 수 있는 형태로 개발하는 방법을 살펴보는 큰 그림을 제시합니다. 저자는 신뢰성, 확장성 및 유지 보수성이라는 세 가지 특성에 중점을 두어 애플리케이션을 개발하는 방법을 소개합니다. 신뢰성(Reliability) 신뢰성이 높은 애플리케이션은 다음과 같은 특징을 갖습니다: 애플리케이션은 예상한 대로 동작합니다. 시스템은 예상치 못한 사용자 동작에도 견딜 수 있습니다. 예상된 부하 상황에서도 애플리케이션은 정상적으로 동작합니다. 권한이 없는 요청을 차단할 수 있습니다. 저자는 애플리케이션의 신뢰성을 저하시킬 수 있는 두 가지 요소인 failure와 fault를 설명합니다. Failure는 시스템이 사용자 요청을 처리할 수 없는..