본문 바로가기

전체 글128

[데이터 중심 애플리케이션 설계] 10. 일괄 처리 [데이터 중심 애플리케이션 설계] 10. 일괄 처리 1. 시스템의 세가지 종류 1.1 서비스(온라인 시스템) 클라이언트의 요청이나 지시를 기다렸다가 요청이 들어오면 가능한 빨리 처리 후 응답을 되돌려보낸다. 응답시간과 가용성은 서비스 성능의 중요한 지표다. 1.2 일괄 처리 시스템(오프라인 시스템) 매우 큰 입력 데이터를 받아서 데이터를 처리하는 작업을 수행하고, 결과 데이터를 생산한다. 일괄 처리 작업은 수 분에서 수 일이 걸리므로 사용자가 응답을 기다리지 않고, 반복적으로 일정한 시간에 수행한다. 처리량은 중요한 성능 지표다. 1.3 스트림 처리(준실시간 시스템) 온라인과 오프라인 사이 어딘가에 있기 때문에 준실시간 처리이다. 일괄 처리 시스템처럼 요청에 대해 응답하지 않으며, 입력 데이터로부터 출력.. 2023. 2. 1.
[데이터 중심 애플리케이션 설계] 09. 일관성과 합의 [데이터 중심 애플리케이션 설계] 09. 일관성과 합의 1. 일관성 보장 동시에 데이터베이스 두 대를 본다면, 복제 방법에 상관 없이 서로 다른 데이터를 볼 가능성이 크다. 약한보장 복제 데이터 베이스는 대부분 최소한 최종적 일관성을 제공하나, 언제 수렴될지 모른다. 버그는 시스템 결함이 있거나 동시성이 높을 때만 명확하기 때문에 테스트로 발견하기 어렵다. 강한보장 데이터 시스템이 선택적으로 제공 올바르게 사용하기 쉬우나 시스템 성능이 나쁘거나 내결함성이 약할수도 있다. 2. 선형성 공통적으로 사용되는 가장 강한 일관성 모델 중 하나 시스템에 복사본이 하나만 있고 그 데이터를 대상으로 수행하는 모든 연산은 원자적인 것처럼 보이게 하는 것 원자적 일관성 (atomic consistency), 강한 일관성(.. 2023. 1. 18.
[데이터 중심 애플리케이션 설계] 08. 분산 시스템의 골칫거리 [데이터 중심 애플리케이션 설계] 08. 분산 시스템의 골칫거리 1. 결함과 부분 장애 수천 개의 노드가 있는 분산 시스템은 항상 뭔가 고장난 상태라고 가정하는게 합리적이다. 분산 시스템이 동작하게 만드려면 부분 장애 가능성을 항상 받아들이고 내결함성 메커니즘을 넣어야 한다. 즉, 신뢰성 없는 구성 요소를 사용해 신뢰성 있는 시스템을 구축해야 한다. 신뢰성 없는 IP(Internet Protocol)위에 신뢰성 높은 TCP(Transimission Control Protocal)를 두어 패킷 손실 시 재전송하고 순서에 맞춰 재조립되도록 보장해준다. 2. 신뢰성 없는 네트워크 어떤 분산 시스템은 비공유 시스템, 네트워크가 유일한 통신 수단인 다수의 장비들이다. 인터넷과 데이터센터 내부 이더넷은 비동기 패킷.. 2023. 1. 15.
[데이터 중심 애플리케이션 설계] 07. 트랜잭션 [데이터 중심 애플리케이션 설계] 07. 트랜잭션 1. 애매모호한 트랜잭션의 개념 1.1 ACID ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 1.1.1 원자성(Atomicity) 원자적이란 더 작은 부분으로 쪼갤 수 없는 것을 가리킨다. 시스템은 연산을 실행하기 전이나 실행한 후의 상태에만 있을 수 있으며 그 중간 상태에는 머물 수 없다. 원자성 덕분에 실패한 트랜잭션은 어떤 것도 변경하지 않았음을 알 수 있으므로 안전하게 재시도 할 수 있다. 1.1.2 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 말한다. 일관성(C)은 실제로는 ACID에 속하지 않고 애플리케이션의 속성.. 2023. 1. 2.
[데이터 중심 애플리케이션 설계] 06. 파티셔닝 [데이터 중심 애플리케이션 설계] 06. 파티셔닝 1. 복제 VS 파티셔닝 복제 동일한 데이터 복사본 여러 개를 다른 노드에 저장 파티셔닝 데이터셋이 매우 크거나 질의 처리량이 매우 높아 복제만으로는 부족할 때 데이터를 파티션으로 나누어 저장 (= 샤딩) 복제와 파티셔닝의 혼합 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다. 각 레코드는 정확히 한 파티션에 속하더라도 이를 여러 다른 노드에 저장해서 내결함성을 보장할 수 있다. 한 노드에 여러 파티션을 저장할 수도 있다. 리더 팔로워 복제 모델의 파티셔닝과 복제의 조합 각 파티션의 리더는 하나의 노드에 할당되고 팔로워들은 다른 노드에 할당된다. 각 노드는 어떤 파티션에게는 리더이면서 다른 파티션에게는 팔로워가 된다. 2. .. 2023. 1. 2.
[데이터 중심 애플리케이션 설계] 05. 분산 데이터와 복제 [데이터 중심 애플리케이션 설계] 05. 분산 데이터와 복제 1. 분산 데이터 여러 장비 간 분산된 데이터베이스를 필요로 하는 이유는 아래와 같다. 1.1 확장성 데이터 볼륨, 읽기/쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 커지면 부하를 여러 장비로 분배할 수 있다. 1.2 내결함성/고가용성 장비 하나가 죽더라도 애플리케이션이 계속 동작해야 한다면 여러 장비를 사용해 중복성을 제공할 수 있다. 장비 하나가 실패하면 다른 하나가 이어받는다. 1.3 지연 시간 전 세계에 사용자가 있다면 사용자와 지리적으로 가까운 곳에 서버를 두어 서비스를 빠르게 제공할 수 있다. 2. 고부하로 확장 2.1 수직 확장(scale up) 더 강력한 장비를 사용하는 것 많은 CPU, 메모리 칩, 디스크를 하나의 운영체제로.. 2022. 12. 29.
[데이터 중심 애플리케이션 설계] 04. 부호화와 발전 [데이터 중심 애플리케이션 설계] 04. 부호화와 발전 1. 데이터 부호화 형식 프로그램은 보통 두 가지 형태로 표현된 데이터를 사용 메모리에 객체, 구조체, 배열, 해시 테이블 등으로 데이터를 유지 -> CPU에서 효율적으로 접근하고 조작할 수 있게 최적화됨 데이터를 파일에 쓰거나 네트워크를 통해 전송하기 위해서는 바이트열의 형태로 부호화 필요 인메모리 표현에서 바이트열로의 전환을 부호화(직렬화 또는 마샬링)라고 함 바이트열에서 인메모리 표현으로의 전환을 복호화(파싱, 역직렬화, 언마샬링)라고 함 1.1 언어별 형식 프로그래밍 언어에 내장된 부호화 라이브러리는 편리하지만 문제점도 많음 부호화는 보통 특정 프로그래밍 언어와 묶여 있어 다른 언어에서 데이터를 읽기가 매우 어려움 동일한 객체 유형의 데이터를.. 2022. 12. 28.
[데이터 중심 애플리케이션 설계] 03. 저장소와 검색 [데이터 중심 애플리케이션 설계] 03. 저장소와 검색 관계형 DB와 NoSQL DB에 사용되는 저장소 엔진에 대해 공부한다. 로그 구조(log-structured) 계열 저장소 엔진과 (B-tree 같은) 페이지 지향(page-oriented) 계열 저장소 엔진을 검토한다. 1. 데이터베이스를 강력하게 만드는 데이터 구조 많은 데이터베이스는 내부적으로 추가 전용(append-only) 데이터 파일인 로그(log)를 사용한다. 로그 : 연속된 추가 전용 레코드(an append-only sequence of records) 추가 전용 파일은 조회시 풀스캔을 하기 때문에 데이터베이스에 많은 레코드가 있으면 성능이 매우 나쁘다. 데이터베이스에서 특정 키의 값을 효율적으로 찾기 위해서는 색인(index)이 필.. 2022. 12. 21.
[데이터 중심 애플리케이션 설계] 02. 데이터 모델과 질의 언어 [데이터 중심 애플리케이션 설계] 02. 데이터 모델과 질의 언어 1. 데이터 모델의 중요성 데이터 모델은 소프트웨어 개발에서 제일 중요한 부분이다. 데이터 모델은 소프트웨어가 어떻게 작성됐는지, 해결하려는 문제를 어떻게 생각해야 하는지 지대한 영향을 미친다. 데이터 모델은 그 위에서 소프트웨어가 할 수 있는 일과 할 수 없는 일에 영향을 주므로 적합한 데이터 모델을 선택하는 작업은 굉장히 중요하다. 데이터 모델의 큰 범주 관계형 모델 문서 모델 그래프 모델 2. 관계형 모델과 문서 모델 관계형 모델 데이터는 관계(relation)으로 구성 각 관계는 순서없는 튜플(tuple)의 모음 SQL 은 정규화된 구조로 데이터를 저장하고 질의할 필요가 있을 때 사용 NoSQL의 탄생 : Not Only SQL 대.. 2022. 12. 14.
728x90
반응형