<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ops Insights</title><link>https://docs.makgol.com/</link><description>Recent content on Ops Insights</description><generator>Hugo -- gohugo.io</generator><language>ko-KR</language><copyright>© 2026 Mont</copyright><lastBuildDate>Sun, 12 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://docs.makgol.com/index.xml" rel="self" type="application/rss+xml"/><item><title>01 Claude Code 관측 — OTel 내보내기·대시보드·백필</title><link>https://docs.makgol.com/ai-tools/01-claude-code-otel/</link><pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/ai-tools/01-claude-code-otel/</guid><description>
&lt;h1&gt;Claude Code 관측 — 토큰이 어디로 새는지 숫자로 보기&lt;/h1&gt;&lt;p&gt;&lt;a href="https://docs.makgol.com/homelab/02-dev-workspace/"&gt;홈랩 개발환경 편&lt;/a&gt;의 code-server 터미널에서 하루 종일 Claude Code를 돌립니다. 얼마를 쓰는지는 &lt;code&gt;/cost&lt;/code&gt;로 그때그때 볼 수 있지만, 어느 에이전트가 먹는지, 세션을 새로 열 때마다 얼마가 고정비로 나가는지, 훅이 몇 분을 잡아먹는지는 안 보입니다. 이 글은 그걸 hub 클러스터의 관측 스택(VictoriaMetrics·VictoriaLogs·Tempo·Grafana)으로 끌어온 하루치 기록입니다. 공식 문서는 &lt;a href="https://code.claude.com/docs/ko/monitoring-usage"target="_blank" rel="noopener"&gt;monitoring-usage&lt;/a&gt; 한 장이고, 실제로 발목을 잡은 건 문서 밖에 있었습니다.&lt;/p&gt;</description></item><item><title>우리 배포 형상 — 자체 RUM 컨버터·6 실행 단위·stage/prod 격차</title><link>https://docs.makgol.com/hyperdx-operating/01-our-deployment/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/hyperdx-operating/01-our-deployment/</guid><description>
&lt;h1&gt;우리 배포 형상 — 자체 RUM 컨버터·6 실행 단위·stage/prod 격차&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;우리가 실제로 돌리는 것은 표준 조립에 컴포넌트 하나가 더 붙은 형상입니다.&lt;/p&gt;</description></item><item><title>HyperDX / ClickStack 심층 분석</title><link>https://docs.makgol.com/rum/01-hyperdx-deep-dive/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/01-hyperdx-deep-dive/</guid><description>
&lt;h1&gt;HyperDX / ClickStack 심층 분석 — RUM/플랫폼 도입 실사&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;웹 RUM 대체 후보로는 사실상 유일하지만 OSS 접근통제 공백(SSO·RBAC·멀티테넌시·감사로그 전무)이 다중 팀 도입의 결정적 게이트입니다.&lt;/li&gt;
&lt;li&gt;3 코어(ClickHouse·HyperDX·OTel Collector)에 메타데이터 전용 MongoDB가 필수 의존성으로 붙습니다. 자체(self-hosted) ClickHouse에 연결하는 &amp;lsquo;HyperDX Only&amp;rsquo; 모드에서도 사라지지 않습니다.&lt;/li&gt;
&lt;li&gt;배포 6모드 중 프로덕션 적합은 Managed 또는 Helm뿐이고 자체 인프라를 지키려면 HyperDX Only가 정답 축입니다.&lt;/li&gt;
&lt;li&gt;기능 성숙도: 로그검색·트레이스·웹 세션 리플레이는 🟢, 모바일 RUM은 🔴(네이티브 리플레이 없음), 메트릭은 🟡(PromQL은 실험 기능이며 기본 비활성).&lt;/li&gt;
&lt;li&gt;RBAC는 Managed(ClickHouse Cloud) 전용으로만 GA됐고 OSS는 SSO/RBAC/멀티테넌시/감사로그가 전무합니다. self-host를 고수하려면 oauth2-proxy·팀별 인스턴스·row policy를 조합해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;HyperDX/ClickStack을 &amp;ldquo;Datadog RUM 대체 + 통합 관측성 플랫폼&amp;rdquo; 후보로 도입할 때의 실사(due-diligence) 페이지입니다. &amp;ldquo;로그 스토어 선택지로서의 요약 판단&amp;quot;은 로깅 챕터의 &lt;a href="https://docs.makgol.com/logging/05-hyperdx-clickstack/"&gt;HyperDX / ClickStack&lt;/a&gt;가 이미 다루므로 강점·약점은 다시 늘어놓지 않습니다. 이 페이지는 도입 결정에 필요한 팩트 — 연혁·아키텍처·배포 모드·기능 성숙도·라이선스·거버넌스 갭 — 을 플랫폼 실사 관점에서 심화합니다.&lt;/p&gt;</description></item><item><title>Datadog RUM 커버리지 — 어디까지 대체되나</title><link>https://docs.makgol.com/rum/02-datadog-rum-coverage/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/02-datadog-rum-coverage/</guid><description>
&lt;h1&gt;Datadog RUM 커버리지 — 어디까지 대체되나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;RUM을 하나로 묶어 &amp;ldquo;대체된다/안 된다&amp;quot;고 답하면 틀립니다 — 성격이 다른 하위 제품 4개로 쪼개야 판정이 섭니다.&lt;/li&gt;
&lt;li&gt;RUM-Core(세션 리플레이+CWV 수집/에러+트레이스 상관) 🟢 PoC(Wave 1) · RUM-Frustration 🟡 SQL 사후계산 · RUM-PA(퍼널/리텐션) 🔴 자작/PostHog 병행 · RUM-Mobile 🔴 OTel+Embrace/OpenReplay.&lt;/li&gt;
&lt;li&gt;대체는 프록시가 아니라 &lt;code&gt;@hyperdx/browser&lt;/code&gt; SDK 교체입니다 — &lt;code&gt;datadogreceiver&lt;/code&gt;는 브라우저 RUM intake(&lt;code&gt;/api/v2/rum&lt;/code&gt;)를 아예 수신하지 않습니다.&lt;/li&gt;
&lt;li&gt;좌절 신호·모바일 리플레이는 네이티브 프리미티브가 없다고 확인했습니다(추측 격상 아님) — ClickHouse SQL(&lt;code&gt;sequenceMatch&lt;/code&gt;/&lt;code&gt;windowFunnel&lt;/code&gt;) 자작 또는 전용 툴이 필요합니다.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Datadog RUM을 HyperDX로 대체한 공개 프로덕션 사례&amp;quot;는 찾지 못했습니다 → dual-instrument PoC 성공을 Wave 1 진입 게이트로 명문화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;ldquo;coverage가 어디까지 되나&amp;quot;에 답하는 페이지입니다. &lt;a href="https://docs.makgol.com/rum/01-hyperdx-deep-dive/"&gt;HyperDX 심층 실사&lt;/a&gt;가 플랫폼 관점(연혁·아키텍처·거버넌스 갭)을 다뤘다면 여기서는 Datadog RUM의 기능을 하나씩 &lt;code&gt;@hyperdx/browser&lt;/code&gt;와 대조해 어디까지 1:1로 넘어오고 어디서 끊기는지를 확정합니다.&lt;/p&gt;</description></item><item><title>Datadog 프로토콜 프록시 매핑</title><link>https://docs.makgol.com/rum/03-dd-proxy-mapping/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/03-dd-proxy-mapping/</guid><description>
&lt;h1&gt;Datadog 프로토콜 프록시 매핑 — 어디까지 성립하나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;프록시는 Agent intake(로그·인프라 메트릭·APM 트레이스)에서만 성립하고 브라우저 RUM·세션 리플레이 intake에는 성립하지 않습니다 — RUM은 &lt;code&gt;@hyperdx/browser&lt;/code&gt; SDK 교체가 정답입니다.&lt;/li&gt;
&lt;li&gt;성립하는 영역조차 &lt;code&gt;datadogreceiver&lt;/code&gt;가 &lt;strong&gt;전 신호 alpha&lt;/strong&gt;라 과도기 무중단 브릿지로만 쓸 만하고 영구 아키텍처로는 맞지 않습니다.&lt;/li&gt;
&lt;li&gt;dd browser-sdk의 &lt;code&gt;proxy&lt;/code&gt; 옵션은 트래픽을 우회시키는 진입점일 뿐 &lt;strong&gt;변환용은 아닙니다&lt;/strong&gt; — 본문 불변(바이너리 그대로 포워딩)이 설계 전제입니다.&lt;/li&gt;
&lt;li&gt;변환 계층은 native 대비 &lt;strong&gt;최대 ~200배 CPU&lt;/strong&gt;, delta 메트릭 &lt;strong&gt;30~70% 손실&lt;/strong&gt;(#44907) 등 fidelity 결함이 실증됐습니다.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;dd 인테이크를 ClickHouse/HyperDX로 변환해 프로덕션 운영한다&amp;quot;는 &lt;strong&gt;회사명이 붙은 1차 사례를 찾지 못했습니다&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;ldquo;dd agent/dd-trace 오픈소스 코드를 참조해 Datadog 인테이크 트래픽을 그대로 받아 HyperDX/ClickHouse로 변환하는 프록시 계층&amp;quot;을 직접 만들 수 있는지 검증합니다. 결론부터: &lt;strong&gt;프록시는 Agent intake(로그·인프라 메트릭·APM 트레이스)에서만 성립하고 브라우저 RUM·세션 리플레이 intake에는 성립하지 않습니다.&lt;/strong&gt; RUM은 SDK 교체가 정답입니다(&lt;a href="https://docs.makgol.com/rum/02-datadog-rum-coverage/"&gt;Datadog RUM 커버리지&lt;/a&gt;). 로그/메트릭/APM에서 성립하는 프록시도 &lt;strong&gt;과도기 무중단 브릿지&lt;/strong&gt;까지만 합당하고 영구 아키텍처로 두기엔 무리입니다 — 성숙도(alpha), 변환 CPU 세금, 프로덕션 전례 부재 때문입니다.&lt;/p&gt;</description></item><item><title>Datadog 전 제품군 대체 매트릭스</title><link>https://docs.makgol.com/rum/04-datadog-replacement-matrix/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/04-datadog-replacement-matrix/</guid><description>
&lt;h1&gt;Datadog 전 제품군 대체 매트릭스 — RUM 너머로 확장하기&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;HyperDX/ClickStack은 Datadog의 &lt;strong&gt;MELT+세션리플레이 코어&lt;/strong&gt;(Logs·Traces·RUM 웹코어·Session Replay)를 커버하지만 나머지 절반(Security·Synthetics·NPM/DBM·CI·On-Call 등)은 범위 밖 — 전용 OSS 개별 이관 또는 Datadog 잔류.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;메트릭 계층은 VictoriaMetrics+Grafana&lt;/strong&gt;로 분리합니다 — HyperDX의 PromQL은 실험 기능이고 일반 &lt;code&gt;otel_metrics_*&lt;/code&gt;에 자동 적용되지 않으며 ClickHouse SQL을 겨냥한 변환기도 없습니다.&lt;/li&gt;
&lt;li&gt;Wave 이관: 1 RUM웹코어 → 2 Logs → 3 APM → 4 Metrics(VM) → 5 나머지 개별. &lt;strong&gt;Wave 4를 HyperDX로 잡으면 공수가 2~4배 팽창&lt;/strong&gt;합니다.&lt;/li&gt;
&lt;li&gt;절감은 대부분 스토리지 이관에서 나오지만 host high-water mark·custom metrics tax 같은 과금 함정과 인건비 상쇄를 함께 계산해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana OnCall OSS는 2026-03-24 아카이브 예정&lt;/strong&gt;이므로 On-Call 대안으로 신규 채택하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;RUM 하나만 빼오는 것으로는 Datadog 청구서가 크게 줄지 않습니다. RUM은 진입점이고 실제 절감은 로그·트레이스·메트릭 &amp;ldquo;스토리지&amp;quot;를 옮길 때 나옵니다. 이 페이지는 웹 RUM 내재화(&lt;a href="https://docs.makgol.com/rum/02-datadog-rum-coverage/"&gt;RUM 대체 커버리지&lt;/a&gt;)를 넘어 &lt;strong&gt;Datadog 전 제품군을 어디까지, 무엇으로 대체하는가&lt;/strong&gt;를 의사결정 관점에서 정리합니다.&lt;/p&gt;</description></item><item><title>마이그레이션 로드맵</title><link>https://docs.makgol.com/rum/05-migration-roadmap/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/05-migration-roadmap/</guid><description>
&lt;h1&gt;마이그레이션 로드맵 — Datadog 이관 실행 계획&lt;/h1&gt;&lt;p&gt;이 로드맵은 &lt;strong&gt;2026-07의 표준 SDK 교체·로컬 NVMe 전제에 따른 계획&lt;/strong&gt;입니다. 아래 체크리스트는 실행 완료 기록이 아닙니다. 이후의 &lt;a href="https://docs.makgol.com/hyperdx-operating/01-our-deployment/"&gt;우리 배포 형상&lt;/a&gt;은 자체 RUM 컨버터·EBS 기반 stage를 기록하므로 그 경로에 맞춰 검증 항목을 조정해야 합니다. 2026-09의 PromQL·Terraform·Datadog 수신 변경은 &lt;a href="https://docs.makgol.com/rum/08-datadog-coverage-2026-09/"&gt;커버리지 재판정&lt;/a&gt;을 기준으로 읽습니다.&lt;/p&gt;</description></item><item><title>RUM 참고 자료</title><link>https://docs.makgol.com/rum/06-sources/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/06-sources/</guid><description>
&lt;h1&gt;출처 — RUM 섹션 조사 문서 원본 링크&lt;/h1&gt;&lt;p&gt;RUM 섹션(01&lt;del&gt;05)의 근거는 &lt;code&gt;research/hyperdx-clickhouse/&lt;/code&gt; 아래 조사 문서 8개입니다 — 01-hyperdx-deep-dive, 02-rum-replacement, 03-datadog-replacement-matrix, 07-recommendation, 08-supplement-1&lt;/del&gt;2·4~5. 이 페이지는 그 문서들의 &amp;ldquo;## 출처&amp;rdquo; 섹션에 나열된 URL을 전부 모아 중복을 걷어내고 주제별로 재정리했습니다. 개별 URL이 본문 어느 주장을 뒷받침하는지는 각 조사 문서를 직접 대조해야 합니다. 이 페이지는 색인 목적으로만 씁니다. &lt;a href="https://docs.makgol.com/rum/07-hyperdx-mongodb/"&gt;HyperDX의 MongoDB&lt;/a&gt;(07)는 별도 딥리서치(3-vote 적대검증, 2026-07-15) 기반입니다. 그 근거 URL도 아래 표에 포함했습니다. 조사 기준 2026-07.&lt;/p&gt;</description></item><item><title>HyperDX 커버리지 재판정 — Datadog 대비 2026-09</title><link>https://docs.makgol.com/rum/08-datadog-coverage-2026-09/</link><pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rum/08-datadog-coverage-2026-09/</guid><description>
&lt;h1&gt;HyperDX 커버리지 재판정 — Datadog 대비 2026-09&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;HyperDX의 Datadog 대체 범위는 넓어졌습니다. PromQL은 실험적 경로가 생겼고, Terraform은 셀프호스트도 지원하는 Beta입니다. 알림 평가 이력과 그룹별 발화도 있습니다.&lt;/li&gt;
&lt;li&gt;Datadog Agent의 로그·메트릭·트레이스를 받는 것과 Datadog RUM·세션 리플레이·모니터 설정을 그대로 옮기는 것은 별도 문제입니다.&lt;/li&gt;
&lt;li&gt;이 글은 2026-09-08에 확인한 공식 문서·upstream 소스 기준입니다. 우리 배포의 이미지 버전과 자체 컨버터를 실행 검증한 결과는 아닙니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://docs.makgol.com/rum/01-hyperdx-deep-dive/"&gt;플랫폼 심층 분석&lt;/a&gt;, &lt;a href="https://docs.makgol.com/rum/02-datadog-rum-coverage/"&gt;RUM 커버리지&lt;/a&gt;, &lt;a href="https://docs.makgol.com/rum/04-datadog-replacement-matrix/"&gt;전 제품군 대체 매트릭스&lt;/a&gt;의 2026-07 조사에서 바뀐 판단을 정리합니다. 기능의 존재, Datadog과의 동등성, 우리 배포에서의 가용성을 따로 확인합니다.&lt;/p&gt;</description></item><item><title>S3 계정 간 복사 — aws s3 sync · rclone · rsync</title><link>https://docs.makgol.com/s3/01-cross-account-copy-tools/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/s3/01-cross-account-copy-tools/</guid><description>
&lt;h1&gt;01 · 계정 간 복사 — aws s3 sync · rclone · rsync는 어디서 갈리나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;rsync는 선택지가 아니다. S3 API를 모르니 FUSE 마운트가 필요하고 그 위에서는 델타 전송·rename·mtime이 전부 무너진다.&lt;/li&gt;
&lt;li&gt;소규모 일회성 복사는 &lt;code&gt;aws s3 sync&lt;/code&gt;. 서버사이드 CopyObject라 데이터가 내 머신을 거치지 않고 같은 리전이면 요청 요금만 낸다.&lt;/li&gt;
&lt;li&gt;객체 수십만 개 이상이거나 반복 동기화면 &lt;code&gt;rclone&lt;/code&gt;. 단 &lt;code&gt;--server-side-across-configs&lt;/code&gt;가 없으면 에러 없이 다운로드→업로드로 돌아서고 mtime 비교는 객체마다 HEAD를 한 번씩 더 부른다.&lt;/li&gt;
&lt;li&gt;셋 다 현재 버전만 옮기고 태그·ACL·스토리지 클래스는 도구마다 다르게 잃는다. 버전 이력까지 보존해야 하면 S3 Replication(Batch Replication)으로 간다.&lt;/li&gt;
&lt;li&gt;계정 간이면 도구와 무관하게 SSE-KMS 키 정책과 Object Ownership 설정이 먼저 걸린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;기준일은 2026-09-07, 요금은 버지니아 북부(us-east-1) S3 Standard 기준입니다.&lt;/p&gt;</description></item><item><title>이 사이트에 대하여</title><link>https://docs.makgol.com/about/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/about/</guid><description>
&lt;h2&gt;누가 쓰나&lt;span class="hx:absolute hx:-mt-20" id="누가-쓰나"&gt;&lt;/span&gt;
&lt;a href="#%eb%88%84%ea%b0%80-%ec%93%b0%eb%82%98" class="subheading-anchor" aria-label="이 섹션에 대한 고유 링크"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Mont(mont kim)이 씁니다. EKS 위에서 Istio·Karpenter·VictoriaMetrics·ClickHouse·HyperDX 같은 것을 운영하며 남긴 기록이 중심입니다. 같은 사람이 쓰는 블로그는 &lt;a href="https://makgol.com"target="_blank" rel="noopener"&gt;makgol.com&lt;/a&gt;이고, 프로필은 &lt;a href="https://makgol.com/about"target="_blank" rel="noopener"&gt;makgol.com/about&lt;/a&gt;에 있습니다.&lt;/p&gt;</description></item><item><title>Prometheus가 하지 않는 일</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/01-prometheus-retention/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/01-prometheus-retention/</guid><description>
&lt;h1&gt;Prometheus가 하지 않는 일 — 리텐션의 경계&lt;/h1&gt;&lt;p&gt;Prometheus 리텐션을 늘려 장기 보관을 해결하려다 보면 곧 벽을 만납니다. 기간을 늘리면 용량이 선형으로 늡니다. 해상도를 깎아 완만하게 만들 방법이 Prometheus 안에는 없습니다.&lt;/p&gt;</description></item><item><title>Thanos Compactor가 채우는 자리</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/02-thanos-downsampling/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/02-thanos-downsampling/</guid><description>
&lt;h1&gt;Thanos Compactor가 채우는 자리 — 다운샘플링의 실제 동작&lt;/h1&gt;&lt;p&gt;Prometheus에 없는 해상도 티어링은 Thanos Compactor가 맡습니다. 오브젝트 스토리지 버킷을 훑으면서 블록을 병합하고 해상도를 깎은 블록을 새로 만들고 만료된 블록을 지웁니다.&lt;/p&gt;</description></item><item><title>Sidecar vs Receive</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/03-sidecar-vs-receive/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/03-sidecar-vs-receive/</guid><description>
&lt;h1&gt;Prometheus에 붙이는 두 방식 — Sidecar vs Receive&lt;/h1&gt;&lt;p&gt;&amp;ldquo;Thanos를 붙인다&amp;quot;는 한마디가 전혀 다른 배치 둘을 가리킵니다. 어느 쪽을 고르느냐에 따라 방화벽 정책과 장애 반경이 달라집니다.&lt;/p&gt;</description></item><item><title>VictoriaMetrics에 Thanos를 붙일 수 있나</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/04-victoriametrics-and-thanos/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/04-victoriametrics-and-thanos/</guid><description>
&lt;h1&gt;VictoriaMetrics에 Thanos를 붙일 수 있나&lt;/h1&gt;&lt;p&gt;&amp;ldquo;Prometheus를 VictoriaMetrics로 바꾸고 뒤에 Thanos를 붙여 S3 장기 보관을 한다&amp;quot;는 그림이 자연스러워 보입니다. 성립하지 않습니다.&lt;/p&gt;</description></item><item><title>Receive 실전 구성</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/05-receive-setup/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/05-receive-setup/</guid><description>
&lt;h1&gt;Thanos Receive 실전 구성&lt;/h1&gt;&lt;p&gt;앞 문서들의 결론을 배치로 옮깁니다. 파드 넷이 뜹니다 — Receive, Compactor, Store Gateway, Querier. 여기에 캐시를 붙이면 다섯입니다.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;vmagent / Prometheus(agent) ──remote write──▶ Receive (로컬 TSDB → 2h마다 업로드)
│
▼
오브젝트 스토리지
▲
Compactor (병합·다운샘플·리텐션, 싱글턴)
│
Grafana ◀── Querier ◀── Store Gateway ────────────┘
└────── Receive (최근 구간)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="코드 복사"
aria-label="코드 복사"
data-copied-label="복사됨!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;버킷 설정 (공통)&lt;span class="hx:absolute hx:-mt-20" id="버킷-설정-공통"&gt;&lt;/span&gt;
&lt;a href="#%eb%b2%84%ed%82%b7-%ec%84%a4%ec%a0%95-%ea%b3%b5%ed%86%b5" class="subheading-anchor" aria-label="이 섹션에 대한 고유 링크"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;네 컴포넌트가 같은 파일을 Secret으로 마운트합니다.&lt;/p&gt;</description></item><item><title>Thanos·VM·Mimir 선택 가이드</title><link>https://docs.makgol.com/monitoring/prometheus-thanos/06-choosing/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/prometheus-thanos/06-choosing/</guid><description>
&lt;h1&gt;무엇을 고를 것인가&lt;/h1&gt;&lt;p&gt;앞의 다섯 문서를 판단 순서로 압축합니다.&lt;/p&gt;
&lt;h2&gt;첫 질문 — 해상도 티어링이 정말 필요한가&lt;span class="hx:absolute hx:-mt-20" id="첫-질문--해상도-티어링이-정말-필요한가"&gt;&lt;/span&gt;
&lt;a href="#%ec%b2%ab-%ec%a7%88%eb%ac%b8--%ed%95%b4%ec%83%81%eb%8f%84-%ed%8b%b0%ec%96%b4%eb%a7%81%ec%9d%b4-%ec%a0%95%eb%a7%90-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80" class="subheading-anchor" aria-label="이 섹션에 대한 고유 링크"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;필요 없을 수 있습니다. 카디널리티가 크지 않으면 raw를 그대로 오래 들고 가는 편이 단순하고 쌉니다.&lt;/p&gt;</description></item><item><title>JVM vs GraalVM</title><link>https://docs.makgol.com/runtime/01-jvm-graalvm/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/runtime/01-jvm-graalvm/</guid><description>
&lt;h1&gt;01 · JVM vs GraalVM — 시동을 사면 무엇으로 값을 치르나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;지도가 2025년 9월에 바뀌었습니다.&lt;/strong&gt; Graal JIT은 Oracle JDK 24가 마지막이고 JDK 25에서 빠졌습니다. Native Image도 Java SE 구독의 지원 범위에서 제외됐고 Oracle은 같은 목표를 &lt;strong&gt;Project Leyden&lt;/strong&gt;으로 가져갔습니다. 기술이 죽은 건 아니지만 &amp;ldquo;중간 지대&amp;quot;였던 Graal JIT은 실제로 사라졌습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Native Image가 C2보다 빠르다&amp;quot;는 유료 전제 위에 서 있습니다.&lt;/strong&gt; Oracle의 Petclinic 수치(13,075 vs 12,488 req/s)는 PGO와 G1을 켠 조합인데 &lt;strong&gt;둘 다 Community Edition에는 빠져 있습니다.&lt;/strong&gt; CE + Serial GC + PGO 없음이라는 실제 오픈소스 조합의 공개 수치는 어느 벤더 자료에도 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CE Native Image는 Serial GC 고정입니다.&lt;/strong&gt; 기본 최대 힙이 물리 메모리의 &lt;strong&gt;80%&lt;/strong&gt;(G1은 25%)이고 문서가 &amp;ldquo;GC 중 RSS가 최대 힙의 2배까지 일시 증가할 수 있어 컨테이너에서 문제가 된다&amp;quot;고 직접 경고합니다. &lt;code&gt;-Xmx&lt;/code&gt;를 지정하지 않으면 컨테이너에서 터집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동시성 논쟁의 실제 변수는 실행 모델이 아니라 acceptor입니다.&lt;/strong&gt; 6만 연결 실측에서 Tomcat은 CPU 20%인 채로 2만에서 99.9% 실패했습니다. TCP 연결을 받아들이는 쪽이 먼저 막혔고 처리 능력은 남아 있었습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;리액티브가 메모리에 유리하다는 통념은 조건부입니다.&lt;/strong&gt; 같은 실측에서 1.6KB 응답으로 바꾸자 WebFlux는 GC에 108초를 쓰며 P50이 1.17초로 무너졌고 가상 스레드가 31% 더 처리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시동만 문제라면 런타임을 안 바꾸는 답이 생겼습니다.&lt;/strong&gt; JDK 24/25의 AOT 캐시는 Spring PetClinic 시동을 4.486초에서 2.604초로 줄이면서(&lt;strong&gt;42%&lt;/strong&gt;) JIT을 그대로 둡니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;회사에서 런타임을 바꿔보자는 말이 나오는 이유는 대개 비슷합니다. 시동이 느리다, 메모리를 많이 먹는다, 오토스케일이 붙을 때마다 처음 몇 초가 아프다. 그래서 GraalVM을 꺼내 봅니다.&lt;/p&gt;</description></item><item><title>Python 워커 16개 vs 워커 2 + 스레드 32</title><link>https://docs.makgol.com/runtime/02-python-worker-thread/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/runtime/02-python-worker-thread/</guid><description>
&lt;h1&gt;02 · 워커 16개 vs 워커 2개 + 스레드 32개 — 무엇이 정말 달라지나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--threads 32&lt;/code&gt;를 주는 순간 워커 클래스가 통째로 바뀝니다.&lt;/strong&gt; gunicorn 문서가 명시합니다 — &amp;ldquo;If you try to use the &lt;code&gt;sync&lt;/code&gt; worker type and set the &lt;code&gt;threads&lt;/code&gt; setting to more than 1, the &lt;code&gt;gthread&lt;/code&gt; worker type will be used instead.&amp;rdquo; &amp;ldquo;동기 워커에 스레드를 붙였다&amp;quot;는 표현부터 성립하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;최대 처리량은 거의 같습니다.&lt;/strong&gt; 같은 CPU limit 아래에서 두 배치의 상한은 둘 다 &lt;code&gt;limit ÷ 요청당 CPU 시간&lt;/code&gt;입니다. 달라지는 건 그 상한에 &lt;strong&gt;어떻게&lt;/strong&gt; 도달하는지, 상한을 넘긴 부하가 &lt;strong&gt;어디에 쌓이는지&lt;/strong&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스레드 32개가 실제로 겹치는 건 GIL을 놓는 구간뿐입니다.&lt;/strong&gt; DB 대기와 외부 HTTP는 GIL 밖이고 ORM이 행을 객체로 바꾸는 순간부터 직렬화·템플릿까지는 전부 GIL 안입니다. 그래서 이득은 &lt;strong&gt;요청 시간에서 대기가 차지하는 비중&lt;/strong&gt;에 정비례합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--timeout&lt;/code&gt;의 의미가 달라집니다.&lt;/strong&gt; 동기 워커에서는 사실상 요청 상한이지만 gthread에서는 &amp;ldquo;프로세스가 살아 있다&amp;quot;는 신호일 뿐입니다. 옮겨 심지 않으면 요청 상한이 사라집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;느린 요청 하나가 그 워커의 후속을 막는다&amp;quot;는 서술은 기본 설정에서 틀렸습니다.&lt;/strong&gt; 커널 accept 큐가 하나라 워커에 미리 배정된 후속 요청이 없습니다. 오히려 gthread가 커넥션을 미리 집어가면서 그 한 줄을 워커 수만큼 쪼갭니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;장애 반경이 16배 차이 납니다.&lt;/strong&gt; 워커 하나가 죽을 때 잃는 것은 (A)에서 요청 1개, (B)에서 최대 32개 + 그 워커가 물고 있던 keep-alive 커넥션 전부입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스레드는 동시성을 늘리지 durability를 만들지 않습니다.&lt;/strong&gt; Celery의 대체재가 아닙니다. 순서가 반대입니다 — Celery로 무거운 작업을 빼야 (B)가 유리해지는 조건이 만들어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;같은 파드, 같은 CPU limit에서 두 배치를 놓고 고민하는 상황입니다.&lt;/p&gt;</description></item><item><title>Python GIL × CPU Limit</title><link>https://docs.makgol.com/k8s-features/06-python-gil-cfs/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/k8s-features/06-python-gil-cfs/</guid><description>
&lt;h1&gt;06 · Python GIL × CPU Limit — &amp;ldquo;1코어 런타임&amp;quot;은 왜 잘리는가&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;GIL은 성능 장치가 아니라 &lt;strong&gt;뮤텍스&lt;/strong&gt;입니다. 바이트코드를 실행하는 스레드가 한 순간에 하나뿐이므로 순수 파이썬 프로세스의 CPU 소비는 &lt;strong&gt;정의상 코어 하나 분을 넘지 못합니다&lt;/strong&gt; — limit이 1코어 이상이면 바이트코드만으로는 스로틀이 성립하지 않습니다.&lt;/li&gt;
&lt;li&gt;CFS quota는 &amp;ldquo;코어당 지분&amp;quot;이 아니라 &lt;strong&gt;시간 예산 풀&lt;/strong&gt;입니다. 4코어 노드의 limit 1이 &amp;ldquo;코어마다 25%씩&amp;quot;을 뜻하지는 않습니다. 실행할 스레드가 있는 런큐만 전역 풀에서 5ms 슬라이스를 꺼내가는 구조입니다.&lt;/li&gt;
&lt;li&gt;그런데도 실제 파이썬 컨테이너는 잘립니다. 경로는 네 갈래입니다 — &lt;strong&gt;워커 프로세스 다중화 · GIL을 놓는 네이티브 스레드풀 · 1코어 미만 limit의 슬라이스 입도 · free-threading.&lt;/strong&gt; 현행 커널의 파이썬 스로틀 사고는 전부 여기 속합니다.&lt;/li&gt;
&lt;li&gt;잘리면 더 아픕니다. throttle은 per-CPU 단위라 &lt;strong&gt;GIL 홀더가 있는 코어만 잘려도 프로세스 전체가 유저스페이스에서 멈춥니다.&lt;/strong&gt; 커널은 이 문제의 커널 락 버전을 고치는 중이지만 GIL은 유저스페이스 락이라 보호 밖입니다.&lt;/li&gt;
&lt;li&gt;Python은 Go 1.25와 달리 &lt;strong&gt;cgroup을 안 봅니다.&lt;/strong&gt; &lt;code&gt;os.cpu_count()&lt;/code&gt;는 노드 코어 수를 돌려주고 3.13의 해법(&lt;code&gt;PYTHON_CPU_COUNT&lt;/code&gt;)도 수동 주입입니다. 처방은 전부 배포 파이프라인의 몫입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;왜 이 문서가 따로 있나. &lt;a href="https://docs.makgol.com/k8s-features/02-cpu-throttling/"&gt;02 CPU Throttling&lt;/a&gt;이 &amp;ldquo;스로틀이 무엇이고, 어떻게 보이고, 무엇으로 대응하나&amp;quot;를 다룬다면 이 문서는 같은 문제를 &lt;strong&gt;언어 런타임 쪽에서&lt;/strong&gt; 봅니다. 파이썬의 GIL은 두 개의 그럴듯한 오해를 만듭니다 — &amp;ldquo;GIL은 1코어를 갈구도록 설계된 구조다&amp;quot;와 &amp;ldquo;limit 1은 4코어에서 25%씩 배급받는다는 뜻이다&amp;rdquo;. 이 문서는 두 오해를 커널·CPython 소스 수준에서 바로잡고 그 위에서 &amp;ldquo;그런데 왜 실제 파이썬 컨테이너는 잘리는가&amp;quot;를 답합니다. 02 §4의 런타임 표(Go·JVM·Node.js)에서 비어 있던 Python 행이 이 문서입니다.&lt;/p&gt;</description></item><item><title>01 승격 이전 — step과 AnalysisRun</title><link>https://docs.makgol.com/rollouts/01-canary-step-analysisrun/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rollouts/01-canary-step-analysisrun/</guid><description>
&lt;h1&gt;승격 이전 — step과 AnalysisRun&lt;/h1&gt;&lt;p&gt;Rollout에서 &amp;ldquo;승격(promotion)&amp;ldquo;이 하는 일은 하나입니다. &lt;code&gt;status.stableRS&lt;/code&gt;를 새 ReplicaSet의 pod-template-hash로 바꾸는 것. 그 한 줄이 일어나기 전까지의 모든 구간이 &lt;strong&gt;step&lt;/strong&gt;입니다.&lt;/p&gt;</description></item><item><title>02 롤백이 스스로를 취소한다</title><link>https://docs.makgol.com/rollouts/02-rollback-window-weight/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rollouts/02-rollback-window-weight/</guid><description>
&lt;h1&gt;롤백이 스스로를 취소한다&lt;/h1&gt;&lt;p&gt;롤백은 컨트롤러에게 새 rollout입니다. 이 한 문장에서 사고 두 건이 나옵니다.&lt;/p&gt;
&lt;p&gt;첫 번째는 &lt;strong&gt;롤백이 취소되는 것&lt;/strong&gt;입니다. 새 rollout이니 AnalysisRun이 새로 붙습니다. 인시던트 중이라 오류율은 아직 높습니다. 되돌리려는 행위가 판정에 걸려 abort됩니다.&lt;/p&gt;</description></item><item><title>03 그래서 무엇을 할 것인가</title><link>https://docs.makgol.com/rollouts/03-what-to-do/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/rollouts/03-what-to-do/</guid><description>
&lt;h1&gt;그래서 무엇을 할 것인가&lt;/h1&gt;&lt;p&gt;&lt;a href="https://docs.makgol.com/rollouts/02-rollback-window-weight/"&gt;2부&lt;/a&gt;는 기전으로 끝났습니다. &lt;code&gt;rollbackWindow&lt;/code&gt;가 인덱스를 스텝 끝으로 던지고 역탐색이 방금 건너뛴 마지막 &lt;code&gt;setWeight: 100&lt;/code&gt;을 도로 집어오고 가용량 게이트는 canary를 보지 않는다는 것까지.&lt;/p&gt;</description></item><item><title>02 개발환경 — 브라우저와 아이패드</title><link>https://docs.makgol.com/homelab/02-dev-workspace/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/homelab/02-dev-workspace/</guid><description>
&lt;h1&gt;개발환경 — 터미널 하나를 어디서든 같은 자리로 연다&lt;/h1&gt;&lt;p&gt;앞 편은 클러스터 쪽 이야기였습니다. 이번엔 그 클러스터 위에서 제가 실제로 코드를 만지는 자리를 다룹니다. 한 문장으로 줄이면 hub 클러스터에 code-server를 pod로 띄워 두고 노트북이든 데스크탑이든 브라우저로 들어가 그 터미널에 앉는 구조입니다. 같은 터미널에 아이패드로도 붙습니다. 이 글도 그 터미널 안에서 쓰고 있습니다.&lt;/p&gt;</description></item><item><title>01 hub/edge 2-클러스터 구조</title><link>https://docs.makgol.com/homelab/01-hub-edge-architecture/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/homelab/01-hub-edge-architecture/</guid><description>
&lt;h1&gt;hub / edge — 스토리지 없는 클러스터를 스포크로 두는 홈랩&lt;/h1&gt;&lt;p&gt;홈랩 클러스터가 두 집에 걸쳐 두 개입니다. 하나는 지금 사는 집, 하나는 본가. 오랫동안 이 둘을 &lt;code&gt;stage&lt;/code&gt; / &lt;code&gt;prod&lt;/code&gt;라고 불러왔는데, 어느 순간부터 이 이름이 거짓말을 하고 있었습니다. &amp;ldquo;prod&amp;quot;라던 본가 클러스터는 스토리지도 없이 서버만 켜져 있고 &amp;ldquo;stage&amp;quot;라던 현재 집이 노드 2대에 시놀로지까지 붙은 실질적 중앙이었으니까. 이름과 실체가 어긋나면 도메인 매핑을 매번 머릿속에서 뒤집어야 합니다. 실제로 과거에 stage/prod 도메인이 한 번 스왑된 이력까지 있어서 혼동이 잦았습니다.&lt;/p&gt;</description></item><item><title>레이어 1 — 클러스터 파라미터와 가변성 3분류</title><link>https://docs.makgol.com/eks-upgrade/controlplane/01-cluster-parameters/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/eks-upgrade/controlplane/01-cluster-parameters/</guid><description>
&lt;h1&gt;레이어 1 — 클러스터 파라미터와 가변성 3분류&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;finance blue를 만들 때 정해둘 것 셋 — &lt;code&gt;upgradePolicy.supportType = STANDARD&lt;/code&gt;(기본값이 EXTENDED입니다), &lt;code&gt;deletionProtection = true&lt;/code&gt;, 그리고 &lt;code&gt;serviceIpv4Cidr&lt;/code&gt;·&lt;code&gt;ipFamily&lt;/code&gt;·&lt;code&gt;bootstrapClusterCreatorAdminPermissions&lt;/code&gt;. 뒤 셋은 지금 틀리면 재생성뿐입니다.&lt;/li&gt;
&lt;li&gt;최상위 29개 파라미터는 &lt;strong&gt;create-only 8 · 단방향 불가역 6 · day-2 가변 15&lt;/strong&gt;로 갈립니다(§1).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;upgradePolicy.supportType&lt;/code&gt; 기본값은 &lt;code&gt;EXTENDED&lt;/code&gt;입니다. 명시하지 않으면 표준지원 종료일부터 시간당 $0.60이 자동으로 붙고 확장지원에 실제로 진입한 뒤에는 STANDARD로 못 돌아옵니다(§4).&lt;/li&gt;
&lt;li&gt;되돌릴 수 없는 문 넷 — &lt;code&gt;controlPlaneEgressMode&lt;/code&gt;(CUSTOMER_ROUTED 진입), &lt;code&gt;encryptionConfig&lt;/code&gt;(&lt;code&gt;DisassociateEncryptionConfig&lt;/code&gt; API가 아예 없습니다), &lt;code&gt;authenticationMode&lt;/code&gt;(전진만), &lt;code&gt;ipFamily&lt;/code&gt;(생성 시 영구 고정)(§2).&lt;/li&gt;
&lt;li&gt;Terraform은 되돌리기를 &lt;strong&gt;클러스터 재생성으로 모델링&lt;/strong&gt;합니다 — &lt;code&gt;plan&lt;/code&gt;에 뜨는 &lt;code&gt;# forces replacement&lt;/code&gt;는 버그가 아니라 안전장치입니다(§3).&lt;/li&gt;
&lt;li&gt;버전은 2026-07부터 되돌릴 수 있습니다(7일 창·마이너 1단계·컨트롤 플레인만). 단 &lt;code&gt;--force&lt;/code&gt;는 PDB도 어드미션 웹훅도 우회하지 않습니다(§5).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;이 페이지가 다루는 범위는 &lt;code&gt;CreateCluster&lt;/code&gt;·&lt;code&gt;UpdateClusterConfig&lt;/code&gt;·&lt;code&gt;UpdateClusterVersion&lt;/code&gt;이 받는 &lt;strong&gt;클러스터 레벨 최상위 필드&lt;/strong&gt;입니다. 판정하는 것은 하나뿐입니다. 그 값을 언제 정할 수 있고 정한 뒤에 되돌릴 수 있는가. 2026-08에 새로 열린 컨트롤 플레인 컴포넌트 파라미터의 내부 동작과 튜닝 판단은 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/02-component-parameters/"&gt;레이어 2&lt;/a&gt;, 용량 축인 Provisioned Control Plane 티어는 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/03-provisioned-control-plane/"&gt;용량 축&lt;/a&gt;, 애초에 손댈 수 없는 영역은 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/04-not-tunable/"&gt;레이어 3&lt;/a&gt;이 갖습니다.&lt;/p&gt;</description></item><item><title>2,000노드 Valkey — 무엇이 먼저 부러지는가</title><link>https://docs.makgol.com/valkey/cluster-xl-scale/01-%EB%B6%80%EB%9F%AC%EC%A7%80%EB%8A%94-%EA%B2%83/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/valkey/cluster-xl-scale/01-%EB%B6%80%EB%9F%AC%EC%A7%80%EB%8A%94-%EA%B2%83/</guid><description>
&lt;h1&gt;01 · 2,000노드 Valkey — 무엇이 먼저 부러지고, 그중 무엇이 Kubernetes로 넘어오는가&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;간판 수치는 Kubernetes에서 잰 게 아닙니다. 2,000노드·1B RPS의 서면판인 &lt;a href="https://valkey.io/blog/1-billion-rps/"target="_blank" rel="noopener"&gt;valkey.io 블로그&lt;/a&gt; 원문에 Kubernetes·pod·StatefulSet·container가 한 번도 나오지 않고, 실험대는 &lt;code&gt;r7g.2xlarge&lt;/code&gt;(8코어/64GB) 클러스터 + 부하 생성기 &lt;code&gt;c7g.16xlarge&lt;/code&gt; 750대였습니다. 발표 시작 13초에 본인들이 &amp;ldquo;we come from Amazon, which is mostly a &lt;strong&gt;VM based world&lt;/strong&gt;&amp;ldquo;라고 밝힙니다.&lt;/li&gt;
&lt;li&gt;그래도 엔진 수정 4건은 인프라와 무관하게 넘어옵니다. &lt;a href="https://github.com/valkey-io/valkey/pull/654"target="_blank" rel="noopener"&gt;#654&lt;/a&gt;·&lt;a href="https://github.com/valkey-io/valkey/pull/1018"target="_blank" rel="noopener"&gt;#1018&lt;/a&gt;·&lt;a href="https://github.com/valkey-io/valkey/pull/2154"target="_blank" rel="noopener"&gt;#2154&lt;/a&gt;·&lt;a href="https://github.com/valkey-io/valkey/pull/2277"target="_blank" rel="noopener"&gt;#2277&lt;/a&gt;은 배포 방식이 아니라 cluster bus 코드 안에 들어갔습니다. 버전만 맞추면 됩니다. 각각 8.0 / 8.1 / 9.0 / 9.0.&lt;/li&gt;
&lt;li&gt;CPU 100% 그래프를 클러스터 전체로 읽으면 틀립니다. 슬라이드에서 천장에 붙는 계열은 &lt;code&gt;engine_cpu_percent_p99&lt;/code&gt;고 같은 차트의 p90·avg는 한 자릿수입니다(스냅샷 p90 6.2 / avg 5.80). 발표자 노트는 포화 범위를 &amp;ldquo;atleast 5% of the nodes&amp;rdquo;(오타는 원문 그대로)라 적습니다. 하한이지 점추정이 아닙니다. 2,000노드가 전부 탄 게 아니라 최소 100대가 탔다는 뜻이고, 발표는 이 구분을 하지 않습니다.&lt;/li&gt;
&lt;li&gt;Kubernetes 조언 중 실측이 뒷받침하는 건 사실상 하나입니다. CPU limit을 걸지 마라. 나머지(StatefulSet, headless service 부트스트랩, IP 직결, AZ 분산)는 전부 경험칙이고 발표에 수치가 붙지 않습니다.&lt;/li&gt;
&lt;li&gt;operator는 아직 도입 대상이 아닙니다. API가 &lt;code&gt;v1alpha1&lt;/code&gt;이고 README가 &amp;ldquo;not ready for production use&amp;quot;라고 명시하며 scale-out/in에 Valkey 9.0+를 요구합니다. 그런데 &lt;code&gt;spec.shards&lt;/code&gt;는 진짜 최상위 필드라 Q&amp;amp;A의 &amp;ldquo;shard가 first-class&amp;rdquo; 주장 자체는 맞습니다.&lt;/li&gt;
&lt;li&gt;2,000노드에서 먼저 부러지는 건 처리량이 아니라 장애 복구입니다. 정상 상태 gossip 비용은 노드 수에 선형이었고, 터진 곳은 전부 primary를 수백 개씩 한 번에 죽였을 때의 재접속(415~455 kill)·failure report(499 kill)·투표 경로였습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;왜 이 문서인가. 발표 제목은 &lt;em&gt;Kubernetes at XL Scale&lt;/em&gt;인데 간판 수치인 2,000노드 / 1B RPS는 EC2에서 나왔습니다. 그래서 이 문서는 발표가 증명한 것(엔진 한계와 그 수정)과 조언에 그친 것(Kubernetes 배치·리소스)을 나눠 놓고, 그중 무엇이 Kubernetes로 전이되는지만 남깁니다. 검증 기준은 발표 전사(942줄), 발표자 노트가 붙은 슬라이드 원본 54장, valkey.io 블로그, 업스트림 PR 4건, &lt;code&gt;valkey.conf&lt;/code&gt; unstable 브랜치입니다.&lt;/p&gt;</description></item><item><title>Redis 581샤드를 무중단으로 Kubernetes에 올리기</title><link>https://docs.makgol.com/valkey/braze-k8s-migration/01-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EC%9D%B4%EA%B4%80/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/valkey/braze-k8s-migration/01-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EC%9D%B4%EA%B4%80/</guid><description>
&lt;h1&gt;01 · Redis 581샤드를 무중단으로 Kubernetes에 올리기 — 그리고 90%라는 숫자의 진실&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;&lt;strong&gt;한눈에&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>문제의 형태 — API Gateway를 떠나는 진짜 이유</title><link>https://docs.makgol.com/gateway/01-problem-shape/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/gateway/01-problem-shape/</guid><description>
&lt;h1&gt;01 · 문제의 형태 — API Gateway를 떠나는 진짜 이유&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Connection duration for WebSocket API: 2 hours&lt;/code&gt; · &lt;code&gt;Can be increased: No&lt;/code&gt;. 이 전환의 유일한 논거입니다. 상시 연결이 전제인 단말에 2시간마다 강제 종료가 걸립니다.&lt;/li&gt;
&lt;li&gt;비용 논거는 성립하지 않습니다. 5만 대 상시 연결의 connection-minutes는 월 $540입니다. &amp;ldquo;비싸서 나간다&amp;quot;고 쓰면 첫 질문에서 무너집니다. &lt;em&gt;싸지만 맞지 않습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;2시간 종료의 비용은 쿼터에서 나오지 않습니다. 재접속률 자체는 초당 7건으로 500/s 쿼터의 1.4%에 불과합니다. 재개 메커니즘이 없으면 2시간마다 5만 대가 전량 재동기화합니다. 그게 실제 비용입니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Idle Connection Timeout: 10 minutes&lt;/code&gt;도 상향 불가라 하트비트를 뺄 선택지가 없습니다. 자체 구현으로 옮겨도 이 제약은 없어지지 않고 LB idle timeout으로 이름만 바뀝니다.&lt;/li&gt;
&lt;li&gt;프레임 32KB / 페이로드 128KB. 초과하면 에러 응답 대신 close code 1009로 연결이 끊깁니다. 페이로드가 자랄 여지가 있으면 이 상한에 언제 걸릴지 알 수 없습니다.&lt;/li&gt;
&lt;li&gt;흐름이 일방향이면 WebSocket의 양방향성은 안 쓰는 기능입니다. SSE로 내려가면 재연결과 재개(&lt;code&gt;Last-Event-ID&lt;/code&gt;)가 프로토콜에 내장되어 따라옵니다. WebSocket에서는 전부 직접 만들어야 하는 것들입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;왜 이 문서인가. 전환 검토서의 첫 문장이 &amp;ldquo;API Gateway가 비싸서&amp;quot;이면 그 검토는 거기서 끝납니다. 실제로 계산해보면 쌉니다. 이 문서는 떠나야 하는 이유를 하나로 좁히고 자체 구현으로 넘어갔을 때 &lt;em&gt;따라오는 제약&lt;/em&gt;과 &lt;em&gt;없어지는 제약&lt;/em&gt;을 구분합니다. 검증 기준: AWS 공식 쿼터 표, API Gateway 요금표, WHATWG HTML 명세의 server-sent events 절.&lt;/p&gt;</description></item><item><title>2009 첫 커밋부터 6.2 까지</title><link>https://docs.makgol.com/elasticache/01-origins-and-design/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/elasticache/01-origins-and-design/</guid><description>
&lt;h1&gt;01 · 자료구조 서버는 왜 이렇게 생겼나 — 2009 첫 커밋부터 6.2 까지&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;최초 문제는 &amp;ldquo;캐시가 필요하다&amp;quot;가 아니라 &amp;ldquo;값이 blob 이면 안 된다&amp;quot;였습니다. 첫 커밋에 동봉된 FAQ 가 프로젝트 시작 이유를 한 줄로 적습니다 — &lt;code&gt;In order to scale LLOOGG.&lt;/code&gt;(&lt;code&gt;redis ed9b544e1:doc/FAQ.html&lt;/code&gt;) 같은 커밋의 &lt;code&gt;doc/README.html&lt;/code&gt; 은 memcached 와의 차이를 자료형과 영속성 두 축으로만 설명합니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;첫 커밋(2009-03-22 &lt;code&gt;ed9b544e1&lt;/code&gt;)은 캐시가 아니었습니다. &lt;code&gt;saveDb()&lt;/code&gt; 가 &lt;code&gt;.rdb&lt;/code&gt; 로 쓰고 매직 &lt;code&gt;REDIS0000&lt;/code&gt; 을 박고 &lt;code&gt;fork()&lt;/code&gt; 기반 BGSAVE 와 &lt;code&gt;save 900 1 / save 300 10 / save 60 10000&lt;/code&gt; 이 이미 있습니다 — 그 3줄은 6.0.0 의 기본값과 값까지 동일합니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;없던 것이 더 많습니다 — EXPIRE·hash·sorted set·AOF·epoll·RESP·MULTI·pub/sub·Lua·Cluster·&lt;code&gt;src/&lt;/code&gt; 전부. 이벤트 루프는 연결 리스트 + &lt;code&gt;select(2)&lt;/code&gt; 단일 구현이고 응답은 &lt;code&gt;nil\r\n&lt;/code&gt;·&lt;code&gt;0\r\n&lt;/code&gt; 같은 타입 프리픽스 없는 raw 문자열입니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;단일 스레드는 성능 최적화가 아니라 API 계약이었습니다. &amp;ldquo;락을 지원하지 않는다, 대신 원자 프리미티브를 준다&amp;quot;가 day-1 문서의 답이고(&lt;code&gt;ed9b544e1:doc/README.html&lt;/code&gt;), &lt;code&gt;INCR&lt;/code&gt;·&lt;code&gt;LPUSH&lt;/code&gt;·&lt;code&gt;SINTERSTORE&lt;/code&gt; 가 별도 동기화 없이 원자인 이유가 이것뿐입니다 &lt;code&gt;Σ&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;MANIFESTO 는 두 판본입니다. v1 은 2011-03-01(&lt;code&gt;be14f38de&lt;/code&gt;, 7개 항목)이고 스레딩 항목이 없습니다. &lt;code&gt;7 - Threading is not a silver bullet&lt;/code&gt; 은 2019-03-18 v2(&lt;code&gt;a5af648fd&lt;/code&gt;)에서 추가됐습니다 — 6.0.0 GA(2020-04-30)보다 약 13개월 앞서, 같은 문단이 &lt;code&gt;we may explore parallelism only for I/O, which is the low hanging fruit&lt;/code&gt; 라고 예고합니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;버린 것을 보면 철학이 더 잘 보입니다. Virtual Memory 는 2.0 에 &lt;code&gt;vm-enabled&lt;/code&gt; 로 실렸고 2.4 conf 가 &lt;code&gt;WARNING! Virtual Memory is deprecated in Redis 2.4&lt;/code&gt; 를 붙였고 2.6.0 에서 제거됐습니다(&lt;code&gt;Virtual Memory removed (was deprecated in 2.4)&lt;/code&gt;). 그 자리를 MANIFESTO 2번 &lt;code&gt;Memory storage is #1&lt;/code&gt; 이 대신 지킵니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;6.0 threaded I/O 는 커맨드를 병렬로 돌리지 않습니다. 워커가 하는 일은 &lt;code&gt;writeToClient()&lt;/code&gt; 또는 &lt;code&gt;readQueryFromClient()&lt;/code&gt; 둘 중 하나뿐이고 커맨드는 배리어 통과 뒤 메인 스레드의 &lt;code&gt;processCommandAndResetClient()&lt;/code&gt; 가 실행합니다. 기본값은 &lt;code&gt;io-threads 1&lt;/code&gt;(비활성) + &lt;code&gt;io-threads-do-reads no&lt;/code&gt; 로 둘 다 &lt;code&gt;IMMUTABLE_CONFIG&lt;/code&gt; 이며 SSL 이 켜져 있으면 동작하지 않습니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;6.0 릴리스노트의 &amp;ldquo;2배&amp;rdquo; 주장에는 인스턴스·코어 수·값 크기·클라이언트 수가 없습니다 — &lt;code&gt;when pipelining cannot be used&lt;/code&gt; 라는 한정만 있습니다 &lt;code&gt;Ⓥ&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;왜 이 문서인가.&lt;/strong&gt; Redis 를 기능 목록으로 읽으면 &amp;ldquo;왜 이 기능은 이렇게 생겼나&amp;quot;에 답할 수 없습니다. 이 구간(2009~2021)에서 정해진 것은 기능이 아니라 &lt;strong&gt;제약&lt;/strong&gt;입니다 — 값이 자료구조라는 결정이 단일 스레드를 불렀습니다. 단일 스레드가 원자성을 공짜로 줬고 그 대가를 6.0 이 threaded I/O 로 처음 갚기 시작했습니다. 7.0 이후에 나오는 거의 모든 논쟁(스레딩·메모리 레이아웃·cluster 제약)의 전제가 여기서 굳었습니다.&lt;/p&gt;</description></item><item><title>0.36 → 1.6 — v1 전환과 그 직후</title><link>https://docs.makgol.com/karpenter/01-changelog-v1-transition/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/karpenter/01-changelog-v1-transition/</guid><description>
&lt;h1&gt;01 · 0.36 → 1.6 — v1이 바꾼 것은 API가 아니라 동작이다&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;v1beta1→v1을 &amp;ldquo;필드 이름이 바뀐 일&amp;quot;로 읽으면 사고가 납니다. changelog에서 위험한 절은 &lt;strong&gt;Behavior Changes&lt;/strong&gt;이고 그중 둘은 &lt;strong&gt;옵트아웃이 없습니다&lt;/strong&gt; — drift는 Stable 승격과 함께 feature gate가 삭제됐고(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1311"target="_blank" rel="noopener"&gt;core#1311&lt;/a&gt;), expiration은 forceful로 되돌아갔습니다(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1333"target="_blank" rel="noopener"&gt;core#1333&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;forceful expiration이 무시하는 건 PodDisruptionBudget(PDB)이 아닙니다.&lt;/strong&gt; 무시하는 것은 &amp;ldquo;대체 노드가 &lt;code&gt;Initialized&lt;/code&gt;가 될 때까지 드레인을 시작하지 않는다&amp;quot;는 사전 안전장치와 disruption budget입니다. &lt;code&gt;nodeclaim.expiration&lt;/code&gt; 컨트롤러는 후보 평가 없이 NodeClaim을 바로 &lt;code&gt;Delete&lt;/code&gt;합니다(&lt;code&gt;controllers/nodeclaim/expiration/controller.go:82&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;consolidateAfter&lt;/code&gt;가 v1에서 필수 필드입니다.&lt;/strong&gt; v1beta1의 &lt;code&gt;WhenUnderutilized&lt;/code&gt;에서는 설정조차 불가능했던 값이라 기존 동작을 유지하려면 &lt;code&gt;0s&lt;/code&gt;를 명시해야 합니다. &lt;code&gt;Never&lt;/code&gt;는 그 NodePool의 consolidation을 통째로 끕니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;terminationGracePeriod&lt;/code&gt;(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/916"target="_blank" rel="noopener"&gt;core#916&lt;/a&gt;)가 최종 승자입니다.&lt;/strong&gt; 만료되면 PDB·&lt;code&gt;do-not-disrupt&lt;/code&gt; 무관하게 남은 파드가 강제 삭제됩니다. 반대로 TGP를 걸면 drift가 &amp;ldquo;PDB·&lt;code&gt;do-not-disrupt&lt;/code&gt; 파드가 있는 노드&amp;quot;까지 후보로 채택합니다 — 안전장치를 스스로 꺼주는 대가로 CVE 패치를 밀 수 있게 됩니다. 노드 최대 수명 = &lt;code&gt;expireAfter&lt;/code&gt;(기본 &lt;code&gt;720h&lt;/code&gt;, 상한이지 하한이 아닙니다) + TGP.&lt;/li&gt;
&lt;li&gt;disruption budgets가 &lt;code&gt;Drifted&lt;/code&gt;/&lt;code&gt;Underutilized&lt;/code&gt;/&lt;code&gt;Empty&lt;/code&gt; &lt;strong&gt;reason별로&lt;/strong&gt; 나뉘었습니다(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/991"target="_blank" rel="noopener"&gt;core#991&lt;/a&gt;, &lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1377"target="_blank" rel="noopener"&gt;core#1377&lt;/a&gt;). 삭제된 drift feature gate의 자리를 reason별 budget이 메웁니다 — 업스트림이 제시하는 유일한 drift 통제 수단입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.1.0이 v1beta1 서빙을 끝냈습니다.&lt;/strong&gt; &lt;code&gt;nodeClassRef.group&lt;/code&gt;/&lt;code&gt;kind&lt;/code&gt;가 강제 필수가 되고 kubelet 호환 어노테이션이 사라집니다. 같은 릴리스의 Bottlerocket + &lt;code&gt;instanceStorePolicy: RAID0&lt;/code&gt;은 &lt;strong&gt;v1.22.0 미만 이미지에서 노드가 join하지 못합니다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.2.0의 메트릭 reason 라벨 snake_case 전환은 CI가 못 잡는 알람 무효화입니다.&lt;/strong&gt; &lt;code&gt;reason=&amp;quot;Drifted&amp;quot;&lt;/code&gt; 쿼리는 에러 없이 결과가 0이 됩니다. 같은 릴리스에서 &lt;code&gt;nodeclass.status&lt;/code&gt;·&lt;code&gt;nodeclass.termination&lt;/code&gt;이 &lt;code&gt;nodeclass&lt;/code&gt;로 합쳐졌습니다(&lt;a href="https://github.com/aws/karpenter-provider-aws/pull/7597"target="_blank" rel="noopener"&gt;aws#7597&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.6.0에서 native On-Demand Capacity Reservation(ODCR)이 beta·기본 활성화됐습니다&lt;/strong&gt;(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/2365"target="_blank" rel="noopener"&gt;core#2365&lt;/a&gt;). &lt;code&gt;open&lt;/code&gt; eligibility ODCR을 &lt;code&gt;capacityReservationSelectorTerms&lt;/code&gt;에 등재하지 않고 올리면 &lt;strong&gt;예약을 안 쓰면서 요금은 계속 나갑니다&lt;/strong&gt; — 이 구간에서 가장 비싼 회귀입니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MinValuesPolicy&lt;/code&gt;(1.6, &lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/2299"target="_blank" rel="noopener"&gt;core#2299&lt;/a&gt;·&lt;a href="https://github.com/aws/karpenter-provider-aws/pull/8250"target="_blank" rel="noopener"&gt;aws#8250&lt;/a&gt;)는 전역 옵션이고 기본값은 &lt;code&gt;Strict&lt;/code&gt;입니다. &lt;code&gt;minValues&lt;/code&gt; 자체는 v0.35.0(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/963"target="_blank" rel="noopener"&gt;core#963&lt;/a&gt;)부터 있던 API로 0.36 운영자에게 새 기능이 아닙니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;v1 마이그레이션 가이드 763줄의 절반은 &amp;ldquo;필드가 어디로 갔다&amp;quot;는 표라 &lt;code&gt;kubectl apply&lt;/code&gt; 실패로 바로 드러납니다. 진짜 위험한 건 &lt;strong&gt;매니페스트가 그대로 통과하는데 클러스터가 다르게 행동하는&lt;/strong&gt; 항목입니다 — 만료된 노드가 대체 없이 드레인을 시작하고, 끄고 있던 drift가 켜지고, 쓴 적 없는 &lt;code&gt;consolidateAfter&lt;/code&gt;가 필수가 됩니다.&lt;/p&gt;</description></item><item><title>In-Place Pod Resize (1.35 GA)</title><link>https://docs.makgol.com/k8s-features/01-inplace-pod-resize/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/k8s-features/01-inplace-pod-resize/</guid><description>
&lt;h1&gt;01 · In-Place Pod Resize — 재시작 없이 파드 리소스를 바꾼다&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;1.27 alpha → 1.33 beta → &lt;strong&gt;1.35 GA&lt;/strong&gt;. 파드를 재시작하지 않고 CPU/메모리를 바꿉니다. 반드시 &lt;strong&gt;&lt;code&gt;resize&lt;/code&gt; 서브리소스&lt;/strong&gt;로만 통합니다. 손댈 수 있는 건 &lt;strong&gt;cpu·memory 값뿐&lt;/strong&gt;입니다(QoS 변경·항목 제거·GPU는 전부 거부).&lt;/li&gt;
&lt;li&gt;수락 판정 기준은 실사용량이 아니라 &lt;strong&gt;&amp;ldquo;다른 파드들의 requests 합 vs node allocatable&amp;rdquo;&lt;/strong&gt;. 노드가 붐비면 &lt;strong&gt;Deferred&lt;/strong&gt;(재시도됨), 정책 위반이면 &lt;strong&gt;Infeasible&lt;/strong&gt;(spec을 고치기 전까지 재평가 안 됨).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;늘리는 쪽은 사실상 무위험, 줄이는 쪽만 조심.&lt;/strong&gt; 메모리 축소에는 kubelet 사용량 체크의 TOCTOU 레이스가 남아 OOM-kill을 확실히 막지 못합니다(#135670, open). CPU 축소는 재시작이 없다는 뜻일 뿐 &lt;strong&gt;스로틀 비용을 낳는데 그건 사용률 그래프에 안 보입니다&lt;/strong&gt;(&lt;code&gt;throttled_periods&lt;/code&gt;로 봐야 합니다).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;케이스가 전부입니다.&lt;/strong&gt; &lt;strong&gt;재시작이 비싼 stateful(DB·캐시·롱커넥션)에 최적&lt;/strong&gt;이고 기동 부스트에도 좋습니다. JVM/Node 힙에는 반쪽(CPU만 in-place), VPA 자동화는 아직 이르고 static CPU manager 노드는 사실상 미지원입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;왜 6년이 걸렸을까요. &amp;ldquo;실행 중인 컨테이너의 cgroup 값만 바꾸면 되는 것 아닌가&amp;rdquo; 싶지만 이 기능에서는 &lt;strong&gt;스케줄러가 보는 값·kubelet이 약속한 값·커널에 실제 쓰인 값이 서로 다른 순간이 반드시 생깁니다.&lt;/strong&gt; 그 셋의 정합성에 kubelet 재시작 후의 복구까지 맞추는 데 KEP-1287은 alpha에서 GA까지 6년을 썼습니다. 그래서 이 문서는 공식 문서에서 멈추지 않고 &lt;strong&gt;kubelet이 실제로 하는 일 · 열린 버그 · 케이스별 득실&lt;/strong&gt;까지 내려갑니다.&lt;/p&gt;</description></item><item><title>네이버 검색 SRE 시계열 DB 운영기</title><link>https://docs.makgol.com/monitoring/victoriametrics/by-source/01-2024-02-sre-tsdb/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/victoriametrics/by-source/01-2024-02-sre-tsdb/</guid><description>
&lt;h1&gt;01 · 네이버 검색 SRE의 시계열 데이터베이스 운영기 (2024-02)&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;&lt;strong&gt;참조한 내용정리&lt;/strong&gt; · 이 문서는 아래 네이버 D2 원문을 읽고 우리 지식베이스 형식으로 재구성한 요약입니다. 원문 자체가 아니며 정확한 워딩·전체 맥락·그림은 원문에서 확인합니다.&lt;/p&gt;</description></item><item><title>배경 — 왜 CAPI in-place를 버리고 blue-green인가</title><link>https://docs.makgol.com/eks-upgrade/00-background/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/eks-upgrade/00-background/</guid><description>
&lt;h1&gt;배경 — 왜 CAPI in-place를 버리고 blue-green인가&lt;/h1&gt;&lt;p&gt;finance EKS 클러스터는 원래 CAPI GitOps로 관리하도록 설계돼 있었습니다. 그런데 조사 시점(2026-07)에 그 설계는 이미 반쯤 무너져 있었습니다. 최초 계획은 CAPI GitOps in-place 업그레이드였지만, 조사 과정에서 진단이 두 번 뒤집힌 끝에 &lt;strong&gt;신규 blue 클러스터를 Terraform으로 생성하는 blue-green&lt;/strong&gt;으로 방향이 굳었습니다. &lt;a href="https://docs.makgol.com/eks-upgrade/"&gt;랜딩&lt;/a&gt;이 요약한 이 전환의 근거를 아래 네 포인트로 풀어냅니다.&lt;/p&gt;</description></item><item><title>서비스 메시와 Istio 기초</title><link>https://docs.makgol.com/istio/01-mesh-basics/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/istio/01-mesh-basics/</guid><description>
&lt;h1&gt;01 · 서비스 메시와 Istio 기초 — 왜 EKS에 메시를 얹나&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;서비스 메시 = 데이터 플레인(파드마다 붙는 Envoy 사이드카) + 컨트롤 플레인(istiod). 이 분리가 챕터 전체의 뼈대입니다.&lt;/li&gt;
&lt;li&gt;사이드카는 iptables로 트래픽을 가로채 앱 코드를 그대로 둔 채 mTLS·라우팅·재시도·관측성을 더합니다.&lt;/li&gt;
&lt;li&gt;메시는 공짜가 아닙니다 — 프록시 오버헤드·컨트롤 플레인 부하·설정 복잡도·디버깅 난이도라는 네 비용을 집니다.&lt;/li&gt;
&lt;li&gt;Ambient 모드(사이드카리스, ztunnel+waypoint)는 이 비용을 줄이려는 후속 설계지만, 이 챕터는 사이드카 모드 운영을 전제로 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;02~05는 메시를 운영하며 겪은 사건의 기록입니다. 그 기록이 읽히려면 메시가 무엇으로 이뤄져 있고 그 대가가 무엇인지를 먼저 잡아야 합니다. 이 문서는 서비스 메시의 두 축(데이터 플레인·컨트롤 플레인), 메시가 해주는 것, 그 비용을 다룹니다.&lt;/p&gt;</description></item><item><title>스택 구성</title><link>https://docs.makgol.com/monitoring/victoriametrics/ours/01-stack-overview/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/victoriametrics/ours/01-stack-overview/</guid><description>
&lt;h1&gt;01 · 우리 스택 구성&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;k8s 위 VM operator가 vmagent를 Deployment(stateless)로 띄우고 중앙 VM 클러스터의 vminsert 엔드포인트로 &lt;code&gt;remote_write&lt;/code&gt; 합니다.&lt;/li&gt;
&lt;li&gt;목적지 경로 &lt;code&gt;/insert/0/prometheus&lt;/code&gt;는 클러스터 모드 · tenant 0을 뜻합니다.&lt;/li&gt;
&lt;li&gt;stage/prod는 값이 다릅니다 — 리소스·&lt;code&gt;maxDiskUsagePerURL&lt;/code&gt;이 환경별로 달라지고 prod는 vmagent가 두 계열(용도별 분리)이라 &lt;code&gt;extraArgs&lt;/code&gt;가 양쪽에 함께 걸립니다.&lt;/li&gt;
&lt;li&gt;공통 수집 설정은 &lt;code&gt;scrapeInterval 30s&lt;/code&gt; · &lt;code&gt;promscrape.streamParse=true&lt;/code&gt; · &lt;code&gt;promscrape.maxScrapeSize=24GiB&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;우리 환경에서 지표가 어디서 만들어져 어디로 흘러가는지, 그 구조와 stage/prod 값 차이를 정리합니다. 전송 안정화 Phase 1 튜닝은 &lt;a href="https://docs.makgol.com/monitoring/victoriametrics/ours/02-vmagent-transport-tuning/"&gt;02 vmagent 전송 튜닝&lt;/a&gt;에서, 장기보관 아키텍처는 &lt;a href="https://docs.makgol.com/monitoring/longterm-retention/"&gt;메트릭 장기보관&lt;/a&gt; 챕터에서 따로 다룹니다.&lt;/p&gt;</description></item><item><title>스택 토폴로지 — 4컴포넌트 배치·데이터 흐름·MongoDB 최소 배포</title><link>https://docs.makgol.com/hyperdx/01-stack-topology/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/hyperdx/01-stack-topology/</guid><description>
&lt;h1&gt;스택 토폴로지 — 4컴포넌트 배치·데이터 흐름·MongoDB 최소 배포&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;ClickStack은 &lt;strong&gt;HyperDX(app+api) · OTel Collector · ClickHouse · MongoDB&lt;/strong&gt; 4컴포넌트를 &lt;strong&gt;2개 Helm 차트&lt;/strong&gt;(&lt;code&gt;clickstack-operators&lt;/code&gt; → &lt;code&gt;clickstack&lt;/code&gt;)로 올립니다. 차트 기본은 모든 스테이트풀 컴포넌트가 &lt;strong&gt;단일 인스턴스(PoC용)&lt;/strong&gt; 이지 HA가 아닙니다 &lt;code&gt;✓&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;operator 분기(중요): 표준 차트가 딸려오는 ClickHouse operator는 &lt;strong&gt;ClickHouse Inc. 공식 operator&lt;/strong&gt;(&lt;code&gt;ClickHouseCluster&lt;/code&gt;/&lt;code&gt;KeeperCluster&lt;/code&gt; CRD)입니다. 우리는 이걸 그대로 쓰지 않고 &lt;code&gt;clickhouse.enabled: false&lt;/code&gt;(자체(self-hosted) ClickHouse에 연결하는 &lt;strong&gt;&amp;lsquo;HyperDX Only&amp;rsquo;&lt;/strong&gt;)로 CH/Keeper를 &lt;strong&gt;Altinity CHI/CHK로 분리 운영&lt;/strong&gt;합니다 → /hyperdx/04-operator-topology-downtime/.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RUM 인제스트 경로에 MongoDB는 없습니다.&lt;/strong&gt; 브라우저 → OTLP/HTTP &lt;code&gt;:4318&lt;/code&gt; → Collector → ClickHouse. MongoDB는 UI에서 대시보드/알럿/소스를 만들 때만 쓰입니다 — 인제스트 경로에 없으니 아주 작게 돌려도 됩니다.&lt;/li&gt;
&lt;li&gt;MongoDB 최소 배포 형상: 메타데이터 전용이라 단일 멤버 실효 바닥 &lt;strong&gt;&lt;del&gt;0.4 vCPU / 0.75&lt;/del&gt;1.25Gi / gp3 10Gi&lt;/strong&gt;. prod는 &lt;code&gt;members:3&lt;/code&gt;(≈1.2 vCPU/3Gi, 값싼 보험)에 SCRAM + &lt;code&gt;mongodump&lt;/code&gt; CronJob이 실전 권고입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;이 페이지는 HyperDX ClickStack을 &lt;strong&gt;실제 K8s에 조립하는 배치 청사진&lt;/strong&gt;을 다룹니다. 4컴포넌트의 정체성·배포 6모드·HyperDX Only 개념은 &lt;a href="https://docs.makgol.com/rum/01-hyperdx-deep-dive/"&gt;HyperDX / ClickStack 심층 분석&lt;/a&gt;이, 로그 스토어로서의 요약 판단은 &lt;a href="https://docs.makgol.com/logging/05-hyperdx-clickstack/"&gt;로깅 챕터&lt;/a&gt;가 이미 다뤘으므로 재나열하지 않습니다. 여기서는 &lt;strong&gt;각 컴포넌트를 어느 파드로 어디에 올리고 데이터가 어디로 흐르며 MongoDB를 얼마나 작게 배포할 수 있는지&lt;/strong&gt;에 집중합니다.&lt;/p&gt;</description></item><item><title>왜 Ambient mode인가</title><link>https://docs.makgol.com/istio/ambient/01-why-ambient-mode/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/istio/ambient/01-why-ambient-mode/</guid><description>
&lt;h1&gt;01 · 왜 Istio Ambient mode인가 — 사이드카를 건너뛴 선택 (2026-03)&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;&lt;strong&gt;참조한 내용정리&lt;/strong&gt; · 이 문서는 아래 원문을 읽고 우리 지식베이스 형식으로 재구성한 요약입니다. 원문 자체가 아니며 정확한 워딩·전체 맥락·그림은 원문에서 확인합니다.&lt;/p&gt;</description></item><item><title>카디널리티</title><link>https://docs.makgol.com/monitoring/victoriametrics/practice/01-cardinality/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/victoriametrics/practice/01-cardinality/</guid><description>
&lt;h1&gt;01 · 카디널리티 — 시계열 폭발의 원리와 설계 원칙&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;시계열 = 지표 이름 + 레이블 집합. 레이블 값 하나만 달라도 완전히 다른 시계열이 됩니다.&lt;/li&gt;
&lt;li&gt;New TSID 발급(=처음 보는 시계열)이 곧 카디널리티 폭발입니다. IndexDB에 인덱스를 쓰는 연산이라 데이터포인트 추가보다 CPU·메모리를 훨씬 많이 먹습니다.&lt;/li&gt;
&lt;li&gt;Worst case는 &lt;code&gt;pod_name&lt;/code&gt;·&lt;code&gt;session_id&lt;/code&gt;처럼 자주 바뀌는 값을 레이블로 쓰는 것입니다. Best case는 설계 단계에서 배제하는 것 — 서비스 이름 같은 안정 레이블만 쓰고 자주 바뀌는 값은 로그·트레이스로 뺍니다.&lt;/li&gt;
&lt;li&gt;런타임에는 churn rate(신규 시계열 생성 속도)와 slow insert rate(지속 10% 초과 시 메모리 부족 경고)를 봅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;VM 운영에서 가장 자주 사고를 내는 개념이 카디널리티입니다. 출발점은 &amp;ldquo;한 시계열이 무엇으로 정의되는가&amp;quot;입니다. 거기서 카디널리티 폭발이 왜 곧 메모리·인덱스 폭발인지, 설계 단계에서 어떻게 막는지까지 이어 봅니다.&lt;/p&gt;</description></item><item><title>karpenter — 0.36.2 → 1.14.0, v1beta1→v1 CRD</title><link>https://docs.makgol.com/eks-upgrade/components/01-karpenter/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/eks-upgrade/components/01-karpenter/</guid><description>
&lt;h1&gt;karpenter — 0.36.2 → 1.14.0, v1beta1→v1 CRD&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;컨트롤러를 &lt;code&gt;0.36.2&lt;/code&gt;에서 최신 stable &lt;code&gt;1.14.0&lt;/code&gt;(2026-07-11 릴리스)로 올립니다. 목표 k8s 1.35를 지원하는 최소가 1.9이고 1.14는 1.30~1.36을 커버하니 &amp;ldquo;가능한 최신 stable&amp;rdquo; 방침에 맞습니다 — 1.36으로 재검토할 때도 하한이 1.13이라 1.14.0이 그대로 유효합니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;넘을 스키마 경계는 &lt;code&gt;v1beta1&lt;/code&gt; → &lt;code&gt;v1&lt;/code&gt; 하나뿐입니다. finance의 0.36.2는 이미 v1beta1(&lt;code&gt;karpenter.sh/v1beta1&lt;/code&gt; NodePool·&lt;code&gt;karpenter.k8s.aws/v1beta1&lt;/code&gt; EC2NodeClass)입니다. v1alpha5의 Provisioner·AWSNodeTemplate은 v0.33에서 졸업해 애초에 없습니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;v1에서 &lt;code&gt;amiSelectorTerms&lt;/code&gt;가 필수가 됩니다. 빠뜨리면 EC2NodeClass와 이를 참조하는 모든 NodePool이 통째로 &lt;code&gt;NotReady&lt;/code&gt;가 됩니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;v1은 drift를 GA로 승격시키면서 끄는 수단을 없앱니다. finance가 명시한 &lt;code&gt;featureGates.drift: false&lt;/code&gt;는 무효가 되고 drift가 강제로 켜집니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;blue-green 신규 클러스터라 conversion 웹훅을 왕복하지 않습니다. 기존 클러스터를 in-place로 올릴 때만 밟아야 하는 &lt;code&gt;0.36 → 0.36.9 → 1.0.x → 1.1+&lt;/code&gt; 순차 경로를 건너뛰고 v1 CRD와 v1 매니페스트로 1.14.0을 처음부터 세웁니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;1. 왜 1.14.0인가&lt;span class="hx:absolute hx:-mt-20" id="1-왜-1140인가"&gt;&lt;/span&gt;
&lt;a href="#1-%ec%99%9c-1140%ec%9d%b8%ea%b0%80" class="subheading-anchor" aria-label="이 섹션에 대한 고유 링크"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;목표 클러스터가 k8s 1.35라서 버전은 거의 정해집니다. karpenter 호환 매트릭스에서 1.35를 받는 최소 버전이 1.9이고 1.14는 1.30~1.36을 커버합니다. &amp;ldquo;가능한 최신 stable&amp;quot;이라는 방침과 하한 조건이 같은 답을 가리킵니다. 나중에 1.36으로 재검토하더라도 그때의 하한이 1.13이라 1.14.0은 그대로 쓸 수 있습니다.&lt;/p&gt;</description></item><item><title>Managed vs Self-hosted — TCO 크로스오버</title><link>https://docs.makgol.com/clickhouse/01-managed-vs-selfhosted/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/clickhouse/01-managed-vs-selfhosted/</guid><description>
&lt;h1&gt;Managed vs Self-hosted — TCO 크로스오버&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;판단을 좌우하는 축은 데이터 크기보다 &lt;strong&gt;운영 인력 보유 여부&lt;/strong&gt;입니다 — 팀 &amp;lt;5명이면 Cloud, 전담 인프라 인력을 낀 10명+면 self-host.&lt;/li&gt;
&lt;li&gt;크로스오버는 &lt;strong&gt;~20TB / 24-7&lt;/strong&gt; 구간. 인프라 비용은 거의 붙어서 결정은 월 $1,600~4,800의 &lt;strong&gt;people TCO&lt;/strong&gt;에서 납니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SharedMergeTree(진짜 storage-compute 분리)는 ClickHouse Cloud 전용&lt;/strong&gt; — self-host는 RMT 강제. 이 선택은 가격 비교가 아니라 &lt;strong&gt;아키텍처 선택&lt;/strong&gt;입니다.&lt;/li&gt;
&lt;li&gt;인력이 이미 있으면 self-host가 비용·성능(로컬 NVMe 수십만 IOPS)에서 모두 앞섭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ClickHouse를 어디에 둘지는 데이터 크기보다 &lt;strong&gt;운영 인력을 이미 보유했는지&lt;/strong&gt;에 달렸습니다. 데이터가 ~5TB에 머물고 사용이 간헐적이면 Cloud가 압승합니다. 60TB+ / 24-7이면 self-host가 명확히 쌉니다. 접전 구간(&lt;del&gt;20TB / 24-7)에서는 인프라 비용이 거의 붙어서 결정이 월 $1,600&lt;/del&gt;4,800의 &lt;strong&gt;people TCO&lt;/strong&gt; &lt;code&gt;≈&lt;/code&gt;로 넘어갑니다. 인력이 이미 있으면 self-host의 유일한 약점이 상쇄돼 성능·비용 모두에서 앞섭니다.&lt;/p&gt;</description></item><item><title>OpenSearch (EFK)</title><link>https://docs.makgol.com/logging/01-opensearch/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/logging/01-opensearch/</guid><description>
&lt;h1&gt;OpenSearch (EFK) — 지금 쓰는 것, 왜 뚱뚱해 보이는가&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;강점은 임의 필드 ad-hoc 풀텍스트·고카디널리티 검색, SIEM/보안 완제품, 관리형 운영의 낮은 인건비입니다.&lt;/li&gt;
&lt;li&gt;약점은 로그 저장 목적에 비해 컴퓨트가 무겁다는 점입니다 — 비용의 ~90%가 인스턴스 시간이고 스토리지는 ~10%뿐입니다.&lt;/li&gt;
&lt;li&gt;UltraWarm은 예약(RI) 불가(hot만 예약 가능)라 전 클러스터 블렌디드 절감 상한이 ~25%에 그칩니다 — &amp;ldquo;40% 절감&amp;rdquo; 기대는 성립하지 않습니다.&lt;/li&gt;
&lt;li&gt;진짜 절감은 보존 tail을 컬럼나+S3로 옮기고 hot을 축소·OR로 전환하는 데서 나옵니다. 이게 hot RI 최대 절감보다 큽니다.&lt;/li&gt;
&lt;li&gt;우리 케이스: 90일 보존이 정말 필요한지부터 되묻습니다. tail 이전 + in-place 최적화를 먼저 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Apache Lucene 기반 분산 검색·분석 엔진입니다. 2021년 Elastic이 SSPL로 전환한 뒤 Elasticsearch 7.10.2 / Kibana를 포크해 만들었습니다. 라이선스는 Apache 2.0이고 지금은 OpenSearch Software Foundation(Linux Foundation)이 관리합니다 — 성숙도·생태계가 넓고 프로덕션 채택이 두텁습니다. AWS에서는 관리형 Amazon OpenSearch Service로 제공됩니다. 고객사는 &lt;code&gt;fluent-bit → Firehose → OpenSearch(+ UltraWarm)&lt;/code&gt;로 운영 중입니다. 파이프라인 구성 자체는 정석입니다. 쟁점은 로그 저장 용도에 비춘 요금 구조입니다.&lt;/p&gt;</description></item><item><title>TSDB와 VictoriaMetrics</title><link>https://docs.makgol.com/monitoring/victoriametrics/concepts/01-tsdb-and-victoriametrics/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/victoriametrics/concepts/01-tsdb-and-victoriametrics/</guid><description>
&lt;h1&gt;01 · 시계열 데이터와 VictoriaMetrics&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;시계열은 &amp;ldquo;언제 어떤 숫자가 찍혔나&amp;quot;가 이어지는 데이터입니다. 지표에는 &lt;strong&gt;Counter/Gauge/Histogram/Summary&lt;/strong&gt; 4타입이 있습니다. 그중 Counter류 단조증가값이 압축이 가장 잘 됩니다.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;대용량&amp;quot;을 나누는 기준은 &lt;strong&gt;시계열 개수&lt;/strong&gt;와 &lt;strong&gt;보관 기간&lt;/strong&gt;입니다. 수백만 개까지는 Prometheus 단일로 충분하지만 수천만~수십억 개부터는 별도 솔루션이 필요합니다.&lt;/li&gt;
&lt;li&gt;TSDB 계보: &lt;strong&gt;Prometheus(2012) → Gorilla 압축(2015, Facebook) → Thanos/Cortex(Prometheus 확장)&lt;/strong&gt; vs &lt;strong&gt;VictoriaMetrics(완전히 다른 계열)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;VM은 &lt;strong&gt;Prometheus 호환&lt;/strong&gt;(PromQL·remote_write 그대로)을 지키면서 자체 벤치마크 기준 &lt;strong&gt;메모리 5배·스토리지 7배&lt;/strong&gt; 효율을 주장하는 오픈소스 TSDB입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;시계열 데이터가 무엇인지, 왜 &amp;ldquo;대용량&amp;quot;이 별도의 문제로 떨어져 나오는지, 그 문제를 푸는 도구로서 VictoriaMetrics(이하 VM)가 어디에 서 있는지를 정리합니다. VM 내부의 컴포넌트 구조는 &lt;a href="https://docs.makgol.com/monitoring/victoriametrics/concepts/02-architecture/"&gt;02 아키텍처&lt;/a&gt;로 넘깁니다.&lt;/p&gt;</description></item><item><title>문제와 결정 2축</title><link>https://docs.makgol.com/monitoring/longterm-retention/01-problem-and-axes/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/monitoring/longterm-retention/01-problem-and-axes/</guid><description>
&lt;h1&gt;문제 정의와 결정 2축&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;목적은 과거 장애 재조사용 메트릭 400일 보관. &lt;code&gt;&amp;gt;90d&lt;/code&gt; 구간은 5m 해상도 허용(확정), 전 메트릭 커버리지 필요, OSS 우선.&lt;/li&gt;
&lt;li&gt;결정은 2축: (1) 무엇을 보관하나(raw 400d 전부 vs raw 90d + 5m 집계 400d — 후자가 비용을 자릿수로 낮춥니다) · (2) 어디에 저장하나(VM은 S3를 primary로 지원하지 않아 EBS 위에 둡니다).&lt;/li&gt;
&lt;li&gt;서울 리전 단가는 sc1 &amp;lt; S3 Standard &amp;lt; st1 &amp;lt; gp3 — &amp;ldquo;S3라서 싸다&amp;quot;는 성립하지 않습니다.&lt;/li&gt;
&lt;li&gt;확정 시나리오(raw 90d + 5m 집계 400d) 기준 VM 아카이브안이 월 $385~416로 최저, 단순 확장($1,642)보다 자릿수로 쌉니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;메트릭 400일 보관 문제를 정의하고 비용을 자릿수 단위로 좌우하는 두 결정축(무엇을 보관 / 어디에 저장)을 정리합니다. 시나리오별 저장량·비용 규모와 검증된 서울 리전 단가 요약표를 함께 싣습니다.&lt;/p&gt;</description></item><item><title>레이어 2 — 2026-08 열린 4종과 karpenter 가중치</title><link>https://docs.makgol.com/eks-upgrade/controlplane/02-component-parameters/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/eks-upgrade/controlplane/02-component-parameters/</guid><description>
&lt;h1&gt;레이어 2 — 2026-08 열린 4종과 karpenter 가중치&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;실제 후보는 &lt;code&gt;MostAllocated&lt;/code&gt; 하나뿐이고 그것도 blue 안정화 이후 별건입니다. create 시점에는 4개 전부 기본값으로 둡니다(§8).&lt;/li&gt;
&lt;li&gt;4개가 열렸고 그중 3개는 추가 과금이 없습니다. scoringStrategy·eventTtl·serviceNodePortRange는 &lt;strong&gt;k8s 1.31+&lt;/strong&gt; 전 리전에서 무료로 쓸 수 있고 &lt;strong&gt;HPA syncPeriod만 Provisioned Control Plane&lt;/strong&gt;(월 증분 &lt;strong&gt;+$1,204.50&lt;/strong&gt;)이 전제입니다.&lt;/li&gt;
&lt;li&gt;완전 개방이 아니라 검증된 범위 안의 개방입니다. 범위 폭(HPA 5초 · eventTtl 축소 방향만 · 스케줄러 전략 2종만)이 그대로 AWS의 책임 경계 선언입니다 — 업스트림 kube-controller-manager에는 sync period validation이 &lt;strong&gt;아예 없습니다&lt;/strong&gt;(§2).&lt;/li&gt;
&lt;li&gt;karpenter는 이 설정을 읽지 않습니다. karpenter-core v1.14.0 전체에서 scoringStrategy 관련 심볼이 grep 0건입니다. 점수 공식이 각 항을 &lt;strong&gt;그 노드 자신의 allocatable로 나누므로&lt;/strong&gt; &amp;ldquo;노드의 cpu/memory 비율에 맞춰 가중치를 조정한다&amp;quot;는 작업은 애초에 필요하지 않습니다(§4).&lt;/li&gt;
&lt;li&gt;AWS 문서와 실제가 어긋납니다. User Guide는 Terraform을 &amp;ldquo;coming soon&amp;quot;이라 쓰지만 provider &lt;strong&gt;v6.59.0&lt;/strong&gt;(발표 당일)에 이미 들어왔고 eksctl·CDK는 반대로 과대 서술입니다(§6).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2026-08-12, EKS가 관리형 컨트롤 플레인 3개 컴포넌트의 파라미터 4종을 고객 설정 대상으로 열었습니다. 지금까지 kube-scheduler·kube-apiserver·kube-controller-manager 설정은 손댈 수 없는 영역이었습니다. 노드를 채워 써서 컴퓨트 비용을 줄이고 싶어도 관리형 스케줄러의 전략을 바꿀 방법이 없었습니다. &lt;a href="https://docs.makgol.com/eks-upgrade/01-target-version/"&gt;목표버전&lt;/a&gt;에서 확정한 blue의 목표는 &lt;strong&gt;1.35&lt;/strong&gt;이고 이 4종의 하한은 &lt;strong&gt;1.31&lt;/strong&gt;입니다. blue는 4개를 전부 쓸 수 있는 상태로 태어납니다. 이 페이지는 **&amp;ldquo;써야 하나&amp;rdquo;**를 판정합니다. &amp;ldquo;쓸 수 있나&amp;quot;는 이미 답이 나와 있습니다. 클러스터 레벨 파라미터와 가변성 3분류는 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/01-cluster-parameters/"&gt;레이어 1&lt;/a&gt;, HPA syncPeriod가 요구하는 용량 축은 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/03-provisioned-control-plane/"&gt;Provisioned Control Plane&lt;/a&gt;, 이번에도 여전히 닫혀 있는 플래그들은 &lt;a href="https://docs.makgol.com/eks-upgrade/controlplane/04-not-tunable/"&gt;레이어 3&lt;/a&gt;이 다룹니다.&lt;/p&gt;</description></item><item><title>운영 런북 — 장애·변경이 났을 때 무엇을 어떤 순서로</title><link>https://docs.makgol.com/hyperdx-operating/02-runbook/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/hyperdx-operating/02-runbook/</guid><description>
&lt;h1&gt;운영 런북 — 장애·변경이 났을 때 무엇을 어떤 순서로&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;이 페이지는 메커니즘을 설명하지 않고 &lt;strong&gt;순서와 판별 신호만&lt;/strong&gt; 담습니다.&lt;/p&gt;</description></item><item><title>부록 · 발표 전사 — Braze Redis→Valkey</title><link>https://docs.makgol.com/valkey/braze-k8s-migration/02-%EB%B0%9C%ED%91%9C-%EC%A0%84%EC%82%AC/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/valkey/braze-k8s-migration/02-%EB%B0%9C%ED%91%9C-%EC%A0%84%EC%82%AC/</guid><description>
&lt;h1&gt;02 · 발표 전사 — Redis on EC2 to Valkey on Kubernetes: A Zero-Downtime Case Study&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;이 문서는 KubeCon + CloudNativeCon Europe 2026 발표 &lt;em&gt;Redis on EC2 to Valkey on Kubernetes: A Zero-Downtime Case Study&lt;/em&gt;(Joe Heyburn, Braze)의 &lt;strong&gt;전사 정리본&lt;/strong&gt;입니다. YouTube 자동 자막(타임스탬프 714줄)을 원본으로 삼되 발표자 본인의 슬라이드 덱과 대조해 오인식을 교정했습니다 — Joe Hayburn/Joe Haben→&lt;strong&gt;Joe Heyburn&lt;/strong&gt;(핸들 &lt;code&gt;@jdheyburn&lt;/code&gt;), &amp;ldquo;psychic shard&amp;rdquo;→&lt;strong&gt;Sidekiq&lt;/strong&gt; shard, &amp;ldquo;a free phase approach&amp;rdquo;→&lt;strong&gt;three-phase&lt;/strong&gt; approach, &amp;ldquo;no network load balancer&amp;rdquo;→&lt;strong&gt;an NLB&lt;/strong&gt;, &amp;ldquo;at Redis, we use AZ affinity&amp;rdquo;→&lt;strong&gt;at Braze&lt;/strong&gt;, &amp;ldquo;31,000&amp;rdquo;→nodePort &lt;strong&gt;31000&lt;/strong&gt;, &amp;ldquo;custom resharding&amp;rdquo;→&lt;strong&gt;Cluster resharding&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>부록 · 발표 전사 — Scaling Valkey</title><link>https://docs.makgol.com/valkey/cluster-xl-scale/02-%EB%B0%9C%ED%91%9C-%EC%A0%84%EC%82%AC/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/valkey/cluster-xl-scale/02-%EB%B0%9C%ED%91%9C-%EC%A0%84%EC%82%AC/</guid><description>
&lt;h1&gt;02 · 발표 전사 — Scaling Valkey the Right Way: Kubernetes at XL Scale&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;이 문서는 KubeCon + CloudNativeCon Europe 2026 발표 &lt;em&gt;Scaling Valkey the Right Way: Kubernetes at XL Scale&lt;/em&gt;(Sarthak Aggarwal · Madelyn Olson, AWS ElastiCache)의 &lt;strong&gt;전사 정리본&lt;/strong&gt;입니다. YouTube 자동 자막(타임스탬프 942줄)을 원본으로 삼되 발표자 본인의 슬라이드 덱과 대조해 오인식을 교정했습니다. Valkyrie→Valkey, Madeline/Merlin/Marlin→Madelyn, &amp;ldquo;as a stateless set&amp;rdquo;→StatefulSet, &amp;ldquo;something like that, CD&amp;rdquo;→etcd, &amp;ldquo;16,000 슬롯&amp;rdquo;→16384, &amp;ldquo;REST protocol&amp;rdquo;→RESP, &amp;ldquo;Bin Bin&amp;rdquo;→Binbin.&lt;/p&gt;</description></item><item><title>수립 방향이라는 분기점</title><link>https://docs.makgol.com/gateway/02-connect-direction/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/gateway/02-connect-direction/</guid><description>
&lt;h1&gt;02 · 수립 방향이라는 분기점&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;연결을 누가 거느냐&amp;quot;와 &amp;ldquo;데이터가 어디로 흐르느냐&amp;quot;는 별개입니다.&lt;/strong&gt; 중앙 → 단말 일방 푸시라는 요구는 두 분기가 모두 만족합니다. SSE·WebSocket·long-polling이 존재하는 이유 자체가 &lt;strong&gt;클라이언트가 건 연결 위에서 서버가 일방적으로 미는 것&lt;/strong&gt;이기 때문입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;현행 구성이 이미 답을 알고 있습니다.&lt;/strong&gt; API Gateway WebSocket API에는 &lt;strong&gt;클라이언트 개시 외의 모드가 없습니다.&lt;/strong&gt; 지금 돌아간다면 POS가 outbound로 걸고 있다는 뜻입니다 — 서비스 제약이 그것 말고는 허용하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;판정은 액세스 로그 한 줄이면 끝납니다.&lt;/strong&gt; &lt;code&gt;$context.identity.sourceIp&lt;/code&gt;가 매장 회선의 NAT 공인 IP로 찍히면 분기 A가 확정됩니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분기는 링의 유무 말고도 여럿을 바꿉니다.&lt;/strong&gt; 전송 프로토콜(SSE가 맞는가), k8s 워크로드 종류(Deployment냐 StatefulSet이냐), 장애 감지 주체가 전부 뒤집힙니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분기 B가 네트워크상 가능해도 보통은 A를 택합니다.&lt;/strong&gt; 5만 대의 주소 인벤토리, 단말별 TLS 서버 인증서와 그 갱신, 매장 방화벽 인바운드 규칙이 전부 새 운영 비용으로 붙기 때문입니다. &lt;strong&gt;B는 &amp;ldquo;가능한가&amp;quot;가 아니라 &amp;ldquo;그 값을 치를 만한가&amp;quot;로 판정해야 합니다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;혼재는 A로 수렴시킵니다.&lt;/strong&gt; 일부 매장이 전용망이라 해서 두 경로를 함께 유지하면 장애 모드가 두 배가 됩니다. 전용망 매장도 outbound로 걸게 하면 A 하나로 끝납니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;왜 이 문서인가.&lt;/strong&gt; 이 질문 하나가 &lt;a href="https://docs.makgol.com/gateway/04-branch-a-client-dials/"&gt;04&lt;/a&gt;와 &lt;a href="https://docs.makgol.com/gateway/05-branch-b-pod-dials/"&gt;05&lt;/a&gt; 중 어느 쪽을 읽어야 하는지를 정합니다. 그런데 실무에서는 이 질문이 &lt;strong&gt;&amp;ldquo;중앙에서 단말로 밀어야 하니 중앙이 연결을 걸어야 하는 것 아닌가&amp;rdquo;&lt;/strong&gt; 라는 형태로 자주 뒤섞입니다. 여기서는 두 방향을 분리하고 판정을 코드 한 줄 짜지 않고 끝내는 절차를 남깁니다.&lt;/p&gt;</description></item><item><title>memcached — 같은 문제를 다르게 푼 6년 선배</title><link>https://docs.makgol.com/elasticache/02-memcached/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://docs.makgol.com/elasticache/02-memcached/</guid><description>
&lt;h1&gt;02 · memcached — 같은 문제를 다르게 푼 6년 선배&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;memcached 는 Redis 의 열등한 과거가 아닙니다. &amp;ldquo;캐시는 캐시여야 한다&amp;quot;를 끝까지 밀어서 Redis 가 갖지 못한 성질(한 프로세스로 코어를 먹는 확장, 느린 커맨드가 존재할 수 없는 지연 예측성, 값을 NVMe 로 내리는 용량 확장)을 얻고 자료구조·영속성·복제·다중 키 원자성을 포기했습니다 &lt;code&gt;Σ&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;첫 커밋(2003-05-27)에는 slab allocator 도 자체 해시 테이블도 없었습니다. &lt;code&gt;malloc()&lt;/code&gt; + Judy 트라이 + 전역 단일 LRU 였고 slab 은 3일 뒤·자체 해시는 3주 뒤에 &lt;strong&gt;둘 다 파편화 때문에&lt;/strong&gt; 들어왔습니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;slab allocator 의 대가가 calcification 이고 그것을 갚는 데 21년이 걸렸습니다. 문제 인지 2003-06-24, 첫 공식 해법 1.4.11(2012-01-16), 기본값 승격 1.5.0(2017-07-21), 그리고 &lt;strong&gt;1.6.34(2024-12-22)의 mover 전면 재작성이 &amp;ldquo;페이지를 옮기면 아이템을 잃는다&amp;quot;는 대가 자체를 제거&lt;/strong&gt;했습니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;LRU 는 HOT/WARM/COLD/TEMP 4단 segmented LRU 이고 1.5.0 부터 기본입니다. Redis 와 근사의 &lt;strong&gt;위치가 반대입니다&lt;/strong&gt; — memcached 는 접근 기록을 스레드별 bump buffer 에 비동기로 쌓고 넘치면 버리며, Redis 는 축출 시점에 표본을 뽑습니다(&lt;code&gt;maxmemory-samples 5&lt;/code&gt;) &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;워커 스레드 N개가 각자 이벤트 루프를 돌려 read·parse·execute·write 를 끝냅니다. &lt;code&gt;-t 16&lt;/code&gt; 한 프로세스가 16코어를 씁니다. Redis 8.10.0 &lt;code&gt;redis.conf&lt;/code&gt; 는 2026년에도 &amp;ldquo;Redis is mostly single threaded&amp;rdquo; 이고 io-threads 는 소켓 읽기·쓰기와 &lt;strong&gt;프로토콜 파싱까지&lt;/strong&gt;입니다 — 커맨드 실행은 메인 스레드입니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;그 대가가 원자성입니다. 보장 단위가 아이템 하나뿐이라 MULTI/EXEC·Lua·다중 키 트랜잭션에 대응할 방법이 원리적으로 없습니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;binary protocol 은 1.6.0(2020-03-08)에 공식 deprecated 됐고 후계는 meta 커맨드입니다. 2026년에 클라이언트를 고를 때 meta 지원 여부가 1순위인 이유는 stampede 방어(&lt;code&gt;W&lt;/code&gt;/&lt;code&gt;Z&lt;/code&gt;)와 serve-stale 이 &lt;strong&gt;서버에서 원자적으로&lt;/strong&gt; 되는 유일한 경로이기 때문입니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;프로젝트는 살아 있지만 기능 개발은 멈춰 있습니다. 2026년 릴리스 4개(1.6.42~1.6.45)가 전부 보안·안정화이고 최근 1년의 사용자 노출 신기능은 1.6.40 의 &lt;code&gt;mg&lt;/code&gt; 조건부 CAS 페치 하나입니다 &lt;code&gt;✓&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;memcached 와 Redis 를 같은 하드웨어에서 1:1 로 측정한 1차 벤치마크는 없습니다. 그래서 이 문서는 &amp;ldquo;몇 배 빠르다&amp;quot;를 쓰지 않고 구조와 단독 측정치만 씁니다 &lt;code&gt;?&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;왜 이 문서인가.&lt;/strong&gt; memcached 를 &amp;ldquo;Redis 가 나오기 전에 쓰던 것&amp;quot;으로 읽으면 두 번 틀립니다. 하나, memcached 는 2003년에 멈춘 소프트웨어가 아닙니다 — segmented LRU(1.4.23), SSD 확장(1.5.4), 재시작 생존 캐시(1.5.18), meta 프로토콜(1.6.0), 내장 proxy(1.6.13), slab mover 재작성(1.6.34)이 전부 그 뒤에 들어왔습니다. 둘, 둘의 차이는 기능 개수가 아니라 &lt;strong&gt;선택한 축&lt;/strong&gt;입니다. memcached 는 값을 해석하지 않기로 한 대가로 스레드를 열었고, Redis 는 자료구조를 서버에서 실행하기로 한 대가로 실행 스레드를 하나로 묶었습니다. 이 문서는 그 교환을 소스와 릴리스노트로 확인합니다.&lt;/p&gt;</description></item></channel></rss>