<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DDIA on Jiho Kim</title><link>https://blog.wlgh7407.com/posts/books/ddia/</link><description>Recent content in DDIA on Jiho Kim</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Jiho Kim</copyright><lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.wlgh7407.com/posts/books/ddia/index.xml" rel="self" type="application/rss+xml"/><item><title>데이터 중심 애플리케이션 설계 04 부호화와 발전</title><link>https://blog.wlgh7407.com/posts/books/ddia/260412_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-04-%EB%B6%80%ED%98%B8%ED%99%94%EC%99%80-%EB%B0%9C%EC%A0%84/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.wlgh7407.com/posts/books/ddia/260412_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-04-%EB%B6%80%ED%98%B8%ED%99%94%EC%99%80-%EB%B0%9C%EC%A0%84/</guid><description>&lt;h2 class="relative group"&gt;📝 상세 정리
 &lt;div id="-상세-정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%83%81%ec%84%b8-%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;이번 장에선 JSON, XML, 프로토콜 버퍼, Thrift, Avro를 비롯해서 데이터 부호화를 위한 다양한 형식을 살펴볼 것이다.
&lt;ul&gt;
&lt;li&gt;특히 어떻게 스키마를 변경하고 예전/새로운 버전의 데이터와 코드가 공존하는 시스템을 지원할지!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;그리고 REST 원칙과 remote procedure call, actor과 같은 메세지 전달 시스템에서도 어떻게 사용되는지 알아보자.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;데이터 부호화 형식
 &lt;div id="데이터-부호화-형식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b6%80%ed%98%b8%ed%99%94-%ed%98%95%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;언어별 형식
 &lt;div id="언어별-형식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%96%b8%ec%96%b4%eb%b3%84-%ed%98%95%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;JSON과 XML, 이진 변형
 &lt;div id="json과-xml-이진-변형" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#json%ea%b3%bc-xml-%ec%9d%b4%ec%a7%84-%eb%b3%80%ed%98%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;이진 부호화
 &lt;div id="이진-부호화" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%ec%a7%84-%eb%b6%80%ed%98%b8%ed%99%94" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;스리프트와 프로토콜 버퍼
 &lt;div id="스리프트와-프로토콜-버퍼" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%eb%a6%ac%ed%94%84%ed%8a%b8%ec%99%80-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c-%eb%b2%84%ed%8d%bc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;필드 태그와 스키마 발전
 &lt;div id="필드-태그와-스키마-발전" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%95%84%eb%93%9c-%ed%83%9c%ea%b7%b8%ec%99%80-%ec%8a%a4%ed%82%a4%eb%a7%88-%eb%b0%9c%ec%a0%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;데이터 타입과 스키마 발전
 &lt;div id="데이터-타입과-스키마-발전" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0-%ed%83%80%ec%9e%85%ea%b3%bc-%ec%8a%a4%ed%82%a4%eb%a7%88-%eb%b0%9c%ec%a0%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;아브로
 &lt;div id="아브로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%95%84%eb%b8%8c%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;쓰기 스키마와 읽기 스키마
 &lt;div id="쓰기-스키마와-읽기-스키마" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%93%b0%ea%b8%b0-%ec%8a%a4%ed%82%a4%eb%a7%88%ec%99%80-%ec%9d%bd%ea%b8%b0-%ec%8a%a4%ed%82%a4%eb%a7%88" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;스키마 발전 규칙
 &lt;div id="스키마-발전-규칙" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%82%a4%eb%a7%88-%eb%b0%9c%ec%a0%84-%ea%b7%9c%ec%b9%99" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;그러면 쓰기 스키마는 무엇인가?
 &lt;div id="그러면-쓰기-스키마는-무엇인가" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b7%b8%eb%9f%ac%eb%a9%b4-%ec%93%b0%ea%b8%b0-%ec%8a%a4%ed%82%a4%eb%a7%88%eb%8a%94-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;동적 생성 스키마
 &lt;div id="동적-생성-스키마" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8f%99%ec%a0%81-%ec%83%9d%ec%84%b1-%ec%8a%a4%ed%82%a4%eb%a7%88" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;코드 생성과 동적 타입 언어
 &lt;div id="코드-생성과-동적-타입-언어" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bd%94%eb%93%9c-%ec%83%9d%ec%84%b1%ea%b3%bc-%eb%8f%99%ec%a0%81-%ed%83%80%ec%9e%85-%ec%96%b8%ec%96%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;스키마의 장점
 &lt;div id="스키마의-장점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%82%a4%eb%a7%88%ec%9d%98-%ec%9e%a5%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h3 class="relative group"&gt;데이터플로 모드
 &lt;div id="데이터플로-모드" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0%ed%94%8c%eb%a1%9c-%eb%aa%a8%eb%93%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;데이터베이스를 통한 데이터플로
 &lt;div id="데이터베이스를-통한-데이터플로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4%eb%a5%bc-%ed%86%b5%ed%95%9c-%eb%8d%b0%ec%9d%b4%ed%84%b0%ed%94%8c%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;다양한 시점에 기록된 다양한 값
 &lt;div id="다양한-시점에-기록된-다양한-값" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8b%a4%ec%96%91%ed%95%9c-%ec%8b%9c%ec%a0%90%ec%97%90-%ea%b8%b0%eb%a1%9d%eb%90%9c-%eb%8b%a4%ec%96%91%ed%95%9c-%ea%b0%92" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;보관 저장소
 &lt;div id="보관-저장소" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b3%b4%ea%b4%80-%ec%a0%80%ec%9e%a5%ec%86%8c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;서비스를 통한 데이터플로: REST와 RPC
 &lt;div id="서비스를-통한-데이터플로-rest와-rpc" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%9c%eb%b9%84%ec%8a%a4%eb%a5%bc-%ed%86%b5%ed%95%9c-%eb%8d%b0%ec%9d%b4%ed%84%b0%ed%94%8c%eb%a1%9c-rest%ec%99%80-rpc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;웹 서비스
 &lt;div id="웹-서비스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9b%b9-%ec%84%9c%eb%b9%84%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;원격 프로시저 호출(RPC) 문제
 &lt;div id="원격-프로시저-호출rpc-문제" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9b%90%ea%b2%a9-%ed%94%84%eb%a1%9c%ec%8b%9c%ec%a0%80-%ed%98%b8%ec%b6%9crpc-%eb%ac%b8%ec%a0%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;RPC의 현재 방향
 &lt;div id="rpc의-현재-방향" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rpc%ec%9d%98-%ed%98%84%ec%9e%ac-%eb%b0%a9%ed%96%a5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;데이터 부호화와 RPC의 발전
 &lt;div id="데이터-부호화와-rpc의-발전" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b6%80%ed%98%b8%ed%99%94%ec%99%80-rpc%ec%9d%98-%eb%b0%9c%ec%a0%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;메세지 전달 데이터플로
 &lt;div id="메세지-전달-데이터플로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a9%94%ec%84%b8%ec%a7%80-%ec%a0%84%eb%8b%ac-%eb%8d%b0%ec%9d%b4%ed%84%b0%ed%94%8c%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;메시지 브로커
 &lt;div id="메시지-브로커" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a9%94%ec%8b%9c%ec%a7%80-%eb%b8%8c%eb%a1%9c%ec%bb%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h4 class="relative group"&gt;분산 액터 프레임워크
 &lt;div id="분산-액터-프레임워크" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b6%84%ec%82%b0-%ec%95%a1%ed%84%b0-%ed%94%84%eb%a0%88%ec%9e%84%ec%9b%8c%ed%81%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;

&lt;h3 class="relative group"&gt;정리
 &lt;div id="정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h2 class="relative group"&gt;❔질문 사항
 &lt;div id="질문-사항" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a7%88%eb%ac%b8-%ec%82%ac%ed%95%ad" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;🔗 참고 자료
 &lt;div id="-참고-자료" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%b0%b8%ea%b3%a0-%ec%9e%90%eb%a3%8c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;hr&gt;</description></item><item><title>데이터 중심 애플리케이션 설계 03 저장소와 검색</title><link>https://blog.wlgh7407.com/posts/books/ddia/260409_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-03-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%99%80-%EA%B2%80%EC%83%89/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.wlgh7407.com/posts/books/ddia/260409_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-03-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%99%80-%EA%B2%80%EC%83%89/</guid><description>&lt;h2 class="relative group"&gt;📝 상세 정리
 &lt;div id="-상세-정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%83%81%ec%84%b8-%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;인트로
 &lt;div id="인트로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ed%8a%b8%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;가장 기본적인 수준에서 데이터베이스는 두가지 작업을 수행한다
&lt;ul&gt;
&lt;li&gt;데이터 저장하기&lt;/li&gt;
&lt;li&gt;데이터 제공하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이번 장에서는 데이터베이스가 데이터를 저장하는 방법과 데이터를 찾는 방법을 설명하겠다.
&lt;ul&gt;
&lt;li&gt;이걸 왜 알아야 할까?&lt;/li&gt;
&lt;li&gt;저장소 엔진을 직접 구현하는게 아니라 선택하니까, 대략적으로는 알고 고르자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RDB, NoSQL에 대해서 우선 할건데
&lt;ul&gt;
&lt;li&gt;로그 구조 계열 저장소 엔진&lt;/li&gt;
&lt;li&gt;페이지 지향 계열 저장소 엔진&lt;/li&gt;
&lt;li&gt;을 검토할것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;데이터베이스를 강력하게 만드는 자료구조
 &lt;div id="데이터베이스를-강력하게-만드는-자료구조" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4%eb%a5%bc-%ea%b0%95%eb%a0%a5%ed%95%98%ea%b2%8c-%eb%a7%8c%eb%93%9c%eb%8a%94-%ec%9e%90%eb%a3%8c%ea%b5%ac%ec%a1%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;걍 배시로&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db_set&lt;span style="color:#f92672"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	echo &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;, &lt;/span&gt;$2&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; database
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db_get &lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	grep &lt;span style="color:#e6db74"&gt;&amp;#34;^&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;, &amp;#34;&lt;/span&gt; database | sed -e &lt;span style="color:#e6db74"&gt;&amp;#34;s/^&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;, //&amp;#34;&lt;/span&gt; | tail -n &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;이라는 db를 만들면, 쓰기는 매우매우 빠르다.
&lt;ul&gt;
&lt;li&gt;겹쳐도 걍 뒤에 써버리고, -tail로 하나만 가져오니까.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로깅도 비슷한 느낌인걸 잘 알지 않나?&lt;/li&gt;
&lt;li&gt;이런 append-only 데이터 파일을 &lt;strong&gt;로그(log)&lt;/strong&gt; 라고 한다.
&lt;ul&gt;
&lt;li&gt;로그는 사람이 읽을 수 있는 형식일 필요도 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;암튼 db_set은 빠른데, db_get은 O(N)으로 개느리다.&lt;/li&gt;
&lt;li&gt;그래서 다른 데이터 구조가 필요한데..
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;색인&lt;/strong&gt; 에 대해서 알아보겠다.&lt;/li&gt;
&lt;li&gt;다양한 색인 구조를 살펴보고 여러 색인 구조를 비교해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;색인의 일반적인 개념은 어떤 부가적인 메타데이터를 유지하는 것이다.
&lt;ul&gt;
&lt;li&gt;이는 이정표 역할을 해서, 원하는 데이터의 위치를 찾는데 도움을 준다.&lt;/li&gt;
&lt;li&gt;색인은 기본 데이터 (primary data)에서 파생된 &lt;strong&gt;추가적인&lt;/strong&gt; 구조이다.
&lt;ul&gt;
&lt;li&gt;많은 DB는 색인의 추가/삭제를 허용하고 이는 내용에 영향을 미치지 않는다.&lt;/li&gt;
&lt;li&gt;추가적인 구조의 유지보수는 오버헤드를 발생시킨다.
&lt;ul&gt;
&lt;li&gt;보통 쓰기속도를 느리게 만든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이것이 저장소시스템에서 중요한 트레이드오프이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;해시 색인
 &lt;div id="해시-색인" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%95%b4%ec%8b%9c-%ec%83%89%ec%9d%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;key-value 데이터를 색인해보자.&lt;/p&gt;</description></item><item><title>데이터 중심 애플리케이션 설계 02 데이터 모델과 질의 언어</title><link>https://blog.wlgh7407.com/posts/books/ddia/260404_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-02-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EC%A7%88%EC%9D%98-%EC%96%B8%EC%96%B4/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.wlgh7407.com/posts/books/ddia/260404_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-02-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EC%A7%88%EC%9D%98-%EC%96%B8%EC%96%B4/</guid><description>&lt;h2 class="relative group"&gt;📝 상세 정리
 &lt;div id="-상세-정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%83%81%ec%84%b8-%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;인트로
 &lt;div id="인트로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ed%8a%b8%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터 모델은 소프트웨어 개발에서 제일 중요하다&lt;/li&gt;
&lt;li&gt;특히 데이터 모델을 표현하는 방법이 중요한데
&lt;ul&gt;
&lt;li&gt;어떤 데이터를 저장할것인가 (사람 / 조직 등)&lt;/li&gt;
&lt;li&gt;어떤 형태로 저장할것인가 (json / xml 등)&lt;/li&gt;
&lt;li&gt;어떤 장소에 저장할것인가 (램 / 하드디스크 등)&lt;/li&gt;
&lt;li&gt;어떤 방식으로 저장할것인가 (전류 / 빛의파동 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결국 이들을 추상화시키는게 중요하다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;관계형 모델과 문서 모델
 &lt;div id="관계형-모델과-문서-모델" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b4%80%ea%b3%84%ed%98%95-%eb%aa%a8%eb%8d%b8%ea%b3%bc-%eb%ac%b8%ec%84%9c-%eb%aa%a8%eb%8d%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1970년 에드가 코드가 제안한 관계형 모델을 기반으로한 SQL이 젤 잘 알려져있는데&lt;/p&gt;</description></item><item><title>데이터 중심 애플리케이션 설계 01 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션</title><link>https://blog.wlgh7407.com/posts/books/ddia/260329_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-01-%EC%8B%A0%EB%A2%B0%ED%95%A0-%EC%88%98-%EC%9E%88%EA%B3%A0-%ED%99%95%EC%9E%A5-%EA%B0%80%EB%8A%A5%ED%95%98%EB%A9%B0-%EC%9C%A0%EC%A7%80%EB%B3%B4%EC%88%98%ED%95%98%EA%B8%B0-%EC%89%AC%EC%9A%B4-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.wlgh7407.com/posts/books/ddia/260329_til_%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EC%8B%AC-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%A4%EA%B3%84-01-%EC%8B%A0%EB%A2%B0%ED%95%A0-%EC%88%98-%EC%9E%88%EA%B3%A0-%ED%99%95%EC%9E%A5-%EA%B0%80%EB%8A%A5%ED%95%98%EB%A9%B0-%EC%9C%A0%EC%A7%80%EB%B3%B4%EC%88%98%ED%95%98%EA%B8%B0-%EC%89%AC%EC%9A%B4-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98/</guid><description>&lt;h2 class="relative group"&gt;📝 상세 정리
 &lt;div id="-상세-정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%83%81%ec%84%b8-%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h4 class="relative group"&gt;인트로
 &lt;div id="인트로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ed%8a%b8%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;오늘날 많은 애플리케이션들은 계산 중심이 아닌 데이터 중심적
&lt;ul&gt;
&lt;li&gt;애플리케이션을 제한하는 요소는 CPU 성능이 아닌, 데이터의 양 / 복잡도 등이라는 것
&lt;ul&gt;
&lt;li&gt;데이터를 저장 (DB)&lt;/li&gt;
&lt;li&gt;데이터를 빠르게 읽기 (캐시)&lt;/li&gt;
&lt;li&gt;검색과 색인&lt;/li&gt;
&lt;li&gt;비동기 처리 (스트림)&lt;/li&gt;
&lt;li&gt;주기적으로 분석 (배치 처리)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;위와 같은것들을 진행해야하기 때문!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;데이터시스템에 대한 생각
 &lt;div id="데이터시스템에-대한-생각" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0%ec%8b%9c%ec%8a%a4%ed%85%9c%ec%97%90-%eb%8c%80%ed%95%9c-%ec%83%9d%ea%b0%81" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;우리는 DB / 큐 / 캐시 등을 다르게 생각한다.
&lt;ul&gt;
&lt;li&gt;하지만 이걸 &lt;strong&gt;데이터 시스템&lt;/strong&gt;이라고 묶어서 생각하자.&lt;/li&gt;
&lt;li&gt;어차피 분류도 흐려지고 있으니까!
&lt;ul&gt;
&lt;li&gt;메세지큐로 사용하는 데이터스토어인 Redis&lt;/li&gt;
&lt;li&gt;지속성을 보장하는 메세지큐인 Kafka&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;애플리케이션이 단일 도구로는 만족하기 어려울정도로 과도하고 광범위한 요구사항을 가지니까!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아무튼 소프트웨어 시스템에서는 그러면 신뢰성 / 확장성 / 유지보수성이 중요한데&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;신뢰성
 &lt;div id="신뢰성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8b%a0%eb%a2%b0%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;소프트웨어에 대한 신뢰란?
&lt;ul&gt;
&lt;li&gt;애플리케이션은 사용자가 기대한 기능을 수행한다.&lt;/li&gt;
&lt;li&gt;실수나 예상치 못한 사용법도 허용한다.&lt;/li&gt;
&lt;li&gt;필수적인 사용사례를 충분히 만족한다.&lt;/li&gt;
&lt;li&gt;허가되지 않은 접근, 오남용을 방지한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결함과 장애
&lt;ul&gt;
&lt;li&gt;결함
&lt;ul&gt;
&lt;li&gt;잘못될 수 있는 일&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;장애
&lt;ul&gt;
&lt;li&gt;사용자에게 필요한 서비스를 제공하지 못하고 시스템 전체가 멈춘 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결함 확률을 0으로 만드는건 불가능하지만, 결함으로 인해 장애가 발생하지 않게끔 해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;하드웨어 결함
 &lt;div id="하드웨어-결함" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%95%98%eb%93%9c%ec%9b%a8%ec%96%b4-%ea%b2%b0%ed%95%a8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;하드디스크 고장 / 램 결함 / 정전 / 네트워크 케이블 이슈 등&lt;/li&gt;
&lt;li&gt;시스템 장애율을 줄이기 위해
&lt;ul&gt;
&lt;li&gt;하드웨어 구성요소에 중복을 추가하기
&lt;ul&gt;
&lt;li&gt;디스크 RAID구성&lt;/li&gt;
&lt;li&gt;이중전원 CPU&lt;/li&gt;
&lt;li&gt;예비전원용 디젤 발전기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이전에는 저정도로 충분했지만&amp;hellip;&lt;/li&gt;
&lt;li&gt;이제는 데이터양과 계산 요구가 늘어나면서 하드웨어 결함률도 증가했다.
&lt;ul&gt;
&lt;li&gt;소프트웨어 내결함성 기술도 사용해야한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;소프트웨어 오류
 &lt;div id="소프트웨어-오류" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%86%8c%ed%94%84%ed%8a%b8%ec%9b%a8%ec%96%b4-%ec%98%a4%eb%a5%98" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;하드웨어 결함을 무작위적이고 서로 독립적이라고 생각한다.
&lt;ul&gt;
&lt;li&gt;온도같은 약한 상관관계도 있겠지만&lt;/li&gt;
&lt;li&gt;시스템 내 체계적 오류(systematic error)가 있을 수도 있다.
&lt;ul&gt;
&lt;li&gt;잘못된 특정 입력이 있을때 서버 인스턴스가 죽는 버그&lt;/li&gt;
&lt;li&gt;CPU / 메모리 / 디스크 / 네트워크를 과도하게 사용하는 프로세스&lt;/li&gt;
&lt;li&gt;반응이 없거나 잘못된 응답을 반환하는 서비스&lt;/li&gt;
&lt;li&gt;연쇄 장애&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;등의 큰 이슈도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;여기에는 신속한 해결책은 없다.
&lt;ul&gt;
&lt;li&gt;빈틈없는 테스트, 프로세스 격리, 모니터링, 분석 등으로 열심히 해야지..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;인적 오류
 &lt;div id="인적-오류" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ec%a0%81-%ec%98%a4%eb%a5%98" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;사람이 하는일이다보니 오류가 난다
&lt;ul&gt;
&lt;li&gt;사실 운영자 설정 오류가 하드웨어 결함보다 훨씬 많다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;확장성
 &lt;div id="확장성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%99%95%ec%9e%a5%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;증가한 부하에 대처하는 시스템 능력&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;부하 기술하기
 &lt;div id="부하-기술하기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b6%80%ed%95%98-%ea%b8%b0%ec%88%a0%ed%95%98%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;부하 매개변수라 부르는 몇개의 숫자로 나타내자.
&lt;ul&gt;
&lt;li&gt;웹 서버의 초당 요청수&lt;/li&gt;
&lt;li&gt;데이터베이스의 읽기 대 쓰기 비율&lt;/li&gt;
&lt;li&gt;액티브 유저&lt;/li&gt;
&lt;li&gt;캐시 적중률 등..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;평균적인경우가 중요할수도 있고, 극단적인 케이스가 병목일수도 있고&lt;/li&gt;
&lt;li&gt;트위터의 경우
&lt;ul&gt;
&lt;li&gt;개별 사용자는 많은 사람을, 많은 사람은 개별 사용자를 팔로하는데서 문제가 생김&lt;/li&gt;
&lt;li&gt;읽기가 쓰기에 비해 훨씬 많이 일어나므로, 쓰기 시점에 더 많은 일을 하는것이 바람직하다.
&lt;ul&gt;
&lt;li&gt;미리 캐시로 계산해버렷&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하지만 이러면 팔로워가 많은사람은 쓰기 비용이 너무 커지니까..
&lt;ul&gt;
&lt;li&gt;이럴때는 읽기에 더 많은 일을 시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;성능 기술하기
 &lt;div id="성능-기술하기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%b1%eb%8a%a5-%ea%b8%b0%ec%88%a0%ed%95%98%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;부하 매개변수를 증가시키고, 시스템 자원은 그대로 두면 성능이 어떻게 될까?&lt;/li&gt;
&lt;li&gt;성능이 변하지 않기 위해선 자원을 얼마나 많이 늘려야 할까?&lt;/li&gt;
&lt;li&gt;하둡과 같은 처리 시스템에서는 처리량(throughput)에 관심을 가지고, 온라인 시스템에서는 응답시간에 관심을 가진다.&lt;/li&gt;
&lt;li&gt;응답시간은 평균, 백분위, 꼬리 지연 시간 등으로 목표를 설정한다.
&lt;ul&gt;
&lt;li&gt;이 목표를 서비스 수준 목표(SLO) 혹은 서비스 수준 협약서 (SLA)라고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;높은 백분위에서 응답시간의 상당부분은 큐 대기 지연이 차지한다.
&lt;ul&gt;
&lt;li&gt;앞의 느린 요청들 처리를 기다리는 시간&lt;/li&gt;
&lt;li&gt;이를 선두차단이라 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;부하 대응 접근 방식
 &lt;div id="부하-대응-접근-방식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b6%80%ed%95%98-%eb%8c%80%ec%9d%91-%ec%a0%91%ea%b7%bc-%eb%b0%a9%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;용량 확장 (수직 확장)
&lt;ul&gt;
&lt;li&gt;좀더 좋은 장비로 바꾸기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;규모 확장 (수평 확장)
&lt;ul&gt;
&lt;li&gt;다수의 낮은 사양 장비에 부하를 분산하기&lt;/li&gt;
&lt;li&gt;비공유 아키텍쳐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;유지보수성
 &lt;div id="유지보수성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9c%a0%ec%a7%80%eb%b3%b4%ec%88%98%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;레거시 시스템 유지보수&amp;hellip;.&lt;/li&gt;
&lt;li&gt;이를 위해선 다음이 중요하다
&lt;ul&gt;
&lt;li&gt;운용성&lt;/li&gt;
&lt;li&gt;단순성&lt;/li&gt;
&lt;li&gt;발전성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;운용성
 &lt;div id="운용성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9a%b4%ec%9a%a9%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;운영의 편리함 만들기
&lt;ul&gt;
&lt;li&gt;시스템 상태 모니터링 / 서비스 복원&lt;/li&gt;
&lt;li&gt;시스템 장애, 성능 저하 원인 추적&lt;/li&gt;
&lt;li&gt;..등등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;단순성
 &lt;div id="단순성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8b%a8%ec%88%9c%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;시스템에서 복잡도를 최대한 제거해서 새로운 엔지니어가 시스템을 이애하기 쉽게 만들기&lt;/li&gt;
&lt;li&gt;추상화를 적절히 사용해서 우발적 복잡도를 제거하자.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 class="relative group"&gt;발전성
 &lt;div id="발전성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b0%9c%ec%a0%84%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;엔지니어가 이후에 시스템을 쉽게 변경할 수 있게 하기&lt;/li&gt;
&lt;li&gt;애자일 / TDD 등&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;정리
 &lt;div id="정리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;애플리케이션이 유용하기 위해선 다양한 요구사항을 충족해야한다.
이에는 기능적 요구사항과 비기능적 요구사항이 있다.
여기서 비기능적 요구사항인 신뢰성 / 확장성 / 유지보수성을 살펴봤다.&lt;/p&gt;</description></item></channel></rss>