분류 전체보기 145

데이터 중심 애플리케이션 설계 (10장 일괄 처리)

[2부 분산 데이터]10장: 일괄 처리1. 유닉스 도구로 일괄 처리하기1.1 단순 로그 분석1.2 유닉스 철학2. 맵리듀스와 분산 파일 시스템2.1 맵리듀스 작업 실행하기2.2 리듀스 사이드 조인과 그룹화2.3 맵 사이드 조인 일괄 처리2.4 워크플로의 출력2.5 하둡과 분산 데이터베이스의 비교3. 맵리듀스를 넘어3.1 중간 상태 구체화3.2 그래프와 반복 처리3.3 고수준 API와 언어  [정리]- awk, grep, sort 등 유닉스 도구의 설계 원리=> 입력은 불변, 출력은 다른 프로그램의 입력으로 사용. 복잡한 문제도 한 가지 일을 잘하는 작은 도구를 엮어서 해결- 유닉스 환경에서 프로그램과 다른 프로그램을 연결하는 단일 인터페이스? 파일과 파이프=> 맵리듀스의 인터페이스는 분산 파일 시스템=>..

카테고리 없음 2024.07.14

데이터 중심 애플리케이션 설계 (9장 일관성과 합의)

[2부 분산 데이터]09장: 일관성과 합의1. 일관성 보장2. 선형성2.1 시스템에 선형성을 부여하는 것은 무엇인가?2.2 선형성에 기대기2.3 선형성 시스템 구현하기2.4 선형성의 비용3. 순서화 보장3.1 순서화와 인과성3.2 일련번호 순서화3.3 전체 순서 브로드캐스트4. 분산 트랜잭션과 합의4.1 원자적 커밋과 2단계 커밋(2PC)4.2 현실의 분산 트랜잭션4.3 내결함성을 지닌 합의4.4 멤버십과 코디네이션 서비스[정리]- 인기 있는 일관성 모델 '선형성'=> 목적? 복제된 데이터가 오직 하나의 복사본만 있는 것처럼 보이게 하고 데이터에 대한 모든 연산을 원자적으로 만드는 것=> 장점? 데이터베이스가 단일 스레드 프로그램의 변수처럼 동작하게 만듦=> 단점? 느림. 네트워크 지연이 큰 환경에서 특..

카테고리 없음 2024.07.08

데이터 중심 애플리케이션 설계 (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) 더티읽기: 한 클라이언트가 다른 클라이언트가 썼지만 아직 커밋되지 않은 데이터를 ..

데이터 중심 애플리케이션 설계 (6장 파티셔닝)

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

[Scala 찍먹하기] 유튜브 크롤링 페이지 개발(feat. vuejs)

8시간에 걸쳐 프로그래밍 언어 Scala로 개발해본 유튜브 크롤링 페이지!찍먹하기가 목적이라 복잡한 로직이나 설정은 넣지 않았지만 의미있는 미니 프로젝트였다.Scala를 기반으로 Akka로 HTTP나 stream 등을 설정했다.MVC 아키텍처 패턴 기반의 Play 프레임워크를 사용할지 말지 고민했지만 익히는데 시간이 걸리겠다 판단했다. 오판이었다..!Express를 해봤기에 Nestjs처럼 폴더구조를 잡아주는 역할을 하는 게 굳이 필요할까 했는데 역시 새로 등장하는 기술에는 이유가 있는 법이었다.

카테고리 없음 2024.06.03

[Scala 찍먹하기] 시작하기: 설치부터 프로젝트 생성/실행/종료까지

0. Scala란?2004년에 발표된 객체지향/함수형 프로그래밍의 요소가 결합된 멀티 패러다임 프로그래밍 언어이다. Scala는 확장 가능하다는 의미의 단어 'Scalable'에서 유래되었다. JRE(자바 실행 환경)와 서로 잘 호환되도록 설계되어 JVM(자바 가상 머신)에서 실행할 수 있고, Java 언어와도 호환된다.Scala는 Spring의 초대량 요청 처리에서의 한계를 극복하는 데 도움이 될 수 있다고 한다. 함수형 프로그래밍으로 불변성, 순수 함수를 강조하기 때문에 예측 가능한 코드를 작성할 수 있기 때문이다. 또한 강력한 타입 시스템으로 런타임 안정성을 높여주기도 한다. Scala에서 많이 사용되는 Akka 프레임워크는 액터 모델을 기반으로 하여 분산 시스템과 동시성 처리를 쉽게 할 수 있도록..

언어/Scala 2024.06.03

데이터 중심 애플리케이션 설계 (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) [고가용성] 한 장비(또는 여러 장비나 전체 데이터센터)가 다..

데이터 중심 애플리케이션 설계 (4장 부호화와 발전)

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

데이터 중심 애플리케이션 설계 (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에 데이터를 저장할 때 어떤 일이 일어날까?-..