개발독서 9

[고투런1기] 데이터 중심 애플리케이션 설계 (7장 트랜잭션)

[2부 분산 데이터]07장: 트랜잭션1. 애매모호한 트랜잭션의 개념1.1 ACID의 의미1.2 단일 객체 연산과 다중 객체 연산2. 완화된 격리 수준2.1 커밋 후 읽기2.2 스냅숏 격리와 반복 읽기2.3 갱신 손실 방지2.4 쓰기 스큐와 팬텀3. 직렬성3.1 실제적인 직렬 실행3.2 2단계 잠금(2PL)3.3 직렬성 스냅숏 격리(SSI)[정리: 여러 장비로 분산해 저장하는 데이터]- 트랜잭션=> 애플리케이션이 어떤 동시성 문제와 어떤 종류의 하드웨어와 소프트웨어 결함이 존재하지 않는 것처럼 동작할 수 있게 도와주는 추상층=> 트랜잭션이 없으면 다양한 방법으로 데이터가 일관성이 깨질 수 있음- 동시성 제어 - 경쟁 조건1) 더티읽기: 한 클라이언트가 다른 클라이언트가 썼지만 아직 커밋되지 않은 데이터를 ..

[고투런1기] 데이터 중심 애플리케이션 설계 (6장 파티셔닝)

[2부 분산 데이터]06장: 파티셔닝1. 파티셔닝과 복제2. 키-값 데이터 파티셔닝2.1 키 범위 기준 파티셔닝2.2 키의 해시값 기준 파티셔닝2.3 쏠린 작업부하와 핫스팟 완화3. 파티셔닝과 보조 색인3.1 문서 기준 보조 색인 파티셔닝3.2 용어 기준 보조 색인 파티셔닝4. 파티션 재균형화4.1 재균형화 전략4.2 운영: 자동 재균형화와 수동 재균형화5. 요청 라우팅5.1 병렬 질의 실행 [정리: 여러 장비로 분산해 저장하는 데이터]- 파티셔닝=> 대용량 데이터셋을 더 작은 데이터셋으로 쪼개는 것=> 저장/처리할 데이터가 너무 많아 장비 한 대로 처리하는 게 불가능해지면 파티셔닝이 필요=> 핫스팟이 생기지 않게 하면서 데이터와 질의 부하를 여러 장비에 균일하게 분배하도록 해야 함* 핫스팟? 불균형적으..

[고투런1기] 데이터 중심 애플리케이션 설계 (5장 복제)

[2부 분산 데이터]1. 고부하로 확장1.1 비공유 아키텍처1.2 복제 대 파티셔닝5장 복제1. 리더와 팔로워1.1 동기식 vs 비동기식 복제1.2 새로운 팔로워 설정1.3 노드 중단 처리1.4 복제 로그 구현2. 복제 지연 문제2.1 자신이 쓴 내용 읽기2.2 단조 읽기2.3 일관된 순서로 읽기2.4 복제 지연을 위한 해결책3. 다중 리더 복제3.1 다중 리더 복제의 사용 사례3.2 쓰기 충돌 다루기3.3 다중 리더 복제 토폴로지4. 리더 없는 복제4.1 노드가 다운됐을 때 데이터베이스에 쓰기4.2 정족수 일관성의 한계4.3 느슨한 정족수와 암시된 핸드오프4.4 동시 쓰기 감지 [정리: 여러 장비로 분산해 저장하는 데이터]- 복제의 용도1) [고가용성] 한 장비(또는 여러 장비나 전체 데이터센터)가 다..

[고투런1기] 데이터 중심 애플리케이션 설계 (4장 부호화와 발전)

[1부 데이터 시스템의 기초]4장 부호화와 발전1. 데이터 부호화 형식1.1 언어별 형식1.2 JSON과 XML, 이진 변형1.3 스리프트와 프로토콜 버퍼1.4 아브로1.5 스키마의 장점2. 데이터플로 모드2.1 데이터베이스를 통한 데이터플로2.2 서비스를 통한 데이터플로: REST와 RPC2.3 메시지 전달 데이터플로 [정리: 데이터 중심 애플리케이션 설계를 뒷받침하는 근본 개념을 설명]- 데이터 구조를 네트워크나 디스크 상의 바이트열로 변환하는 다양한 방법=> 부호화의 세부 사항은 효율성, 애플리케이션의 아키텍처, 배포의 선택 사항에도 영향- 많은 서비스가 새로운 버전의 서비스를 동시에 모든 노드에 배포하는 방식보다 한 번에 일부 노드에만 서서히 배포하는 순회식 업그레이드가 필요=> 순회식 업그레이드..

[고투런1기] 데이터 중심 애플리케이션 설계 (3장 저장소와 검색)

[1부 데이터 시스템의 기초]2장 저장소와 검색1. 데이터베이스를 강력하게 만드는 데이터 구조1.1 해시 색인1.2 SS테이블과 LSM 트리1.3 B 트리1.4 B 트리와 LSM 트리 비교1.5 기타 색인 구조2. 트랜잭션 처리나 분석?2.1 데이터 웨어하우징2.2 분석용 스키마: 별 모양 스키마와 눈꽃송이 모양 스키마3. 칼럼 지향 저장소3.1 칼럼 압축3.2 칼럼 저장소의 순서 정렬3.3 칼럼 지향 저장소에 쓰기3.4 집계: 데이터 큐브와 구체화 뷰 [정리: 데이터 중심 애플리케이션 설계를 뒷받침하는 근본 개념을 설명]*이번 장을 통해 선택한 DB의 문서를 이해할 수 있는 충분한 어휘와 개념을 갖출 수 있음1. DB가 어떻게 저장과 검색을 다루는지?- DB에 데이터를 저장할 때 어떤 일이 일어날까?-..

[고투런1기] 데이터 중심 애플리케이션 설계 (2장 데이터 모델과 질의 언어)

- 관계형 DB에서 다대다 관계를 표현할 때 어려움을 겪은 적이 있었는지? => Node.js에서 다대다 관계를 표현하기 위해 ORM을 사용할 때 TypeORM의 경우 테이블 간 가상의 연결 테이블을 만들어 주지만, Sequelize에서는 실제로 연결 테이블을 만들어줘야 하는 불편함이 있음  [1부 데이터 시스템의 기초]2장 데이터 모델과 질의 언어1. 관계형 모델과 문서 모델1.1 NoSQL의 탄생1.2 객체 관계형 불일치1.3 다대일과 다대다 관계1.4 문서 데이터베이스는 역사를 반복하고 있나?1.5 관계형 데이터베이스와 오늘날의 문서 데이터베이스2. 데이터를 위한 질의 언어2.1 웹에서의 선언형 질의2.2 맵리듀스 질의3. 그래프형 데이터 모델3.1 속성 그래프3.2 사이퍼 질의 언어3.3 SQL의..

[고투런1기] 데이터 중심 애플리케이션 설계 (1장 신뢰성/확장성/유지보수성 갖춘 애플리케이션)

- SLA(서비스 수준 협약서)에서 SLO(서비스 수준 목표)를 정하는 기준(응답 시간 중앙값 n초, 서비스 제공 시간 n.n% 이상)은 어떻게 정하는지?* "응답 시간 중앙값이 200밀리초 미만이고 99분위가 1초 미만인 경우 정상 서비스 상태로 간주하며 서비스 제공 시간은 99.9% 이상이어야 한다."  [1부 데이터 시스템의 기초]1장 신뢰성/확장성/유지보수성 갖춘 애플리케이션1. 데이터 시스템에 대한 생각2. 신뢰성2.1 하드웨어 결함2.2 소프트웨어 오류2.3 인적 오류2.4 신뢰성은 얼마나 중요할까?3. 확장성3.1 부하 기술하기3.2 성능 기술하기3.3 부하 대응 접근 방식4. 유지보수성4.1 운용성: 운영의 편리함 만들기4.2 단순성: 복잡도 관리4.3 발전성: 변화를 쉽게 만들기 [정리:..

[개발독서] 내 코드가 그렇게 이상한가요 (9장 설계의 건정성)

- [전체] 11가지 경우와 관련해 실제로 겪은 문제 상황이 있었는지?- [전역 변수] '영향 범위를 최소화하도록 설계했지만 중복 코드가 많아진 경우' VS '전역 변수 등의 사용으로 영향 범위가 넓은 경우'?- [메타 프로그래밍] 실제로 메타 프로그래밍이 사용 된 경험? 사용한 이유? 장단점?- [패키지 구조] '기술 중심(계층형) VS 비즈니스 중심(도메인형)', 기술 중심 패키징이 더 효율적인 경우는?  9장 설계의 건전성을 해치는 여러 악마9.1 데드 코드9.2 YAGNI 원칙9.3 매직 넘버9.4 문자열 자료형에 대한 집착9.5 전역 변수9.6 null 문제9.7 예외를 catch하고서 무시하는 코드9.8 설계 질서를 파괴하는 메타 프로그래밍9.9 기술 중심 패키징9.10 샘플 코드 복사해서 붙..

[개발독서] 내 코드가 그렇게 이상한가요 (3~4장 클래스 설계 & 불변 활용하기)

성능이 중요한 경우 불변변수가 아닌 가변변수를 사용하라고 하는데, 불변변수가 가변변수보다 성능에 더 좋은 경우는 무엇이 있을지? 메모리 관리불변변수는 한 번 생성되면 변경할 수 없으므로 메모리 관리가 간단합니다. 하지만 가변변수는 값이 변경될 때마다 메모리를 할당하고 해제하는 오버헤드가 발생할 수 있습니다.캐시 일관성불변변수는 값이 변하지 않기 때문에 여러 스레드 간에 안전하게 공유될 수 있습니다. 이는 캐시 일관성을 유지하는 데 도움이 됩니다. 반면 가변변수는 값이 변경될 수 있기 때문에 캐시 일관성을 유지하는 데 추가적인 오버헤드가 발생할 수 있습니다.병렬화불변변수는 여러 스레드 간에 안전하게 공유될 수 있으므로 병렬화를 쉽게 할 수 있습니다. 가변변수의 경우 값이 변경될 때 동기화 메커니즘이 필요할..