데이터 중심 애플리케이션 설계 리뷰
데이터중심 애플리케이션 설계 - 3년차 백엔드 개발자의 시각 이 책을 선택한 이유 소프트웨어 엔지니어 필독서 목록을 검색할 때마다 빠지지 않고 등장하는 책이 있었다. 바로 마틴 클레프만의 『데이터중심 애플리케이션 설계』였다. 소프트웨어 엔지니어 필수 서적, 월드 클래스 엔지니어가 되기 위해 읽어야할 12 가지 책 등등 국내, 해외를 가리지 않고...
데이터중심 애플리케이션 설계 - 3년차 백엔드 개발자의 시각 이 책을 선택한 이유 소프트웨어 엔지니어 필독서 목록을 검색할 때마다 빠지지 않고 등장하는 책이 있었다. 바로 마틴 클레프만의 『데이터중심 애플리케이션 설계』였다. 소프트웨어 엔지니어 필수 서적, 월드 클래스 엔지니어가 되기 위해 읽어야할 12 가지 책 등등 국내, 해외를 가리지 않고...
데이터 시스템의 미래 개요 12장에서는 단순히 현재의 시스템을 설명하는 것을 넘어, 미래의 데이터 시스템이 어떻게 설계되고 구축되어야 하는지에 대한 저자의 견해를 제시합니다. 1. 데이터 통합 및 파생 데이터 (Data Integration and Derived Data) 데이터 흐름 시스템의 필요성 현대 애플리케이션에서는 다양한 도구...
Spring Batch를 멀티스레드로 실행시켜서 배치 실행 성능을 높여보자 Spring Batch를 운영하다 보면 대용량 데이터 처리 시 성능 문제에 직면하게 됩니다. 배치에 따라 다르지만, network I/O, DB I/O 작업이 많다면 멀티스레드 처리를 통해 성능을 크게 향상시킬 수 있을 것 같아서 그 과정에서 삽질과 고민을 정리해보고자 합...
스트림 처리 개요 11장에서는 배치 처리와 대비되는 스트림 처리에 대해 다룹니다. 배치 처리가 고정된(bounded) 크기의 데이터를 처리하는 반면, 스트림 처리는 끝없이 이어지는(unbounded) 데이터 스트림을 실시간 또는 거의 실시간으로 처리합니다. 1. 이벤트 스트림 전송 (Transmitting Event Streams) 기본 개...
일괄 처리 개요 10장에서는 요청-응답 방식의 온라인 시스템과 대비되는 배치 처리 시스템에 대해 다룹니다. 배치 처리는 대규모 데이터를 처리하여 파생 데이터를 생성하는 핵심 구성 요소입니다. 1. 배치 처리의 정의와 특징 핵심 개념 고정된(bounded) 크기의 대량 데이터를 입력으로 처리 입력 데이터를 수정하지 않고 새로운 데이터...
일관성과 협의 분산 시스템에서 가장 어려운 문제 중 하나는 여러 노드에 걸쳐 있는 데이터를 일관성 있게 유지하는 것입니다. 네트워크 지연, 노드 장애, 메시지 손실 등의 문제가 언제든 발생할 수 있는 환경에서 모든 노드가 동일한 상태를 유지하기 위해서는 많은 사항을 고려해야합니다. 최종 일관성의 함정 대부분의 복제된 데이터베이스는 최종 일관성...
분산 시스템의 골칫거리 분산 시스템에서는 언제나 문제가 일어날 수 있다. 분산 시스템을 다루는 것은 한 컴퓨터에서 실행되는 소프트웨어를 작성하는 일과는 근본적으로 다르다. 서버 개발자가 분산 환경에서 마주하게 되는 가장 큰 도전은 부분 실패의 비결정적 특성을 다루는 것이다. 분산 시스템에서 시스템이 커질수록 구성 요소 중 하나가 고장날 가능성도...
트랜잭션 트랜잭션이란 무엇인가 트랜잭션은 여러 데이터베이스 작업을 하나의 논리적 단위로 묶어서 처리하는 메커니즘이다. 시스템에 오류가 발생하더라도 데이터베이스가 일관된 상태를 유지할 수 있도록 보장한다. ACID 속성 트랜잭션의 안전 보장은 ACID라는 네 가지 속성으로 설명된다: 원자성 (Atomicity) 트랜잭션 내의 모든 작업이 전...
파티셔닝 파티셔닝 개요 파티셔닝의 정의와 목적 파티셔닝(Partitioning)은 대규모 데이터셋을 여러 작은 부분집합으로 나누어 여러 노드에 분산 저장하는 기술입니다. 이는 단일 머신으로는 처리하기 어려운 대규모 데이터나 높은 쿼리 처리량을 효과적으로 관리하기 위한 핵심 전략입니다. 주요 목적: 확장성: 데이터와 쿼리 부하를 여러 노...
Simple Design 기반 강의: 인프런 Simple Design 강좌 Simple Design 이란? Simple Design은 최소한의 구성요소로 중복 없는 코드를 작성하는 설계 철학입니다. 복잡함을 줄여 더 빠른 개발과 유지보수성 향상을 목표로 합니다. 좋은 코드의 기준 1. 테스트 통과 자동화된 테스트를 만드는 팀에...