책/데이터 중심 어플리케이션 설계 (5) 썸네일형 리스트형 저장소와 검색 (2) 3장 저장소와 검색 (2) 랜덤 I/O 와 순차 I/O랜덤 I/O :디스크에서 데이터가 임의의 위치에 저장되고 그 위치에서 데이터를 읽거나 쓰는 방식 복불복순차 I/O :데이터가 디스크 상의 연속된 위치에 저장되어 순차적으로 읽거나 쓰는 방식 디스크 이동이 최소화 되서 빠른 성능 보장 이전에서 계속해서 보겠다 B Tree BTree(이하 비트리) 비트리 알고리즘은 인덱싱 알고리즘 중에서 가장 일반적으로 사용하고 있고 범용적인 목적으로 사용되는 알고리즘이다 비트리 에서 시작해서 변형 알고리즘이 존재한다 B+Tree 등등 Btree 알고리즘은 원래 값을 변형 시키지 않고 인덱스 구조체 에서 항상 정렬된상태로 유지한다 비트리는 이렇게 생겻다 최상위 노드를 루트노드 중간 노드를 브런치 노드 가장 하위 .. 저장소와 검색 (1) 3장 저장소와 검색 명언부터 시작한다 항상 주변을 단정히 정돈하는 사람은 단지 찾기를 너무 귀찮아하는 사람이다 가장 기본적인 수준에서 데이터베이스는 두 가지 작업을 수행한다 어떤 데이터를 받으면 데이터를 저장하고 나중에 그 데이터를 요청하면 다시 데이터를 제공한다 데이터베이스가 저장과 검색을 내부적으로 처리하는 방법을 application 개발자가 주의해야 하는 이유는 뭘까? 구현하기보단 자기가 현재 처한 상황에 따라서 적합한 저장소 엔진을 선택하는 방법이 좋다 (항상 정답은 없죠 우리 세계에서는 적합하냐 만 존재할뿐..) 많은 데이터베이스들은 내부적으로 추가 전용 데이터 파일인 로그를 사용한다 데이터베이스에서 특정 키의 값을 효율적으로 찾기 위해서 다른 데이터 구조가 필요한데 바로 색인.. 신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (3) 신뢰성은 얼마나 중요할까?증명되지 않는 시장을 위해 시제품을 개발하는 비용이나 매주 작은 이익률의 서비스를 운영하는 비용을 줄이려신뢰성을 희생해야 하는 상황이 있다 하지만 이 경우에는 비용을 줄여야 하는 시점을 잘 알고 있어야 한다이러한 상황은 뭐가 있을까?시장 검증 전 초기단계고비용 구조를 유지하기보다는 빠른 테스트와 피드백 수집을 통해 시장 반응을 확인하는 게 우선제품-시장 적합성 찾기 전제품이 시장에서 명확한 적합성을 찾지 못했을 때 최소한의 기능으로 테스트하는 것이 효과적높은 경쟁압력의 초반 단계빠르게 움직이는 산업시장에서 초기에는 자리선점이 중요하다고 생각자금 소진 위험할 말은 많으나 말하지 않겠음MVP 개발 단계이것 또한 확장성시스템이 현재 안정적으로 동작한다고 해서 미래에도 안정적으로 동작한.. 신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (2) 신뢰성 누구나 어떤 것을 신뢰하거나 신뢰하지 않는다는 의미가 무엇인지 직관적인 개념을 가지고 있다 application은 사용자가 기대한 기능을 수행한다 시스템은 사용자가 범한 실수나 예성치 못한 소프트웨어 사용법을 허용할 수 있다 시스템 성능은 예상된 부하와 데이터 양에서 필수적인 사용 사례를 충분히 만족한다 시스템은 허가되지 않는 접근과 오남용을 방지한다 이 모든 것이 "올바르게 동작함" 을 의미하는 경우 무언가 잘못되더라도 지속적으로 올바르게 동작함을 신뢰성의 의미로 이해할 수 있다 잘못될 수 있는 일을 결함(fault) 이라 부른다 그리고 결함을 예측하고 대처할 수 있는 시스템을 내결함성(fault-tolerant) 또는 탄력성(resilent)라고 한다 여기서 내결함성이라는 용어를 살펴보고 가야.. 신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (1) 오늘날 애플리케이션은 계산 중심이 아닌 데이터 중심이다 애플리케이션의 성능은 computing power 가 아닌 데이터의 양, 복잡도 변화 속도, 신선도이다. 일반적으로 데이터 중심 애플리케이션이 공통으로 필요한 기능은 다음과 같다. 데이터를 저장, 수집, 찾을 수 있게 해주는 [데이터베이스] 읽기 속도가 빠르지만 그만큼 자원이 많이 드는 [캐시] 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공[검색 색인] 비동기 처리를 위해 다른 프로세스로 메시지 보내기 [스트림(실시간 처리)] 주기적으로 대량의 누적된 데이터를 분석 [배치(일괄 처리)] 이러한 기능을 개발자들이 생각없이 적재적소를 빠르게 할 수 있는 이유는 뭔가? 시스템 추상화가 잘되어 있어서 그렇다.. 우리가 뭘 만들.. 이전 1 다음