분류 전체보기
-
9장. 일관성과 합의STUDY/데이터 중심 애플리케이션 설계 2025. 9. 23. 20:59
일관성 보장복제 데이터베이스는 대부분 최소한 최종적 일관성을 제공한다.데이터베이스에 쓰기를 멈추고 불특정 시간 동안 기다리면 결국 모든 읽기 요청이 같은 값을 반환한다는 의미이다.바꿔 말하면 불일치는 일시적이며 결국 스스로 해소한다(네트워크 결함도 결국에는 복구된다고 가정)하지만 이것은 매우 약한 보장이다. 언제 복제본이 수렴될지에 대해서는 아무것도 얘기하지 않는다. 수렴될 때까지 읽기는 뭔가를 반환할 수도, 아무것도 반환하지 않을 수도 있다.약한 보장만 제공하는 데이터베이스를 다룰 때는 그 제한을 계속 알아야 하고 뜻하지 않게 너무 많은 것을 가정하면 안 된다.분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것과 관련되어 있다. 선형성선형성을 뒷받침하는 아이디어원자적 일관성(a..
-
8장. 분산 시스템의 골칫거리STUDY/데이터 중심 애플리케이션 설계 2025. 8. 31. 21:40
결함과 부분 장애단일 컴퓨터하드웨어가 올바르게 동작하면 같은 연산은 항상 같은 결과를 낸다(결정적).하드웨어 문제(메모리 오염, 헐거운 커넥터)가 있으면 보통 시스템이 완전히 실패하는 결과를 낳는다.좋은 소프트웨어가 설치된 각각의 컴퓨터는 보통 완전하게 동작하거나 전체 장애가 발생하지 그 중간 상태가 되지 않는다.분산 시스템부분 장애(partial failure) : 시스템의 어떤 부분은 잘 동작하지만 다른 부분은 예측할 수 없는 방식으로 고장날 수 있다.부분 장애는 비결정적이라서 어렵다.여러 노드와 네트워크와 관련된 뭔가를 시도하면 어떨 때는 동작하지만 어떨 때는 예측할 수 없는 방식으로 실패한다.메시지가 네트워크를 거쳐 전송되는 시간도 비결정적이기 때문에, 뭔가 성공했는지 아닌지 알지 못할 수도 있다..
-
7장. 트랜잭션STUDY/데이터 중심 애플리케이션 설계 2025. 8. 19. 22:22
데이터 시스템의 여러 가지 문제데이터베이스 소프트웨어나 하드웨어는 (쓰기 연산이 실행 중일 때를 포함해서) 언제라도 실패할 수 있다.애플리케이션은 (연속된 연산이 실행되는 도중도 포함해서) 언제라도 죽을 수 있다.네트워크가 끊기면 애플리케이션과 데이터베이스의 연결이 갑자기 끊기거나 데이터베이스 노드 사이의 통신이 안 될 수 있다.여러 클라이언트가 동시에 데이터베이스에 쓰기를 실행해서 다른 클라이언트가 쓴 내용을 덮어쓸 수 있다.클라이언트가 부분적으로만 갱신돼서 비정상적인 데이터를 읽을 수 있다.클라이언트 사이의 경쟁 조건은 예측하지 못한 버그를 유발할 수 있다. 트랜잭션애플리케이션에서 몇 개의 읽기와 쓰기를 하나의 논리적 단위로 묶는 방법으로, 위에서 발생하는 문제를 단순화하는 메커니즘으로 채택돼 왔다...
-
6장. 파티셔닝STUDY/데이터 중심 애플리케이션 설계 2025. 7. 30. 22:29
파티셔닝데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 파티션으로 쪼갤 필요가 있다. 이 작업을 샤딩이라고도 한다. 파티션을 나눌 때는 보통 각 데이터 단위(레코드, 로우, 문서)가 하나의 파티션에 속하게 한다. 데이터베이스가 여러 파티션을 동시에 건드리는 연산을 지원할 수도 있지만 결과적으로 각 파티션은 그 자체로 작은 데이터베이스가 된다. 파티셔닝을 하는 주된 이유는 확장성이다.비공유 클러스터에서 다른 파티션은 다른 노드에 저장될 수 있다. 따라서 대용량 데이터셋이 여러 디스크에 분산될 수 있고 질의 부하는 여러 프로세서에 분산될 수 있다.단일 파티션에 실행되는 질의는 각 노드에서 자신의 파티션에 해당하는 질의를 독립적으로 실행할 수 있으므로 노드를 추가함으로써 질의 ..
-
4장. 부호화와 발전STUDY/데이터 중심 애플리케이션 설계 2025. 6. 25. 22:35
주요 내용데이터 부호화를 위한 다양한 형식스키마 변경 방법과 예전 버전과 새로운 버전의 데이터와 코드가 공존하는 시스템 지원 방식REST, RPC, 액터(actor)와 메시지 전달 시스템(메시지 큐)에서 다양한 데이터 부화화 형식이 데이터 저장과 통신에 어떻게 사용되는지 양방향 호환성하위 호환성 : 새로운 코드는 에전 코드가 기록한 데이터를 읽을 수 있어야 한다.상위 호환성 : 예전 코드는 새로운 코드가 기록한 데이터를 읽을 수 있어야 한다. 데이터 부호화 형식프로그램은 보통 (최소한) 두 가지 형태로 표현된 데이터를 사용해 동작한다.메모리에 객체, 구초제, 목록, 배열, 해시 테이블, 트리 등으로 데이터가 유지되며, 이런 데이터 구조는 CPU에서 효율적으로 접근하고 조작할 수 있게 최적화된다.데이터를 ..
-
3장. 저장소와 검색STUDY/데이터 중심 애플리케이션 설계 2025. 6. 18. 22:15
데이터베이스의 기본적인 기능어떤 데이터를 받으면 데이터를 저장데이터를 요청하면 데이터를 제공 애플리케이션 개발자는 사용 가능한 여러 저장소 엔진 중에 애플리케이션에 적합한 엔진을 선택하는 작업이 필요하다. 특정 작업부하(workload) 유형에서 좋은 성능을 내게끔 저장소 엔진을 조정하려면 저장소 엔진의 내부 수행 작업에 대해 이해할 필요가 있다. 관계형 데이터베이스와 NoSQL 에서 사용되는 저장소 엔진로그 구조(log-structured) 계열 저장소 엔진페이지 지향(page-oriented) 계열 저장소 엔진 데이터베이스를 강력하세 만드는 데이터 구조가장 간단한 데이터베이스키-값 저장소를 함수로 구현매 라인마다 쉼표로 구분된 키-값 쌍을 포함한 텍스트 파일 형식db_set을 호출할 때마다 파일의 끝..
-
2장. 데이터 모델과 질의 언어STUDY/데이터 중심 애플리케이션 설계 2025. 6. 11. 22:31
주요 내용데이터 저장과 질의를 위한 다양한 범용 데이터 모델관계형 모델(relational model)문서 모델(document model)그래프 기반 데이터 모델(graph-based data model)다양한 질의 언어와 사용 사례 데이터 모델소프트웨어가 어떻게 작성됐는지 뿐만 아니라 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 영향을 미친다.소프트웨어가 할 수 있는 일과 할 수 없는 일에 지대한 영향을 주므로 적합한 데이터 모델을 선택하는게 중요하다. 관계형 모델과 문서 모델관계형 모델데이터는 관계(relation)로 구성되고, 각 관계는 순서없는 튜플(tuple) 모음이다.SQL은 1970년 Edgar Codd가 제안한 관계형 모델을 기반으로 한 데이터 모델이다.정규화된 구조로 데이터를 저..
-
Visitor Pattern(방문자 패턴)STUDY/디자인패턴 2025. 3. 3. 19:31
방문자 패턴이란?객체 구조를 변경하지 않고, 그 객체들에 대해 새로운 기능을 추가할 수 있게 해주는 행동 디자인 패턴이다. 객체의 구조가 자주 바뀌지 않지만, 객체에 대한 새로운 작업을 자주 추가해야 하는 경우 유용하다. 문제 XML 내보내기라는 새로운 기능을 추가할 때, 기존 클래스에 기능을 추가하게 되면 기존 코드에 영향을 많이 주고 복잡성을 증가시킬 수 있다. 또한, 다른 기능이 추가되는 경우 기존 클래스에 변경이 자주 발생하게 되어, 다른 부분에 영향을 줄 수 있게 된다. 해결방문자 패턴을 사용해 각 객체를 처리하는 별도의 Visitor 클래스를 만들고, 객체들에 대한 작업을 외부에서 수행한다.각 객체들은 accept() 메서드를 통해 Visitor 클래스를 받아들이고, 이를 통해 외부에서 작업을..