요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 데이터베이스 언번들링 파생 상태 관찰하기 구체화 뷰와 캐싱 오프라인 대응 가능한 상태 저장 클라이언트 상태 변경을 클라이언트에게 푸시하기 종단 간 이벤트 스트림 읽기도 이벤트다 다중 파티션 데이터 처리 정확성을 목표로 데이터베이스에 관한 종단 간 논증 연산자의 정확히 한 번 실행 중복 억제 연산 식별자 종단 간 논증 종단 간 사고를 데이터 시스템에 적용하기 메모 파생 상태 관찰하기 데이터플로 시스템은 검색 색인, 구체화 뷰, 예측 모델 등의 파생 데이터셋을 생성하고 최신 상태로 유지하는 과정에 사용할 수 있음. 이 과정은 '쓰기 경로'로, 시스템에 정보를 기록할 때마다 일괄 처리와 스트림 처리의 여러 단계를 거친 후, 결과적으로 기록된 데..
요약 4장. 마이크로서비스와 애자일 개발 프로세스의 나머지 부분을 이해함. 기민한 설계/개발 프로세스 점진/반복적인 스크럼 생명주기 아키텍처 정의와 마이크로서비스 도출 스프린트 내 개발 공정 백엔드 설계 및 개발 프런트엔드 영역 설계와 개발 빌드 및 배포 5장. 마이크로서비스 설계 앞부분에 대해 이해함. 마이크로서비스를 도출하는 방법 비즈니스 능력에 근거한 도출 메모 4.2 기민한 설계/개발 프로세스 마이크로서비스를 위한 기민한 설계/개발 프로세스는 DDD를 활용한 스크럼 기반의 마이크로서비스 개발 프로세스를 사용함. 이 프로세스는 최소화된 핵심 설계 영역과 활동을 포함하며, 각 활동별로 최소한의 핵심 산출물을 정의함. 이를 통해 단순하고 체계적이며, 효율적이면서도 기민한 반복적인 흐름을 반영한 개발 프..
요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 데이터베이스 언번들링 데이터 저장소 기술 구성하기 색인 생성하기 모든 것의 메타데이터베이스 언번들링이 동작하게 만들기 언번들링 대 통합 시스템 뭐가 빠졌지? 데이터플로 주변 애플리케이션 설계 파생 함수로서의 애플리케이션 코드 애플리케이션 코드와 상태의 분리 데이터플로: 상태 변경과 애플리케이션 코드 간 상호작용 스트림 처리자와 서비스 메모 데이터베이스 언번들링 데이터베이스, 하둡, 운영체제는 모두 데이터를 저장, 처리, 질의하는 기능을 수행함. 데이터베이스는 특정 데이터 모델의 레코드로, 운영체제는 파일 시스템에 파일로 데이터를 저장함. 유닉스와 관계형 데이터베이스는 정보 관리 문제를 다른 철학으로 접근했음. 유닉스는 저수준의 하드웨어 추..
요약 12장. 데이터 시스템의 미래에 대해 이해함. 데이터 통합 파생 데이터에 특화된 도구의 결합 데이터플로에 대한 추론 파생 데이터 대 분산 트랜잭션 전체 순서화의 제약 인과성 획득을 위한 이벤트 순서화 일괄 처리와 스트림 처리 파생 상태 유지 애플리케이션 발전을 위한 데이터 재처리 람다 아키텍처 일괄 처리와 스트림 처리의 통합 메모 12장. 데이터 시스템의 미래 마지막 장에서는 미래의 관점으로 바꾸어 애플리케이션 설계와 구축 방법의 근본적 개선을 위한 아이디어와 접근법을 제시함. 미래에 대한 의견은 주관적이기에, 이 장에서는 저자의 개인적인 의견을 일인칭으로 표현함. 이 장의 목표는 생산적인 토론의 출발점이 되고, 혼란스러운 개념을 명확히 하는 데 도움을 주는 것임. 책의 목적은 신뢰할 수 있고, 확..
요약 마이크로서비스의 애플리케이션 아키텍처의 나머지 부분에 대해 이해함. 마이크로서비스의 내부 구조 정의 외부 영역 - 세부사항 API 퍼블리싱 어댑터 API 프락시 어댑터 저장소 처리 어댑터 도메인 이벤트 발행 어댑터 도메인 이벤트 핸들러 4장. 마이크로서비스와 애자일 개발 프로세스의 앞 부분을 이해함. 도메인 주도 설계와 마이크로서비스 메모 3.3.3 외부 영역 - 세부사항 외부 영역은 내부 영역의 서비스 인터페이스를 사용하는 인바운드 어댑터와 내부 영역에서 선언한 아웃바운드 인터페이스를 구현하는 다양한 어댑터로 구성됨. 어댑터는 플러그인처럼 교체되거나 확장될 수 있어야 하며, 내부 영역이 먼저 정의된 후 외부 영역의 세부사항은 늦게 정의돼도 상관없도록 해야 함. 이러한 방식이 소프트웨어를 부드럽게 ..
요약 마이크로서비스의 애플리케이션 아키텍처의 나머지 부분에 대해 이해함. 마이크로서비스의 내부 구조 정의 클린 마이크로서비스 마이크로서비스 시스템에서는 각 서비스가 목표와 활용도에 따라 분리되어야 함 적절한 개발 언어, 저장소, 내부 아키텍처를 정의해야 함. 복잡한 비즈니스 규칙을 가진 서비스는 헥사고날 아키텍처나 클린 아키텍처를 기반으로 정의하는 것이 좋음. 외부 영역과 내부 영역으로 구분하며, 내부 영역에는 도메인과 도메인을 감싸는 서비스가 존재함. 서비스 인터페이스와 리포지토리 인터페이스를 통해 외부 영역과 연계함. 의존 관계 역전 원칙을 적용하여 유연성과 확장성을 지원하는 구조를 구축할 수 있음. 내부 영역 - 업무 규칙 트랜잭션 스크립트 패턴 도메인 모델 패턴 도메인 주도 설계의 애그리거트 패턴..
요약 스트림 처리의 나머지 부분에 대해 이해함. 내결함성 마이크로 일괄 처리와 체크포인트 원자적 커밋 재검토 멱등성 실패 후에 상태 재구축하기 메모 내결함성 스트림 처리자가 결함에 견딜 수 있는 방법을 고려해보자. 일괄 처리 프레임워크는 결함에 쉽게 대처할 수 있는데, 이는 입력 파일이 불변이고 각 태스크가 분리된 파일에 출력을 기록하기 때문임. 일괄 처리의 내결함성 접근법은 일부 태스크가 실패할지라도 결과가 정확하게 한 번 처리된 것처럼 보이게 함. 이 원리를 정확히 한 번 시맨틱(exactly-once semantics)이라 하지만, 결과적으로 한 번(effectively-once)이라는 용어가 그 의미를 더 잘 설명함. 스트림 처리에서도 동일한 내결함성 문제가 발생하지만, 이 문제를 다루는 방법은 ..
요약 스트림 처리의 나머지 부분에 대해 이해함. 시간에 관한 추론 이벤트 시간 대 처리 시간 준비 여부 인식 어쨋든 어떤 시계를 사용할 것인가? 윈도우 유형 스트림 조인 스트림 스트림 조인(윈도우 조인) 스트림 테이블 조인(스트림 강화) 테이블 테이블 조인(구체화 뷰 유지) 조인의 시간 의존성 메모 시간에 관한 추론 시간에 관한 추론에서 스트림 처리자는 종종 시간을 다뤄야 할 때가 있으며, 이때 주로 시간 윈도우를 사용함. 일괄 처리와 스트림 처리 프레임워크는 시간을 처리하는 방식에 차이가 있음. 일괄 처리에서 태스크는 과거에 쌓인 대량의 이벤트를 빠르게 처리하며, 시간 단위로 쪼갤 필요가 있다면 각 이벤트에 내장된 타임스탬프를 사용함. 일괄 처리를 수행하는 장비의 시스템 시계를 보는 것은 의미가 없음...
요약 데이터베이스와 스트림의 나머지 부분에 대해 이해함. 이벤트 소싱 이벤트 로그에서 현재 상태 파생하기 명령과 이벤트 상태와 스트림 그리고 불변성 불변 이벤트의 장점 동일한 이벤트 로그로 여러 가지 뷰 만들기 동시성 제어 불변성의 한계 스트림 처리에 대해 이해함. 스트림 처리의 사용 복잡한 이벤트 처리 스트림 분석 구체화 뷰 유지하기 스트림 상에서 검색하기 메시지 전달과 RPC 메모 이벤트 소싱 이벤트 소싱은 도메인 주도 설계(DDD) 커뮤니티에서 개발한 기법으로, 애플리케이션 상태 변화를 변경 이벤트 로그로 저장함. 이벤트 소싱과 변경 데이터 캡처는 비슷하지만, 추상화 레벨에서 차이가 있음. 변경 데이터 캡처는 데이터베이스에서 저수준으로 변경 로그를 추출하며, 애플리케이션은 데이터베이스를 변경 가능한..
요약 마이크로서비스의 애플리케이션 아키텍처의 나머지 부분에 대해 이해함. 헥사고날 아키텍처와 클린 아키텍처 레이어드 아키텍처 소프트웨어의 구성요소를 기능별로 분리하고 계층화하여 결합도를 낮추고 응집도를 높이는 아키텍처임. 주로 프레젠테이션 계층, 애플리케이션 계층, 도메인 계층, 인프라스트럭처 계층으로 구성되며, 각 계층은 상위 계층에서 하위 계층으로의 의존성을 갖는다. 헥사고날 아키텍처 내부 영역과 외부 영역으로 나뉨. 내부 영역은 순수한 비즈니스 로직을 담당하며, 외부 영역은 인바운드 어댑터와 아웃바운드 어댑터로 구성됨. 클린 아키텍처 겹겹이 둘러싸인 영역으로 구성되며, 중앙에서부터 밖으로 엔티티, 유스케이스, 세부사항으로 구분됨. 메모 3.2 헥사고날 아키텍처와 클린 아키텍처 이번 절에서는 전통적으..
요약 애플리케이션 패턴의 나머지 부분에 대해 이해함. 쓰기 최적화: 이벤트 소싱 패턴 이벤트 소싱 패턴은 객체 상태 변경 이벤트를 계산하지 않고 이벤트 저장소에 저장함으로써 메시지 발행 및 저장 처리의 원자성을 보장하고 성능을 최적화하는 방법임. 이벤트 저장소는 이벤트 데이터베이스 역할과 메시지 브로커처럼 작동하여 쓰기 성능을 최적화하고, 정확한 감사 로깅을 제공하며, 객체의 예전 상태를 재구성하는 것이 간단해짐. 3장. 마이크로서비스의 애플리케이션 아키텍처에 대해 이해함. 비즈니스 로직에 대한 관심사 분리 비즈니스 로직은 시스템의 핵심이며, 관심사의 분리 원칙을 따름. 비즈니스 로직 영역과 기술 영역은 철저히 분리함으로써 유지보수성이 높아짐. 데이터베이스 중심 아키텍처의 문제점으로 인해 관심사의 분리 ..
요약 애플리케이션 패턴의 나머지 부분에 대해 이해함. 분산 트랜잭션 처리 패턴 읽기와 쓰기 분리: CQRS 패턴 CQRS 패턴은 명령(입력, 수정, 삭제)과 조회 기능을 분리함으로써 성능 향상을 이루고 리소스 교착상태를 해결할 수 있는 방법임. 이벤트 메시지 주도 아키텍처와 연계하여 쓰기 모델과 읽기 모델을 분리함으로써 쓰기 시스템의 부하를 줄이고 조회 대기 시간을 줄일 수 있음. API 조합과 CQRS CQRS는 다양한 마이크로서비스를 연계해서 서비스를 제공하는 경우 API 조합을 통해 하위 서비스의 의존성을 줄이는 데 도움이 됨. 주문 이력과 같은 서비스를 제공하는 마이크로서비스는 독자적인 저장소를 갖도록 하여 원천 정보를 보유한 여러 마이크로서비스와 데이터 일관성을 유지할 수 있음. 메모 분산 트랜..