본문 바로가기

전체 글137

데이터 중심 어플리케이션 설계 - 7장. 트랜잭션 트랜잭션 : 애플리케이션에서 몇 개의 읽기와 쓰기를 하나의 논리적 단위로 묶는 방법. → 하나의 트랜잭션 내부의 모든 읽기와 쓰기는 하나의 연산. 따라서 전체 성공(커밋) or 전체 실패(롤백, abort) 트랜잭션이 항상 필요한 것은 아님. 오히려 트랜잭션을 쓰지 않을 때 성능 향상, 가용성 등의 이득을 얻을 수도 있다. 따라서 언제 써야 할지 판단할 줄 알아야 함. 학습 목표 : 트랜잭션으로 문제가 생길 수 있는 사례들을 조사하고 이를 방지하기 위한 DB의 알고리즘을 살펴본다. 동시성 제어 분야와 DB에서 커밋 후 읽기, 스냅숏 격리, 직렬성 같은 격리 수준을 구현하는 방법을 알아본다. 1. 애매모호한 트랜잭션의 개념 트랜잭션을 둘러싼 두 가지 주장 : 트랜잭션은 확장성의 안티패턴이며 높은 성능과 고.. 2023. 6. 21.
데이터 중심 어플리케이션 설계 - 6장. 파티셔닝 학습 목표 : 대용량 데이터셋을 파티셔닝하는 몇 가지 방법을 살펴보고 데이터 색인과 파티셔닝의 상호작용을 알아본다. 클러스터에 노드를 추가하거나 제거할 때 필요한 재균형화에 대해서도 알아본다. 데이터베이스가 어떻게 요청을 올바른 파티션에 전달하고 질의를 실행하는지 살펴본다. 파티션(=샤딩) : 데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 쪼갠다. 이 때의 단위가 파티션. 데이터 파티셔닝의 주요 이유 : 확장성 → 공유 클러스터에서 다른 파티션은 다른 노드에 저장될 수 있다. 따라서 여러 디스크에 분산될 수 있고 질의 부하도 여러 프로세서에 분산. 1. 파티셔닝과 복제 복제 + 파티셔닝을 이용해서 각 파티션의 복사본을 여러 노드에 저장. (즉, 각 레코드는 정확히 한 파.. 2023. 6. 6.
데이터 중심 어플리케이션 설계 - 5장. 복제 1. 리더와 팔로워 모든 쓰기는 모든 레플리카에서 처리되어야 한다. → 리더 기반 복제 (= 능동/수동, 마스터-슬레이브 복제) 리더 (= 마스터, 프라이머리) 팔로워 (읽기 복제 서버(replica), 슬레이브, 2차(secondary), 핫 대기(hot standby)) 리더가 로컬 저장소에 새로운 데이터 기록 시 데이터 변경을 복제 로그나 변경 스트림의 일부로 팔로워에게 전송한다. 쓰기는 리더에게만 요청하고 읽기는 리더나 임의의 팔로워에게 요청한다. → 사용처 : 여러 관계형 데이터베이스 및 비관계형 데이터베이스, 고가용성 큐 같은 분산 메시지 브로커 a. 동기식 대 비동기식 복제 동기식 : 팔로워가 쓰기를 수신했는지 여부의 응답을 받는다. ( ∴ 한 노드의 장애가 전체 시스템의 문제가 될 수 있으.. 2023. 5. 30.
데이터 중심 어플리케이션 설계 - 4장. 부호화와 발전 학습 목표 : 데이터 부호화를 위한 다양한 형식을 살펴보고, 스키마를 변경하고 예전 버전과 새로운 버전의 데이터와 코드가 공존하는 시스템 지원 방식을 알아본다. 그리고 REST, RPC, 액터(actor)와 같은 메세지 큐 전달 시스템에서 다양한 데이터 부호화 형식이 데이터 저장과 통신에 어떻게 사용되는지 살펴본다. 양방향 호환성 하위 호환성 : 새로운 코드는 예전 코드가 기록한 데이터(=예전 레코드)를 읽을 수 있어야 한다. 상위 호환성 : 예전 코드는 새로운 코드가 기록한 데이터(=새로운 레코드)를 읽을 수 있어야 한다. 데이터 부호화 형식 프로그램은 최소 두 가지 형태로 표현된 데이터를 이용해서 동작한다. 데이터는 객체, 구조체, 리스트, 배열, 해시 테이블, 트리 등의 형태로 메모리에 유지되고 C.. 2023. 5. 22.
데이터 중심 어플리케이션 설계 - 3장. 저장소와 검색 학습 목표 : 데이터베이스가 데이터를 저장하는 방법과 데이터를 요청했을 때 다시 찾을 수 있는 방법을 알아본다. 다양한 인덱스 구조를 알아보고 여러 인덱스 구조를 비교해 본다. 개발자는 어플리케이션에 맞는 저장소 엔진을 선택해야 한다. 트랜잭션 작업 부하에 맞춰 최적화된 저장소 엔진(페이지 지향 계열 저장소 엔진)과 분석을 위해 최적화된 엔진(로그 구조 계열 저장소 엔진)은 다르다. DB를 강력하게 만드는 데이터 구조 DB는 내부적으로 append-only(추가 전용) 데이터 파일(=로그)를 사용한다. 로그는 연속된 추가 전용 레코드를 의미한다. 인덱스는 특정 키의 값을 효율적으로 찾기 위해 사용하는 데이터 구조로, 기본 데이터에서 파생된 부가적인 구조인 메타 데이터를 유지하는 것이다. 인덱스를 사용하면.. 2023. 5. 15.
데이터 파이프라인 저장소 데이터 파이프라인 : 데이터를 수집, 처리 및 저장하기 위한 일련의 과정을 자동화하는 방법 데이터 엔지니어링은 데이터를 A 라는 지점에서 B 라는 지점으로 옮기는 사람들. (출처) 데이터 엔지니어링 관련 사례를 찾다가 팀원분이 공유해주신 영상에 정돈된 발전 방향성이 담겨 있는 것 같아 해당 내용을 좀 정리해보려고 한다. 1. OLTP 데이터베이스 OLTP(Online Transaction Processing) 데이터베이스는 우리가 흔히 프로덕션에서 사용자들과의 인터랙션에서 사용하는 데이터베이스를 말한다. 일상적인 트랜잭션에서 사용하고 한 번에 적은 양의 데이터베이스를 처리하며 실시간으로 처리되어야 한다. OLTP 데이터베이스는 데이터의 정확성과 신뢰성이 매우 중요하며 빠른 응답시간과 높은 동시성을 제공한.. 2023. 5. 4.