<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>younghoon — 백엔드 엔지니어</title>
    <link>https://kyhsa93.github.io/ko/</link>
    <atom:link href="https://kyhsa93.github.io/rss-ko.xml" rel="self" type="application/rss+xml" />
    <description>명확하게 복잡한 시스템을 설계하는 백엔드 엔지니어의 기록. TypeScript, Go, 그리고 Backend Service Playbook.</description>
    <language>ko</language>
    <lastBuildDate>Sat, 08 Aug 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>다섯 개의 하네스를 동시에 무너뜨린 List</title>
      <link>https://kyhsa93.github.io/ko/posts/the-list-that-broke-five-harnesses/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-list-that-broke-five-harnesses/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>다섯 개짜리 Kubernetes 안티패턴 검사 하네스 전부가 `---`로 구분된 문서를 가정했다. 한 번의 `kubectl get -o yaml` 호출에 리소스를 두 개 이상 대면 결과가 `kind: List`로 감싸지고 — 모든 검사기가 조용히 플래그할 리소스를 0개 찾았는데, 이건 깨끗한 통과처럼 보였다.</description>
      <category>Kubernetes</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>서로 다른 두 도구, 똑같이 빠뜨린 루트</title>
      <link>https://kyhsa93.github.io/ko/posts/two-tools-the-same-missing-root/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/two-tools-the-same-missing-root/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>Argo CD의 App-of-Apps 증명은 전적으로 부모에게 있고, Flux의 dependsOn 증명은 자식이 선언하지만 혼자서는 검증이 안 된다. 둘 중 어느 트리든 루트를 빼고 감사하면 똑같이 실패한다 — 알고 보면 같은 근본 이유로.</description>
      <category>Kubernetes</category>
      <category>GitOps</category>
    </item>
    <item>
      <title>영원히 100점을 받을 수 없는 벤치마크</title>
      <link>https://kyhsa93.github.io/ko/posts/a-benchmark-that-can-never-hit-100/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/a-benchmark-that-can-never-hit-100/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>채점 하네스가 Kubernetes 배포 실수 19개 카테고리를 다룬다. 그중 하나 — drift — 는 매니페스트가 이미 적용된 뒤에야 존재할 수 있고, 작성 벤치마크는 구조적으로 이걸 일으키거나 막을 수 없다. 정직한 해결책은 미래 버전이 아니라 영구적이고 문서화된 상한선이었다.</description>
      <category>Kubernetes</category>
      <category>Benchmark</category>
    </item>
    <item>
      <title>동점인 점수, 서로 다른 두 종류의 잘못</title>
      <link>https://kyhsa93.github.io/ko/posts/a-tied-score-two-different-kinds-of-wrong/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/a-tied-score-two-different-kinds-of-wrong/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>두 모델이 Kubernetes 매니페스트 작성 과제에서 동일한 9/9를 받았고, 독립적으로 재확인됐다. 실제로 각자 쓴 걸 읽어보니 한쪽엔 스스로를 무력화하는 NetworkPolicy가, 다른 쪽엔 존재하지 않는 리소스를 참조하는 프로모션 파이프라인이 있었다 — 동점인 하네스 점수엔 보이지 않는, 서로 무관한 결함 두 개.</description>
      <category>Kubernetes</category>
      <category>AI Agents</category>
    </item>
    <item>
      <title>아무도 선언하지 않은 기본값들</title>
      <link>https://kyhsa93.github.io/ko/posts/the-defaults-nobody-declared/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-defaults-nobody-declared/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>방금 깔끔하게 적용된 클러스터를 겨눈 drift 검사기가 온통 drift를 보고했다. 클러스터가 거짓말을 한 게 아니었다 — API 서버 자신의 admission 기본값 채우기가 Git이 언급조차 하지 않은 필드를 채워넣었고, 순진한 전체 객체 비교는 그 차이를 구분할 방법이 없었다.</description>
      <category>Kubernetes</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>Factory는 어디에 넣을지 알고 있었다</title>
      <link>https://kyhsa93.github.io/ko/posts/the-factory-knows-where-to-put-it/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-factory-knows-where-to-put-it/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>두 코드베이스가 Aggregate의 ID를 서로 다른 자리에서 생성한다 — 하나는 생성자에서, 하나는 Factory가 Infrastructure에 요청해서. Eric Evans의 원저에는 실제로 어느 패턴을 서술하는지에 대한 구체적이고 인용 가능한 답이 있고, 그건 두 코드베이스 각자의 관습이 가정하는 것과 다르다.</description>
      <category>DDD</category>
      <category>Comparative</category>
    </item>
    <item>
      <title>Evans가 쓴 적 없는 규칙</title>
      <link>https://kyhsa93.github.io/ko/posts/a-rule-evans-never-wrote/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/a-rule-evans-never-wrote/</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>거의 모든 DDD 코드베이스가 다른 Aggregate를 직접 객체 참조하는 걸 금지한다 — ID로만. Eric Evans의 2003년 원저는 명시적으로 그걸 허용한다. 실제로 ID 전용 규칙을 쓴 Vaughn Vernon 본인이, 그럼에도 더 엄격한 규칙을 주장하는 바로 그 논문에서 이 사실을 스스로 밝힌다.</description>
      <category>DDD</category>
      <category>Comparative</category>
    </item>
    <item>
      <title>같은 순간, 서로 다른 두 타임스탬프</title>
      <link>https://kyhsa93.github.io/ko/posts/the-same-instant-two-different-timestamps/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-same-instant-two-different-timestamps/</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <description>같은 순간이 같은 드라이버로 직렬화돼도 프로세스의 시간대에 따라 다른 문자열이 나온다. 4개 언어는 호출 지점에, 1개 언어는 프로세스 경계에 이 버그가 있었다 — 그리고 수정은 언어마다 진짜 다른 자리에 있어야 했다, 시간대를 9시간 떨어뜨려 실제로 테스트를 돌려서 검증했다.</description>
      <category>Backend</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>자기 자신을 기다리고 있던 자동화</title>
      <link>https://kyhsa93.github.io/ko/posts/the-automation-that-was-waiting-on-itself/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-automation-that-was-waiting-on-itself/</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <description>Dependabot auto-merge 워크플로가 그동안 머지한 PR은 전부 자기 자신의 6시간짜리 데드락을 상대로 한 경쟁에서 이겨서 그렇게 된 것이었다 — 스텝 하나가, 바로 그 스텝이 끝나야만 끝날 수 있는 체크 실행을 기다리고 있었다. 고쳤더니 바로 뒤에서 기다리던 두 번째 버그와, 평범한 GitHub 502가 남기고 간 반쪽짜리 머지들이 드러났다.</description>
      <category>Tooling</category>
      <category>Automation</category>
    </item>
    <item>
      <title>아무도 눈치채지 못한 빌드 안 되는 이미지</title>
      <link>https://kyhsa93.github.io/ko/posts/the-image-nothing-noticed-couldnt-build/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-image-nothing-noticed-couldnt-build/</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <description>낡은 문서 대신 git 히스토리를 확인하고, 검색 인덱스가 없다고 우기던 라이브러리의 우회책을 찾아냈던 Spring Boot 4 마이그레이션은, 하루 뒤 배포 이미지가 아예 빌드가 안 되는 상태로 끝났다 — 의미가 방금 바뀐 파일을 CI 안 그 무엇도 지켜보고 있지 않았기 때문이다.</description>
      <category>Architecture</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>발견 0건, 버그 80건</title>
      <link>https://kyhsa93.github.io/ko/posts/zero-findings-eighty-bugs/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/zero-findings-eighty-bugs/</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <description>경로 존재 여부만 확인하는 체커는 3개 언어 감사 라운드 전후로 계속 발견 0건을 보고했지만, 그 라운드는 실제 문제 약 80건을 고쳤다 — 낡은 코드 인용, 아무것도 스캔하지 않고 스스로에게 만점을 주는 평가기, 그리고 자기가 본뜬 코드에서 이미 고쳐진 버그를 여전히 그대로 뱉어내는 생성기.</description>
      <category>Tooling</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>End-to-End이 아니었던 End-to-End 테스트</title>
      <link>https://kyhsa93.github.io/ko/posts/an-end-to-end-test-that-wasnt/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/an-end-to-end-test-that-wasnt/</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <description>nestjs의 e2e 스위트는 실제 앱을 부팅하는 대신 자기만의 근사치를 조립하고 있었고, 모든 언어의 LLM 기능은 자기 자신의 폴백 경로로만 실행돼왔다. 둘 다 고치는 과정에서 더 이상한 버그가 드러났다: 같은 패치된 모듈을 두고 싸우는 nock과 testcontainers.</description>
      <category>Testing</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>완벽한 점수, 작동하지 않는 기능</title>
      <link>https://kyhsa93.github.io/ko/posts/a-perfect-score-a-broken-feature/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/a-perfect-score-a-broken-feature/</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <description>같은 문서, 같은 과제, 두 개의 모델을 별도 worktree에서 동시에 돌렸다. 둘 다 완벽한 harness 점수를 자체 보고했다. 실제 Postgres와 LocalStack을 대상으로 독립 재현했을 때, 동작한 쪽은 하나뿐이었다.</description>
      <category>AI Agents</category>
      <category>Benchmark</category>
    </item>
    <item>
      <title>버그가 돌아왔다, 다섯 개의 다른 가면을 쓰고</title>
      <link>https://kyhsa93.github.io/ko/posts/the-bug-came-back-wearing-five-different-masks/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-bug-came-back-wearing-five-different-masks/</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <description>이벤트에 두 번째 구독자를 지원하지 못하는 언어 둘을 벤치마크 과제가 찾아낸 지 일주일 뒤, 실제 기능 4개가 모든 언어에 그걸 요구하게 만들었다. 이번엔 5개 언어 전부가 깨졌다 — 시끄러운 부팅 시점 크래시부터 아무 로그도 남기지 않는 조용한 핸들러 드롭까지.</description>
      <category>Event-driven</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>모든 리포트에 서버가 필요한 건 아니다</title>
      <link>https://kyhsa93.github.io/ko/posts/not-every-report-needs-a-server/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/not-every-report-needs-a-server/</guid>
      <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
      <description>월별 명세서도, GDPR식 데이터 내보내기도 같은 질문 앞에서 무너졌다: 클라이언트가 직접 만들면 되지 않나? 그 질문을 통과한 지출 분석 ETL과, 거기서 드러난 규칙.</description>
      <category>ETL</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>사기꾼을 그대로 믿은 사기 탐지 신호</title>
      <link>https://kyhsa93.github.io/ko/posts/the-fraud-signal-that-trusted-the-fraudster/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-fraud-signal-that-trusted-the-fraudster/</guid>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <description>RefundReasonClassifier의 사기 위험 점수는 환불 요청자가 직접 통제하는 텍스트만으로 계산되었다. 그것과 함께 있던 자매 ML 스코어러를 제거하고, 이번 제거가 남긴 단 하나의 규칙까지.</description>
      <category>Security</category>
      <category>LLM</category>
    </item>
    <item>
      <title>무엇은 좁히고, 누구는 정하지 않는다</title>
      <link>https://kyhsa93.github.io/ko/posts/narrow-what-never-who/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/narrow-what-never-who/</guid>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <description>계좌 본인의 거래 내역을 다루는 구조화 데이터 RAG 기능과, LLM이 안전하게 관여하도록 만드는 가드레일, 그리고 그 불변식이 다섯 개 언어 각자의 관례 속에서도 살아남은 과정.</description>
      <category>LLM</category>
      <category>Comparative</category>
    </item>
    <item>
      <title>유닛 테스트가 볼 수 없는 버그들</title>
      <link>https://kyhsa93.github.io/ko/posts/bugs-only-e2e-tests-catch/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/bugs-only-e2e-tests-catch/</guid>
      <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
      <description>빠진 @Transactional, JDK HTTP 클라이언트의 재시도 결함, VARCHAR(36) 오버플로우, SQS FIFO 중복 제거 충돌 — 실제 인프라가 있어야만 존재할 수 있었던 버그 네 가지.</description>
      <category>Testing</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>Domain Service에 LLM 연결하기</title>
      <link>https://kyhsa93.github.io/ko/posts/llm-technical-service/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/llm-technical-service/</guid>
      <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
      <description>RefundReasonClassifier는 환불 사유를 읽고 신호를 돌려줄 뿐이다 — 실제 판단을 내리는 Domain Service는 그걸 호출조차 하지 않으며, Claude에서 자체 호스팅 Ollama로 LLM 백엔드를 바꿔도 테스트는 거의 건드릴 필요가 없었다.</description>
      <category>LLM</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>두 번째 사기 신호: 이력을 읽는 게 아니라 점수 매기기</title>
      <link>https://kyhsa93.github.io/ko/posts/refund-fraud-risk-scorer/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/refund-fraud-risk-scorer/</guid>
      <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
      <description>RefundFraudRiskScorer는 환불 이력으로 직접 학습시킨 로지스틱 회귀 모델로, native/HTTP 구현을 자유롭게 전환할 수 있으며 같은 Domain Service에 독립적인 두 번째 임계값을 제공한다.</description>
      <category>Machine Learning</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>Aggregate 설계: 트랜잭션 경계와 불변식</title>
      <link>https://kyhsa93.github.io/ko/posts/aggregate-design/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/aggregate-design/</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description>Aggregate 경계를 실제로 결정하는 것은 무엇이며, Domain 계층은 어떻게 스스로 ID를 생성하는가.</description>
      <category>DDD</category>
      <category>Tactical Design</category>
    </item>
    <item>
      <title>요청 스코프 컨텍스트: req.user가 안티패턴인 이유</title>
      <link>https://kyhsa93.github.io/ko/posts/request-scoped-user-context/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/request-scoped-user-context/</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description>AsyncLocalStorage 기반 UserContextStore와, 거기에 도달하기 위해 필요했던 Guard/Interceptor 분리.</description>
      <category>Cross-cutting Concerns</category>
      <category>Backend</category>
    </item>
    <item>
      <title>Observability는 설계 결정이지, 나중에 덧붙이는 게 아니다</title>
      <link>https://kyhsa93.github.io/ko/posts/observability-by-design/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/observability-by-design/</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description>로그 레벨 정책, 구조화된 로깅, 그리고 AsyncLocalStorage를 통한 Correlation ID 전파.</description>
      <category>Observability</category>
      <category>Operations</category>
    </item>
    <item>
      <title>Compliance as Code: 아키텍처를 강제하는 Harness 만들기</title>
      <link>https://kyhsa93.github.io/ko/posts/compliance-as-code/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/compliance-as-code/</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description>Harness 규칙이 가정해도 되는 것과 안 되는 것, 그리고 꼼꼼한 감사조차 놓치는 실패 유형.</description>
      <category>Tooling</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>아무도 찾고 있지 않던 버그 다섯 개</title>
      <link>https://kyhsa93.github.io/ko/posts/five-bugs-nobody-was-looking-for/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/five-bugs-nobody-was-looking-for/</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description>미완성 Swagger 문서를 5개 언어에 걸쳐 완성하고, 애노테이션이 컴파일된다고 믿는 대신 실제로 앱을 켜서 검증했다. 찾아낸 건 문서화와는 아무 관계가 없었다 — 프로덕션 마이그레이션이 조용히 한 번도 안 돌게 만든 Spring Boot 4의 의존성 분리 사건도 포함해서.</description>
      <category>API Design</category>
      <category>Testing</category>
    </item>
    <item>
      <title>실제 버그를 잡아낸 네이밍 규칙</title>
      <link>https://kyhsa93.github.io/ko/posts/repository-naming-convention/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/repository-naming-convention/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>지루하기 짝이 없는 find/save/delete 네이밍 컨벤션을 자동화하자, 네 개의 코드베이스에서 아무도 눈치채지 못한 위반 사례가 바로 드러난 이야기.</description>
      <category>Repository Pattern</category>
      <category>Conventions</category>
    </item>
    <item>
      <title>스케줄링과 Task Outbox 패턴</title>
      <link>https://kyhsa93.github.io/ko/posts/scheduling-and-task-outbox/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/scheduling-and-task-outbox/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Scheduler는 왜 enqueue만 해야 하는가, 그리고 다중 인스턴스 Cron job이 드러낸 실제 버그들.</description>
      <category>Scheduling</category>
      <category>Backend</category>
    </item>
    <item>
      <title>AI 에이전트가 당신의 아키텍처를 따를 수 있을까?</title>
      <link>https://kyhsa93.github.io/ko/posts/can-an-ai-agent-follow-your-architecture/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/can-an-ai-agent-follow-your-architecture/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>아키텍처 준수 검증용 Harness를 AI 벤치마크로 재활용하기, 5단계 난이도와 5개 언어에 걸쳐.</description>
      <category>AI Agents</category>
      <category>Benchmark</category>
    </item>
    <item>
      <title>같은 아키텍처, 다섯 개의 언어</title>
      <link>https://kyhsa93.github.io/ko/posts/same-architecture-five-languages/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/same-architecture-five-languages/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>TypeScript, Go, Python, Java, Kotlin에서 각각 독립적으로 구현한 동일한 Repository/Query 분리 비교.</description>
      <category>Comparative</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>툴 출력 자체가 에이전트를 조종하려 할 때</title>
      <link>https://kyhsa93.github.io/ko/posts/prompt-injection-in-tool-output/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/prompt-injection-in-tool-output/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>셸 명령 출력 안에 실제 시스템 메시지처럼 위장한 내용이 변경사항을 숨기라고 지시한 적이 여러 번 있었다. 지켜야 할 규칙은 하나다: 따르지 말고, 그 사실을 알린다.</description>
      <category>AI Agents</category>
      <category>Security</category>
    </item>
    <item>
      <title>두 계좌, 하나의 트랜잭션, 다섯 개의 서로 다른 답</title>
      <link>https://kyhsa93.github.io/ko/posts/two-accounts-one-transaction-five-different-answers/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/two-accounts-one-transaction-five-different-answers/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>송금 기능에 필요한 건 딱 하나, 모든 구현체가 이미 지원한다고 주장했던 것 — 두 Aggregate의 원자적 쓰기. 실제로 만들어보니 한 언어는 메커니즘이 진짜 동작했고, 한 언어는 당연해 보이는 수정 한 걸음 안쪽에 회귀가 도사리고 있었고, 한 언어는 문서가 자기 코드에 대해 조용히 틀려 있었다.</description>
      <category>Backend</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>구독자가 둘이어야만 존재하던 버그</title>
      <link>https://kyhsa93.github.io/ko/posts/the-bug-that-needed-two-subscribers-to-exist/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-bug-that-needed-two-subscribers-to-exist/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>쉬운 합성 과제에서 5개 언어가 전부 100점을 받는다고 해서 어디서 실패할지가 드러나는 건 아니다. 아직 건드려본 적 없는 코드 경로를 정확히 겨냥해 만든 4단계 난이도 사다리가 그 천장을 찾아냈고, 마지막 단에서 같은 이벤트에 둘이 구독해본 적이 한 번도 없어서 보이지 않던 팬아웃 버그가 드러났다.</description>
      <category>AI Agents</category>
      <category>Benchmark</category>
    </item>
    <item>
      <title>문서는 &quot;끝났다&quot;고 했다. 절반만 끝나 있었다.</title>
      <link>https://kyhsa93.github.io/ko/posts/the-doc-said-done-half-of-it-wasnt/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-doc-said-done-half-of-it-wasnt/</guid>
      <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
      <description>쓰기 쪽 인터페이스에만 반영된 Repository 네이밍 수정, 그 갭을 영구적인 하네스 규칙으로 바꾼 네 라운드, 그리고 라운드당 3~4건이던 진짜 버그가 2건, 결국 0건으로 떨어진 수확 곡선 — 그 하락 자체가 가장 쓸모 있는 결과였다.</description>
      <category>Conventions</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>도메인 경계를 찾는 방법</title>
      <link>https://kyhsa93.github.io/ko/posts/finding-domain-boundaries/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/finding-domain-boundaries/</guid>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <description>복잡한 요구사항을 Aggregate와 Bounded Context로 정리하는 사고 과정 기록.</description>
      <category>DDD</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>이벤트 기반 시스템에서의 신뢰성</title>
      <link>https://kyhsa93.github.io/ko/posts/reliable-event-driven-systems/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/reliable-event-driven-systems/</guid>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <description>메시지 전달 실패와 중복 처리를 다루기 위한 실용적인 패턴들.</description>
      <category>Event-driven</category>
      <category>Backend</category>
    </item>
    <item>
      <title>컨테이너 환경에서의 개발자 경험</title>
      <link>https://kyhsa93.github.io/ko/posts/containerized-development-experience/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/containerized-development-experience/</guid>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <description>로컬 개발부터 배포까지, 팀이 재현 가능한 환경을 구축하는 방법.</description>
      <category>Docker</category>
      <category>Developer experience</category>
    </item>
    <item>
      <title>Domain Service: 규칙이 하나의 Aggregate에 속하지 않을 때</title>
      <link>https://kyhsa93.github.io/ko/posts/domain-services-across-aggregates/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/domain-services-across-aggregates/</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <description>두 개의 Aggregate를 동시에 읽어야 하는 로직을 위한 실제 RefundEligibilityService 사례.</description>
      <category>DDD</category>
      <category>Tactical Design</category>
    </item>
    <item>
      <title>경로 존재 여부만 확인하는 스크립트가 첫날 실제 버그를 잡았다</title>
      <link>https://kyhsa93.github.io/ko/posts/a-path-existence-checker-found-a-real-bug-on-day-one/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/a-path-existence-checker-found-a-real-bug-on-day-one/</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <description>파싱도, 코드 스니펫이 뭘 하는지에 대한 이해도 없다 — 백틱 경로를 실제 파일 트리와 비교할 뿐이다. 오탐을 막아준 예외 규칙들이 두 가지 탐지 패턴 자체보다 중요했고, 그럼에도 첫 실행에서 문서 4곳의 진짜 버그를 잡았다.</description>
      <category>Tooling</category>
      <category>Documentation</category>
    </item>
    <item>
      <title>명령어 하나로 문서에서 실행 가능한 코드까지</title>
      <link>https://kyhsa93.github.io/ko/posts/from-docs-to-runnable-code/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/from-docs-to-runnable-code/</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <description>문서로 작성된 레퍼런스 템플릿을 스캐폴딩 생성기로 바꾸고, 실제로 실행해보며 발견한 버그들.</description>
      <category>Tooling</category>
      <category>Developer Experience</category>
    </item>
    <item>
      <title>하네스는 두 번째 도메인을 만나본 적이 없었다</title>
      <link>https://kyhsa93.github.io/ko/posts/the-harness-had-never-met-a-second-domain/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/the-harness-had-never-met-a-second-domain/</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <description>하네스 규칙 두 개가 몇 달째 깨끗했던 이유는 지금까지 입력된 도메인이 전부 Account와 Card뿐이었기 때문이다. 완전히 무관한 세 번째 도메인을 만들어보니 오탐 두 건이 드러났고, 진짜 실수를 잡을 규칙은 여전히 그걸 잡는다는 것도 확인됐다.</description>
      <category>Tooling</category>
      <category>Testing</category>
    </item>
    <item>
      <title>비밀번호 없이 로그인하기</title>
      <link>https://kyhsa93.github.io/ko/posts/auth-bypass-vulnerability/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/auth-bypass-vulnerability/</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <description>보안 감사에서 /auth/sign-in이 userId만 받고 아무것도 검증하지 않는다는 사실이 드러났다 — 다섯 언어에서 같은 버그가 어떻게 다르게 나타났는지, 그리고 새로 만든 401 테스트가 드러낸 JDK 재시도 버그까지.</description>
      <category>Security</category>
      <category>Backend</category>
    </item>
    <item>
      <title>실전 CQRS: Query가 Repository를 쓸 수 없는 이유</title>
      <link>https://kyhsa93.github.io/ko/posts/cqrs-in-practice/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/cqrs-in-practice/</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <description>Query Handler가 쓰기 가능한 Repository를 사용했던 실제 다언어 버그 — 문서조차 문제없다고 했다.</description>
      <category>CQRS</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>문서와 코드가 사이좋게 함께 틀렸을 때</title>
      <link>https://kyhsa93.github.io/ko/posts/when-the-docs-and-the-code-agree-to-be-wrong/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/when-the-docs-and-the-code-agree-to-be-wrong/</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <description>다섯 언어에 걸친 위반 세 가지 — 쓰기용 Repository를 읽는 Query, JPA를 그대로 단 도메인 클래스, 잘못된 레이어의 notification 모듈. 진짜 버그는 하나뿐이었고, 나머지 둘은 그 많은 이전 감사가 왜 이걸 하나도 못 잡았는지를 드러낸다.</description>
      <category>DDD</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>Bounded Context 간의 소통</title>
      <link>https://kyhsa93.github.io/ko/posts/talking-across-bounded-contexts/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/talking-across-bounded-contexts/</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <description>동기 Adapter와 비동기 Integration Event 중 무엇을 선택할 것인가, 실제 보상 트랜잭션(compensating transaction) 사례와 함께.</description>
      <category>DDD</category>
      <category>Integration</category>
    </item>
    <item>
      <title>Graceful Shutdown: 아무도 테스트하지 않는 신뢰성 기능</title>
      <link>https://kyhsa93.github.io/ko/posts/graceful-shutdown/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/graceful-shutdown/</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <description>SIGTERM 발생 시 readiness, 처리 중인 요청, 리소스 정리 사이의 순서를 올바르게 맞추는 방법.</description>
      <category>Reliability</category>
      <category>Operations</category>
    </item>
    <item>
      <title>타입이 있는 에러와 일관된 응답 스키마</title>
      <link>https://kyhsa93.github.io/ko/posts/typed-errors-and-response-schemas/</link>
      <guid isPermaLink="true">https://kyhsa93.github.io/ko/posts/typed-errors-and-response-schemas/</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <description>에러 메시지 enum의 key가 value와 같아야 하는 이유, 그리고 4개 필드로 구성된 에러 응답 형태.</description>
      <category>API Design</category>
      <category>Conventions</category>
    </item>
  </channel>
</rss>
