<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Brandon Wie</title>
    <description>소프트웨어 엔지니어링 인사이트, 튜토리얼, 배움</description>
    <link>https://brandonwie.dev/ko</link>
    <atom:link href="https://brandonwie.dev/ko/rss.xml" rel="self" type="application/rss+xml"/>
    <language>ko</language>
    <lastBuildDate>Thu, 09 Apr 2026 02:02:52 GMT</lastBuildDate>
    
    <item>
      <title><![CDATA[Claude Code Agent Teams]]></title>
      <description><![CDATA[여러 Claude Code 인스턴스를 팀으로 조율하는 실험적 기능의 설정, 패턴, 주의사항을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/claude-code-agent-teams</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/claude-code-agent-teams</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>claude-code</category>
      <category>agent-teams</category>
      <category>experimental</category>
    </item>
    <item>
      <title><![CDATA[Claude Code: 공유 + 개인 AI 설정 패턴]]></title>
      <description><![CDATA[AI 지시사항을 커밋되는 공유 레이어와 gitignore되는 개인 레이어로 분리해서 새 개발자는 즉시 AI 지시사항을 사용하고 기존 개발자는 개인 확장을 유지하는 패턴입니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/claude-code-shared-personal-config</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/claude-code-shared-personal-config</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>ai-config</category>
      <category>onboarding</category>
    </item>
    <item>
      <title><![CDATA[Stow Symlink 상태 점검]]></title>
      <description><![CDATA[GNU Stow가 만든 symlink이 앱 업데이트로 깨지는 문제를 감지하고 복구하는 방법을 알아봐요.]]></description>
      <link>https://brandonwie.dev/ko/posts/stow-symlink-health-checking</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/stow-symlink-health-checking</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>dotfiles</category>
      <category>stow</category>
      <category>symlinks</category>
    </item>
    <item>
      <title><![CDATA[Phase A→B 분류기 배포: 제로샷에서 파인튜닝까지]]></title>
      <description><![CDATA[라벨링된 데이터 없이 첫날부터 동작하는 인텐트 분류기를 배포하고, 예시가 모이면 도메인 특화 모델로 졸업하는 방법을 알아보세요.]]></description>
      <link>https://brandonwie.dev/ko/posts/distilbert-vs-bart-intent-classification</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/distilbert-vs-bart-intent-classification</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>nlp</category>
      <category>intent-classification</category>
      <category>distilbert</category>
      <category>bart</category>
      <category>model-selection</category>
    </item>
    <item>
      <title><![CDATA[Karpathy가 설명하기 전에 이미 만들어 놓았다]]></title>
      <description><![CDATA[Andrej Karpathy가 LLM 기반 지식 관리 시스템 패턴을 발표했는데, 이미 몇 달째 운영하고 있던 시스템과 놀라울 정도로 같았어요. 비교에서 알게 된 것들을 공유해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/karpathy-llm-knowledge-bases</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/karpathy-llm-knowledge-bases</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>knowledge-management</category>
      <category>claude-code</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[LLM 파인튜닝 전략]]></title>
      <description><![CDATA[LLM 기반 애플리케이션을 구축할 때 프롬프트 엔지니어링, RAG, LoRA 파인튜닝 중 어떤 접근법을 선택할지에 대한 실용적인 의사결정 프레임워크예요.]]></description>
      <link>https://brandonwie.dev/ko/posts/llm-fine-tuning-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/llm-fine-tuning-strategies</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>fine-tuning</category>
      <category>llm</category>
    </item>
    <item>
      <title><![CDATA[모델 드리프트 감지를 위한 PSI(Population Stability Index)]]></title>
      <description><![CDATA[배포된 분류기의 입력 분포가 학습 데이터에서 벗어나는 것을 정확도가 떨어지기 전에 감지하는 경량 통계 메트릭을 알아보세요.]]></description>
      <link>https://brandonwie.dev/ko/posts/psi-model-drift-detection</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/psi-model-drift-detection</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>mlops</category>
      <category>drift-detection</category>
      <category>monitoring</category>
      <category>statistics</category>
    </item>
    <item>
      <title><![CDATA[Anthropic MCP 컨텍스트 예산 최적화]]></title>
      <description><![CDATA[Anthropic 호스팅 MCP 통합이 세션 시작 시 컨텍스트 윈도우에서 ~71K 토큰을 소비해요 — 호출하지 않아도요. 이 예산을 되찾는 방법을 알아보세요.]]></description>
      <link>https://brandonwie.dev/ko/posts/anthropic-mcp-context-budget-optimization</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/anthropic-mcp-context-budget-optimization</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>ai-ml</category>
    </item>
    <item>
      <title><![CDATA[Docker 서브넷 충돌과 Static IP 서비스]]></title>
      <description><![CDATA[여러 Docker Compose 프로젝트가 커스텀 브리지 네트워크를 정의하면 서브넷이 조용히 충돌할 수 있어요. 진단하고 해결하는 방법을 알아보세요.]]></description>
      <link>https://brandonwie.dev/ko/posts/docker-subnet-collision-static-ip-services</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/docker-subnet-collision-static-ip-services</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[하이브리드 CI: 셀프 호스팅 Jenkins + GitHub Actions]]></title>
      <description><![CDATA[하나의 CI 시스템만 쓸 이유가 없어요. 폴리글랏 포트폴리오 프로젝트를 위해 각 도구의 강점을 살리는 분할 아키텍처를 소개해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/hybrid-ci-jenkins-github-actions</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/hybrid-ci-jenkins-github-actions</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>ci-cd</category>
      <category>jenkins</category>
      <category>github-actions</category>
      <category>architecture-decision</category>
    </item>
    <item>
      <title><![CDATA[PortAudio의 오래된 USB 오디오 디바이스 핸들 문제]]></title>
      <description><![CDATA[PortAudio를 사용하는 장기 실행 오디오 데몬이 USB 디바이스 핸들이 오래되면 조용히 제로 버퍼를 생성해요. 진단하고 해결하는 방법을 알아보세요.]]></description>
      <link>https://brandonwie.dev/ko/posts/portaudio-stale-usb-audio-handle</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/portaudio-stale-usb-audio-handle</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>devops</category>
    </item>
    <item>
      <title><![CDATA[Google Meet 링크 생성]]></title>
      <description><![CDATA[프로그래밍 방식으로 Google Meet 링크를 생성하면서 배운 교훈이에요.]]></description>
      <link>https://brandonwie.dev/ko/posts/google-meet-link-creation</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/google-meet-link-creation</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[다음 지능 폭발은 사회적이지, 계산적이지 않다]]></title>
      <description><![CDATA[Google 논문이 주장합니다 — 역사 속 모든 주요 지능 폭발은 개인의 인지 능력이 아닌 사회적 조직에서 비롯되었으며, AI도 같은 패턴을 따를 것이라고.]]></description>
      <link>https://brandonwie.dev/ko/posts/next-intelligence-explosion-social</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/next-intelligence-explosion-social</guid>
      <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>ai-agents</category>
      <category>research</category>
      <category>society</category>
    </item>
    <item>
      <title><![CDATA[WAF Allowlist 패턴]]></title>
      <description><![CDATA[라우트 allowlist를 사용한 block-by-default WAF 접근 방식. 알 수 없는 라우트가 자동 차단되어 blocklist보다 보안이 강해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/waf-allowlist-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/waf-allowlist-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>waf</category>
      <category>security</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Redis와 BullMQ 큐 패턴]]></title>
      <description><![CDATA[Node.js/NestJS에서 Redis 기반 BullMQ 작업 큐를 사용한 백그라운드 작업 처리 가이드]]></description>
      <link>https://brandonwie.dev/ko/posts/redis-queue-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/redis-queue-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>redis</category>
      <category>bullmq</category>
      <category>queue</category>
      <category>node.js</category>
    </item>
    <item>
      <title><![CDATA[AI PR 리뷰 검증 패턴]]></title>
      <description><![CDATA[AI 코드 리뷰어(Claude, Copilot, Codex)가 오탐을 만드는 흔한 패턴과 재발 방지 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/ai-pr-review-validation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ai-pr-review-validation-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>ai</category>
      <category>code-review</category>
    </item>
    <item>
      <title><![CDATA[Gemini 비대칭 Embedding 활용하기]]></title>
      <description><![CDATA[Gemini text-embedding-004는 task_type을 통해 query와 document를 다르게 인코딩하는 asymmetric embedding을 지원하며, symmetric 모델보다 훨씬 나은 검색 결과를 만들어줘요.]]></description>
      <link>https://brandonwie.dev/ko/posts/gemini-asymmetric-embeddings</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/gemini-asymmetric-embeddings</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>embeddings</category>
      <category>google</category>
    </item>
    <item>
      <title><![CDATA[RAG Hybrid Search 아키텍처]]></title>
      <description><![CDATA[단일 검색 방식이 왜 실패하는지, 그리고 dense, sparse, fuzzy, managed search를 Reciprocal Rank Fusion으로 결합해서 시맨틱 이해와 키워드 정확도를 모두 잡는 검색 파이프라인을 만드는 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/rag-hybrid-search-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/rag-hybrid-search-architecture</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>rag</category>
      <category>search</category>
      <category>architecture</category>
    </item>
    <item>
      <title><![CDATA[PostgreSQL에서 pgvector HNSW 인덱스 활용하기]]></title>
      <description><![CDATA[semantic search를 위해 별도의 vector database가 필요하지 않아요 — pgvector의 HNSW 인덱스는 10만 건 이하의 vector에서 95% 이상의 recall을 PostgreSQL 안에서 바로 제공해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/pgvector-hnsw-postgresql</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/pgvector-hnsw-postgresql</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>database</category>
      <category>search</category>
      <category>postgresql</category>
    </item>
    <item>
      <title><![CDATA[EBS vs EFS: AWS 스토리지 비교]]></title>
      <description><![CDATA[EBS(블록 스토리지)와 EFS(네트워크 파일 시스템)를 언제 사용해야 하는지 정리.]]></description>
      <link>https://brandonwie.dev/ko/posts/ebs-vs-efs-storage</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ebs-vs-efs-storage</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>storage</category>
      <category>devops</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ECS Autoscaling 패턴]]></title>
      <description><![CDATA[Race condition 방지를 위한 마이그레이션 태스크 분리와 ECS 서비스 autoscaling 구현 가이드.]]></description>
      <link>https://brandonwie.dev/ko/posts/ecs-autoscaling-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ecs-autoscaling-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>autoscaling</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title><![CDATA[NAT Gateway 아키텍처]]></title>
      <description><![CDATA[NAT Gateway 배치와 VPC 네트워크 흐름 이해하기.]]></description>
      <link>https://brandonwie.dev/ko/posts/nat-gateway-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/nat-gateway-architecture</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>vpc</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[AWS Security Group 기초]]></title>
      <description><![CDATA[Security Group의 stateful 동작, 최소 권한 원칙, 실전 패턴 — 연결 안 되는 원인 1위를 파헤쳐요.]]></description>
      <link>https://brandonwie.dev/ko/posts/security-groups-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/security-groups-fundamentals</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>security</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[Terraform 기초]]></title>
      <description><![CDATA[AWS 인프라 관리를 위한 핵심 Terraform 개념 정리.]]></description>
      <link>https://brandonwie.dev/ko/posts/terraform-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/terraform-fundamentals</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>terraform</category>
      <category>infrastructure-as-code</category>
    </item>
    <item>
      <title><![CDATA[Terraform RDS 자격증명 관리]]></title>
      <description><![CDATA[하드코딩 대신 변수를 사용해서 RDS 자격증명을 안전하게 관리하는 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/terraform-rds-credentials</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/terraform-rds-credentials</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>terraform</category>
      <category>rds</category>
      <category>security</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[AWS WAF 구현]]></title>
      <description><![CDATA[Allowlist 방식의 Web Application Firewall 설정 가이드.]]></description>
      <link>https://brandonwie.dev/ko/posts/waf-implementation</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/waf-implementation</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>security</category>
      <category>waf</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Amplitude ETL 파티셔닝]]></title>
      <description><![CDATA[Amplitude 이벤트 데이터를 raw에서 refined 스토리지로 이동할 때 파티셔닝하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/amplitude-etl-partitioning</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/amplitude-etl-partitioning</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>amplitude</category>
      <category>spark</category>
      <category>partitioning</category>
    </item>
    <item>
      <title><![CDATA[Amplitude Export API 응답 형식]]></title>
      <description><![CDATA[Amplitude Export API는 오해하기 쉬운 중첩 압축 형식으로 데이터를 반환해요]]></description>
      <link>https://brandonwie.dev/ko/posts/amplitude-export-api-format</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/amplitude-export-api-format</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>amplitude</category>
      <category>api</category>
      <category>data-format</category>
    </item>
    <item>
      <title><![CDATA[조기 종료 시 Backfill 통계 매니페스트]]></title>
      <description><![CDATA[조기 종료 경로가 있는 작업에서는 항상 stats/status 매니페스트를 저장해서 다운스트림 콜백이 유의미한 정보를 표시할 수 있게 해야 해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/backfill-stats-manifest-early-exit</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/backfill-stats-manifest-early-exit</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>slack</category>
    </item>
    <item>
      <title><![CDATA[Calendar EXDATE 동작: Apple vs Google]]></title>
      <description><![CDATA[Apple Calendar과 Google Calendar이 반복 일정 삭제를 처리하는 방식의 차이]]></description>
      <link>https://brandonwie.dev/ko/posts/calendar-exdate-behavior</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/calendar-exdate-behavior</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>calendar</category>
      <category>icalendar</category>
      <category>rfc5545</category>
    </item>
    <item>
      <title><![CDATA[Celery API-Side Dispatch 패턴]]></title>
      <description><![CDATA[Worker의 task 모듈을 import하지 않고 API 서비스에서 별도의 worker 서비스로 task를 전달하는 send-only Celery 클라이언트 만들기]]></description>
      <link>https://brandonwie.dev/ko/posts/celery-api-side-dispatch</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/celery-api-side-dispatch</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>celery</category>
      <category>python</category>
      <category>async</category>
    </item>
    <item>
      <title><![CDATA[class-transformer undefined 자체 속성 버그]]></title>
      <description><![CDATA[ES2022+ TypeScript 타겟에서 plainToInstance()가 클래스 인스턴스를 생성할 때, 모든 optional 클래스 필드가 undefined 값을 가진 자체 속성이 되는 문제.]]></description>
      <link>https://brandonwie.dev/ko/posts/class-transformer-undefined-fields</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/class-transformer-undefined-fields</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typescript</category>
      <category>class-transformer</category>
      <category>gotcha</category>
    </item>
    <item>
      <title><![CDATA[CPU Cache Locality를 활용한 배치 필드 추출 최적화]]></title>
      <description><![CDATA[같은 배열에 대해 여러 번 `.map()`을 호출하면 CPU가 매번 객체를 메모리에서 다시 불러와야 합니다]]></description>
      <link>https://brandonwie.dev/ko/posts/cpu-cache-locality-batch-iteration</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/cpu-cache-locality-batch-iteration</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>optimization</category>
    </item>
    <item>
      <title><![CDATA[DataSource vs Repository 패턴]]></title>
      <description><![CDATA[NestJS/TypeORM 애플리케이션에서 직접 DataSource 사용과 Repository 패턴 중 선택하기 위한 아키텍처 결정 가이드.]]></description>
      <link>https://brandonwie.dev/ko/posts/datasource-vs-repository-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/datasource-vs-repository-pattern</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>architecture</category>
      <category>patterns</category>
      <category>typeorm</category>
      <category>nestjs</category>
    </item>
    <item>
      <title><![CDATA[ETL 데이터 분리 전략]]></title>
      <description><![CDATA[자동화된 ETL 데이터와 수동 백필 데이터를 같은 S3 경로에 섞어두면 추적, 처리, 디버깅이 어려워집니다]]></description>
      <link>https://brandonwie.dev/ko/posts/etl-data-separation</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/etl-data-separation</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>data-engineering</category>
      <category>s3</category>
      <category>architecture</category>
    </item>
    <item>
      <title><![CDATA[NestJS WebSocket 레퍼런스]]></title>
      <description><![CDATA[NestJS에서 WebSocket 기능을 구현하기 위한 종합 레퍼런스.]]></description>
      <link>https://brandonwie.dev/ko/posts/nestjs-websockets</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/nestjs-websockets</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>nestjs</category>
      <category>websockets</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[pandas itertuples() vs iterrows()]]></title>
      <description><![CDATA[`iterrows()`는 DataFrame 행을 순회하는 가장 흔한 방법이지만, 매 행마다 pd.Series 객체를 생성해서 느립니다]]></description>
      <link>https://brandonwie.dev/ko/posts/pandas-itertuples-vs-iterrows</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/pandas-itertuples-vs-iterrows</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>python</category>
      <category>pandas</category>
      <category>performance</category>
    </item>
    <item>
      <title><![CDATA[TypeORM으로 PostgreSQL Advisory Lock 사용하기]]></title>
      <description><![CDATA[PostgreSQL이 관리하는 애플리케이션 수준의 lock으로 분산 환경에서 작업을 조율하는 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/postgresql-advisory-locks</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/postgresql-advisory-locks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>postgresql</category>
      <category>database</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[PostgreSQL IN 절 파라미터 제한]]></title>
      <description><![CDATA[TypeORM의 `In([...])` 연산자로 대량 ID를 쿼리하면 생성된 SQL이 ID당 하나의 바인드 파라미터를 만들어 성능이 저하됩니다]]></description>
      <link>https://brandonwie.dev/ko/posts/postgresql-in-clause-limits</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/postgresql-in-clause-limits</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>postgresql</category>
      <category>typeorm</category>
      <category>performance</category>
    </item>
    <item>
      <title><![CDATA[Keyword-Only 파라미터로 중복 함수 통합하기]]></title>
      <description><![CDATA[두 모듈에 거의 동일한 함수가 존재할 때, Python의 keyword-only 파라미터로 하나로 통합하는 패턴을 소개합니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/python-function-dedup-keyword-params</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/python-function-dedup-keyword-params</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>python</category>
      <category>refactoring</category>
      <category>api-design</category>
    </item>
    <item>
      <title><![CDATA[Sentry N+1 쿼리 감지]]></title>
      <description><![CDATA[Sentry가 런타임에서 N+1 쿼리를 감지하는 방식, 병렬 실행으로 인한 오탐 사례, 그리고 해결 패턴.]]></description>
      <link>https://brandonwie.dev/ko/posts/sentry-n-plus-one-detection</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/sentry-n-plus-one-detection</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>observability</category>
      <category>sentry</category>
    </item>
    <item>
      <title><![CDATA[캘린더 동기화에서 Stale Block과 Orphan Block의 차이]]></title>
      <description><![CDATA[Google Calendar API 동기화 시 발생하는 두 가지 정리 시나리오와 각각의 처리 전략]]></description>
      <link>https://brandonwie.dev/ko/posts/stale-vs-orphan-blocks</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/stale-vs-orphan-blocks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>sync</category>
      <category>google-calendar</category>
    </item>
    <item>
      <title><![CDATA[Sync Token 무효화 복구 (410 GONE)]]></title>
      <description><![CDATA[Google Calendar API가 410 GONE을 반환하면 sync token이 무효화되고 전체 재동기화가 필요해요. 올바른 처리 방법을 알아봐요.]]></description>
      <link>https://brandonwie.dev/ko/posts/sync-token-invalidation-recovery</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/sync-token-invalidation-recovery</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>sync</category>
      <category>error-handling</category>
    </item>
    <item>
      <title><![CDATA[TypeORM CLI와 NestJS DataSource 충돌]]></title>
      <description><![CDATA[TypeORM CLI를 NestJS 프로젝트에서 사용할 때 발생하는 연결 충돌 문제와 해결 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/typeorm-cli-nestjs-datasource</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/typeorm-cli-nestjs-datasource</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typeorm</category>
      <category>nestjs</category>
    </item>
    <item>
      <title><![CDATA[TypeScript Type Narrowing을 Assertion보다 우선하기]]></title>
      <description><![CDATA[프로덕션 코드에서 non-null assertion(!)과 강제 캐스팅(as Type) 대신 type narrowing을 사용해야 하는 이유]]></description>
      <link>https://brandonwie.dev/ko/posts/typescript-type-narrowing</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/typescript-type-narrowing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typescript</category>
      <category>best-practices</category>
    </item>
    <item>
      <title><![CDATA[updatedAt 기반 Staleness Guard]]></title>
      <description><![CDATA[비동기 업데이트(웹훅, 메시지 큐)를 받을 때 소스의 updatedAt과 로컬 타임스탬프를 비교해서 stale 데이터가 최신 변경을 덮어쓰지 않도록 보호하는 패턴.]]></description>
      <link>https://brandonwie.dev/ko/posts/updatedAt-staleness-guard</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/updatedAt-staleness-guard</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>sync</category>
      <category>webhooks</category>
      <category>race-condition</category>
    </item>
    <item>
      <title><![CDATA[Webhook vs 사용자 활동]]></title>
      <description><![CDATA[외부 서비스의 webhook은 그쪽의 활동을 나타내는 것이지, 우리 사용자의 활동이 아니에요. 이 구분이 리소스 관리에 중요해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/webhook-vs-user-activity</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/webhook-vs-user-activity</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>webhooks</category>
      <category>architecture</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[Amplitude Export API의 타임존 처리 방식]]></title>
      <description><![CDATA[Amplitude Export API가 이벤트 데이터 내보내기에서 타임존과 시간 경계를 처리하는 방식]]></description>
      <link>https://brandonwie.dev/ko/posts/amplitude-export-api-timezone</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/amplitude-export-api-timezone</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>data</category>
      <category>amplitude</category>
      <category>timezone</category>
      <category>api</category>
    </item>
    <item>
      <title><![CDATA[Airflow Celery Worker 로그 서버 설정]]></title>
      <description><![CDATA[CeleryExecutor를 사용할 때 워커가 별도 머신에 있으면 웹서버가 HTTP로 로그를 가져와야 합니다. hostname 설정이 잘못되면 로그 URL에 호스트가 비어서 에러가 납니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-celery-worker-log-server</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-celery-worker-log-server</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>celery</category>
      <category>logging</category>
    </item>
    <item>
      <title><![CDATA[Airflow CI/CD 개념]]></title>
      <description><![CDATA[주방 비유를 통해 Airflow 배포와 CI/CD 개념을 이해해 봐요.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-cicd-concepts</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-cicd-concepts</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>cicd</category>
      <category>docker</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Airflow DAG 수준 Callback]]></title>
      <description><![CDATA[Airflow 2.x는 DAG 수준의 on_success_callback을 무시해요. task 수준 callback만 동작해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-dag-level-callbacks</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-dag-level-callbacks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>callbacks</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Airflow DAG start_date와 수동 트리거]]></title>
      <description><![CDATA[DAG를 수동으로 트리거할 때, 트리거 날짜가 start_date보다 이전이면 Airflow가 task 실행을 건너뛸 수 있어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-dag-start-date</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-dag-start-date</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
    </item>
    <item>
      <title><![CDATA[Airflow Manual DAG Config 패턴]]></title>
      <description><![CDATA[수동 DAG 트리거 시 커스텀 파라미터를 전달하면서도 예약 실행은 그대로 유지하는 패턴입니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-manual-dag-config</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-manual-dag-config</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>dag</category>
      <category>testing</category>
    </item>
    <item>
      <title><![CDATA[Airflow Task 의존성 구문]]></title>
      <description><![CDATA[Airflow의 >> 연산자는 task 의존성을 설정하고 downstream task를 반환해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/airflow-task-dependency-syntax</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/airflow-task-dependency-syntax</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>python</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Bash set -e와 명령어 치환]]></title>
      <description><![CDATA[set -e(에러 시 종료)를 사용할 때, 명령어 치환이 커스텀 에러 메시지와 함께 예상과 다르게 동작하는 경우.]]></description>
      <link>https://brandonwie.dev/ko/posts/bash-set-e-command-substitution</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/bash-set-e-command-substitution</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>bash</category>
      <category>shell-scripting</category>
    </item>
    <item>
      <title><![CDATA[boto3 S3 put_object() Body 파라미터 인코딩]]></title>
      <description><![CDATA[ETL 파이프라인에서 JSON 매니페스트 파일을 S3에 업로드할 때 발생하는 파라미터 검증 에러와 해결 방법입니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/boto3-s3-encoding</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/boto3-s3-encoding</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>s3</category>
      <category>boto3</category>
      <category>python</category>
    </item>
    <item>
      <title><![CDATA[Claude Code PostToolUse Hooks]]></title>
      <description><![CDATA[PostToolUse hook은 도구 실행 완료 후 발생하며, stdin으로 세션 정보, 도구 이름, 입력, 결과, 작업 디렉토리가 포함된 JSON을 받습니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/claude-code-posttooluse-hooks</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/claude-code-posttooluse-hooks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>hooks</category>
    </item>
    <item>
      <title><![CDATA[DAG 배포 전략]]></title>
      <description><![CDATA[Airflow DAG를 배포하는 다양한 방법과 트레이드오프 분석]]></description>
      <link>https://brandonwie.dev/ko/posts/dag-deployment-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/dag-deployment-strategies</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>deployment</category>
      <category>gitops</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Docker Compose CI/CD 패턴]]></title>
      <description><![CDATA[CI/CD 파이프라인에서 Docker Compose를 사용하는 패턴. 특히 개발과 프로덕션 설정을 분리하는 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/docker-compose-cicd-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/docker-compose-cicd-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>cicd</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ECR Credential Helper]]></title>
      <description><![CDATA[ECR 인증 토큰 만료 문제를 해결하는 AWS 공식 credential helper 설정 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/ecr-credential-helper</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ecr-credential-helper</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>docker</category>
      <category>ecr</category>
    </item>
    <item>
      <title><![CDATA[ECR 토큰 갱신 Cron]]></title>
      <description><![CDATA[AWS ECR 인증 토큰은 12시간 후 만료돼요. 오래 실행되는 Docker 호스트에서는 자동 토큰 갱신을 구현해야 해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/ecr-token-refresh-cron</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ecr-token-refresh-cron</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>ecr</category>
      <category>docker</category>
      <category>cron</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ETL 스케줄 타이밍]]></title>
      <description><![CDATA[데이터 도착 패턴에 맞는 ETL 스케줄을 설정하는 방법을 알아봐요.]]></description>
      <link>https://brandonwie.dev/ko/posts/etl-schedule-timing</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/etl-schedule-timing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>etl</category>
      <category>scheduling</category>
    </item>
    <item>
      <title><![CDATA[Linux 기초]]></title>
      <description><![CDATA[컨테이너를 위한 필수 Linux 개념: cgroups, snapshotters, 권한, ACLs]]></description>
      <link>https://brandonwie.dev/ko/posts/linux</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/linux</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title><![CDATA[MinIO로 로컬 S3 구축하기]]></title>
      <description><![CDATA[Docker로 실행하는 S3 호환 오브젝트 스토리지 MinIO 설정 가이드]]></description>
      <link>https://brandonwie.dev/ko/posts/local-s3-minio</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/local-s3-minio</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>s3</category>
      <category>minio</category>
      <category>local-dev</category>
    </item>
    <item>
      <title><![CDATA[Python 툴링 스택]]></title>
      <description><![CDATA[애플리케이션 프로젝트를 위한 표준 Python 개발 툴링 구성]]></description>
      <link>https://brandonwie.dev/ko/posts/python-tooling-stack</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/python-tooling-stack</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>python</category>
      <category>tooling</category>
    </item>
    <item>
      <title><![CDATA[S3 경로 정규화 패턴]]></title>
      <description><![CDATA[S3 key prefix에 일관된 trailing slash를 보장하는 정규화 패턴]]></description>
      <link>https://brandonwie.dev/ko/posts/s3-path-handling</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/s3-path-handling</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>s3</category>
      <category>python</category>
      <category>path-handling</category>
    </item>
    <item>
      <title><![CDATA[Terraform 상태 복구]]></title>
      <description><![CDATA[Terraform state 파일이 AWS 실제 상태와 맞지 않을 때 복구하는 절차를 정리했어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/terraform-state-recovery</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/terraform-state-recovery</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>terraform</category>
      <category>aws</category>
      <category>disaster-recovery</category>
    </item>
    <item>
      <title><![CDATA[tmux 스마트 세션 자동 시작]]></title>
      <description><![CDATA[숫자 세션 이름으로 .zshrc에서 tmux를 자동 시작해서, 새 터미널 창마다 독립된 tmux 세션을 사용하는 방법이에요.]]></description>
      <link>https://brandonwie.dev/ko/posts/tmux-smart-session-auto-start</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/tmux-smart-session-auto-start</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>tmux</category>
      <category>zsh</category>
      <category>terminal</category>
      <category>iterm2</category>
    </item>
    <item>
      <title><![CDATA[uv.lock 모범 사례]]></title>
      <description><![CDATA[uv.lock을 버전 관리에 커밋해야 하는지에 대한 가이드]]></description>
      <link>https://brandonwie.dev/ko/posts/uv-lock-best-practice</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/uv-lock-best-practice</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>python</category>
      <category>uv</category>
    </item>
    <item>
      <title><![CDATA[Giscus SvelteKit 통합하기]]></title>
      <description><![CDATA[데이터베이스나 인증 백엔드 없이 정적 생성 SvelteKit 블로그에 댓글 시스템을 추가하는 방법을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/giscus-sveltekit-integration</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/giscus-sveltekit-integration</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>svelte</category>
      <category>comments</category>
    </item>
    <item>
      <title><![CDATA[모바일 Input UX]]></title>
      <description><![CDATA[커스텀 스타일 input이 모바일 브라우저에서 제대로 동작하도록 만드는 기법을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/mobile-input-ux</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/mobile-input-ux</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>mobile</category>
      <category>css</category>
    </item>
    <item>
      <title><![CDATA[SvelteKit용 Paraglide-JS i18n]]></title>
      <description><![CDATA[번들을 부풀리거나 런타임 오버헤드 없이 SvelteKit 정적 블로그에 한국어/영어 다국어 지원을 추가하는 방법을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/paraglide-i18n</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/paraglide-i18n</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>i18n</category>
      <category>svelte</category>
      <category>sveltekit</category>
    </item>
    <item>
      <title><![CDATA[Svelte 5 $effect Rune]]></title>
      <description><![CDATA[Svelte 5에서 $effect rune의 자동 의존성 추적, cleanup, 그리고 $derived 및 onMount와의 차이를 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/svelte-effect-rune</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/svelte-effect-rune</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>svelte</category>
      <category>svelte5</category>
      <category>reactivity</category>
    </item>
    <item>
      <title><![CDATA[Claude Code 전문가 워크플로우]]></title>
      <description><![CDATA[세 명의 전문가 소스에서 합성한 Claude Code 활용 패턴: Boris Cherny(도구 설정), Mia Heidenstedt(프로세스 규율), YK Dojo(실무 워크플로우)]]></description>
      <link>https://brandonwie.dev/ko/posts/claude-code-expert-workflows</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/claude-code-expert-workflows</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>workflows</category>
      <category>best-practices</category>
    </item>
    <item>
      <title><![CDATA[CSS Inline-Replaced 요소의 하단 갭]]></title>
      <description><![CDATA[`<textarea>`, `<img>`, `<input>`, `<video>` 같은 요소는 CSS에서 inline-replaced 요소예요. 기본적으로 텍스트 baseline 위에 놓여서 신비한 하단 갭이 생겨요.]]></description>
      <link>https://brandonwie.dev/ko/posts/css-inline-replaced-element-gap</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/css-inline-replaced-element-gap</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title><![CDATA[문서화 패턴]]></title>
      <description><![CDATA[Buffer Pattern은 AI 지원 세션에서 중요한 발견을 보존해요. 세션이 끝나거나 연결이 끊겨도 소중한 인사이트를 잃지 않도록 해주죠.]]></description>
      <link>https://brandonwie.dev/ko/posts/documentation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/documentation-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>documentation</category>
      <category>3b</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[macOS Keychain 다중 계정 동작 방식]]></title>
      <description><![CDATA[macOS Keychain은 같은 서비스 이름에 다른 계정 속성을 가진 여러 항목을 허용합니다. 이로 인한 인증 버그를 디버깅하고 해결하는 방법을 다룹니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/macos-keychain-multi-account</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/macos-keychain-multi-account</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>macos</category>
      <category>keychain</category>
      <category>security</category>
      <category>multi-account</category>
    </item>
    <item>
      <title><![CDATA[Markdownlint 컨벤션 가이드]]></title>
      <description><![CDATA[7,500개 이상의 markdownlint 에러를 수정하며 정립한 Markdown 포맷팅 규칙과 설정 방법을 정리합니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/markdownlint-conventions</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/markdownlint-conventions</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>documentation</category>
      <category>markdown</category>
      <category>linting</category>
    </item>
    <item>
      <title><![CDATA[React 데모 파이프라인 패턴]]></title>
      <description><![CDATA[백엔드 없이 완전히 작동하는 React 대시보드 데모 모드를 구축하는 패턴을 소개합니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/react-demo-pipeline-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/react-demo-pipeline-pattern</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>demo-mode</category>
      <category>frontend</category>
      <category>pipeline</category>
    </item>
    <item>
      <title><![CDATA[shadcn/ui 수동 설정 (Vite + Tailwind)]]></title>
      <description><![CDATA[Vite + React + TypeScript + Tailwind CSS 프로젝트에서 shadcn CLI 없이 shadcn/ui 컴포넌트 프리미티브를 수동으로 설정하는 방법입니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/shadcn-ui-vite-tailwind-setup</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/shadcn-ui-vite-tailwind-setup</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>shadcn-ui</category>
      <category>tailwind</category>
      <category>vite</category>
      <category>frontend</category>
    </item>
    <item>
      <title><![CDATA[Claude Code 스킬에서 zsh 백틱 평가 문제]]></title>
      <description><![CDATA[SKILL.md 파일의 백틱 마크다운 포맷이 zsh 명령어 치환 에러를 일으키는 문제와 해결법을 정리했어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/zsh-backtick-eval-in-skills</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/zsh-backtick-eval-in-skills</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>zsh</category>
      <category>debugging</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar API: 반복 일정 업데이트]]></title>
      <description><![CDATA[반복 일정에서 "이 일정만", "이후 모든 일정", "전체 일정" 업데이트를 처리하는 방법이에요.]]></description>
      <link>https://brandonwie.dev/ko/posts/google-calendar-recurring-events</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/google-calendar-recurring-events</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>calendar</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar 반복 일정 연산]]></title>
      <description><![CDATA[반복 일정의 `all`, `this`, `thisAndFollowing` 업데이트 구현 패턴이에요.]]></description>
      <link>https://brandonwie.dev/ko/posts/recurring-event-operations</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/recurring-event-operations</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>google-api</category>
      <category>calendar</category>
      <category>recurring-events</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[외부 캘린더 데이터 정규화]]></title>
      <description><![CDATA[Apple Calendar, GNOME Evolution, 여행 앱 등의 외부 캘린더 데이터는 비표준 형식을 포함하는 경우가 많아서 파싱이 깨져요. 정규화 레이어로 이 edge case를 처리하는 방법이에요.]]></description>
      <link>https://brandonwie.dev/ko/posts/external-calendar-normalization</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/external-calendar-normalization</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>rrule</category>
      <category>parsing</category>
    </item>
    <item>
      <title><![CDATA[부분 접근 반복 일정]]></title>
      <description><![CDATA[반복 시리즈의 중간부터 초대받은 사용자의 경우, Google Calendar API가 예상과 다르게 동작해요. 제대로 처리하지 않으면 데이터 무결성 문제가 발생해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/partial-access-recurring-events</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/partial-access-recurring-events</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>data-integrity</category>
      <category>edge-cases</category>
    </item>
    <item>
      <title><![CDATA[rrule BYDAY 타임존 보정]]></title>
      <description><![CDATA[rrule JavaScript 라이브러리가 BYDAY 요일을 이벤트 타임존이 아닌 UTC로 해석하는 문제와 해결 방법을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/rrule-byday-timezone-correction</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/rrule-byday-timezone-correction</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>rrule</category>
      <category>timezone</category>
      <category>icalendar</category>
    </item>
    <item>
      <title><![CDATA[RRULE EXDATE 타임존 파싱 문제]]></title>
      <description><![CDATA[rrule JavaScript 라이브러리에서 EXDATE가 RRULE보다 먼저 오거나 TZID 파라미터가 있으면 파싱이 제대로 안 됩니다. 해결 방법을 알아봅니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/rrule-exdate-parsing</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/rrule-exdate-parsing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
    </item>
    <item>
      <title><![CDATA[Lemon Squeezy 구독 관리]]></title>
      <description><![CDATA[구독 라이프사이클, 취소, 만료, 재활성화에 대한 정리예요.]]></description>
      <link>https://brandonwie.dev/ko/posts/lemon-squeezy-subscriptions</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/lemon-squeezy-subscriptions</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>payments</category>
      <category>subscriptions</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[바이너리 체크섬 검증]]></title>
      <description><![CDATA[SHA256 체크섬을 사용해 다운로드한 바이너리가 변조되지 않았는지 검증하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/binary-checksum-verification</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/binary-checksum-verification</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>devops</category>
      <category>supply-chain</category>
    </item>
    <item>
      <title><![CDATA[타입 수준 필수 파라미터로 IDOR 방지하기]]></title>
      <description><![CDATA[API가 사용자에게 ID를 조작해서 다른 사용자의 리소스에 접근할 수 있게 허용하는 IDOR 취약점을 타입 레벨에서 방지하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/idor-prevention-type-level</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/idor-prevention-type-level</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>backend</category>
      <category>typescript</category>
    </item>
    <item>
      <title><![CDATA[Alembic과 Async SQLAlchemy 설정하기]]></title>
      <description><![CDATA[SQLAlchemy의 async engine과 함께 Alembic migration을 설정하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/alembic-async-sqlalchemy</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/alembic-async-sqlalchemy</guid>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>alembic</category>
      <category>sqlalchemy</category>
      <category>python</category>
      <category>database</category>
    </item>
    <item>
      <title><![CDATA[Claude Code 멀티 프로필 HUD 설정]]></title>
      <description><![CDATA[Claude Code를 여러 계정(개인 + 업무)으로 운영할 때 HUD 플러그인이 올바른 계정별 사용량 통계를 표시하도록 설정하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/claude-code-multi-profile-hud</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/claude-code-multi-profile-hud</guid>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>hud</category>
      <category>multi-account</category>
      <category>devtools</category>
    </item>
    <item>
      <title><![CDATA[ECR/ECS 배포 워크플로우]]></title>
      <description><![CDATA[Amazon ECR과 ECS를 사용한 컨테이너 배포 전체 과정 — 인증부터 롤링 업데이트, 트러블슈팅까지 정리했어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/ecr-ecs-deployment-workflow</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ecr-ecs-deployment-workflow</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>ecr</category>
      <category>docker</category>
      <category>cicd</category>
    </item>
    <item>
      <title><![CDATA[AWS VPC 네트워킹 기초]]></title>
      <description><![CDATA[CIDR 계산, NAT Gateway 배치, Route Table — 왜 다들 처음에 헤매는지, 어떻게 제대로 잡는지 정리했어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/vpc-networking-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/vpc-networking-fundamentals</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>networking</category>
      <category>vpc</category>
      <category>terraform</category>
    </item>
    <item>
      <title><![CDATA[FastAPI Dependency Injection 패턴]]></title>
      <description><![CDATA[모든 라우트 핸들러에서 `Depends(get_current_user)`를 반복하면 보일러플레이트가 생기고 불일치가 발생하기 쉽습니다]]></description>
      <link>https://brandonwie.dev/ko/posts/fastapi-dependency-injection-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/fastapi-dependency-injection-patterns</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>fastapi</category>
      <category>python</category>
    </item>
    <item>
      <title><![CDATA[Race Condition 방지를 위한 Pessimistic Locking]]></title>
      <description><![CDATA[INSERT 전 존재 여부를 확인할 때 race condition을 방지하기 위해 SELECT FOR UPDATE를 사용하는 방법.]]></description>
      <link>https://brandonwie.dev/ko/posts/pessimistic-locking-race-conditions</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/pessimistic-locking-race-conditions</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>database</category>
      <category>concurrency</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[AWS ECS/ALB에서의 WebSocket 아키텍처]]></title>
      <description><![CDATA[ALB, ECS, Redis Pub/Sub를 활용한 실시간 알림용 WebSocket 연결 구조]]></description>
      <link>https://brandonwie.dev/ko/posts/websocket-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/websocket-architecture</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>websocket</category>
      <category>socket.io</category>
      <category>redis</category>
      <category>aws</category>
      <category>ecs</category>
      <category>alb</category>
    </item>
    <item>
      <title><![CDATA[OAuth 2.0 구현 패턴]]></title>
      <description><![CDATA[백엔드 서비스에서 OAuth 2.0 플로우를 구현하기 위한 실용적 패턴]]></description>
      <link>https://brandonwie.dev/ko/posts/oauth2-implementation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/oauth2-implementation-patterns</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>oauth</category>
      <category>api</category>
    </item>
    <item>
      <title><![CDATA[Traefik, Keycloak, ForwardAuth 이해하기]]></title>
      <description><![CDATA[Traefik을 통해 노출된 Kubernetes 서비스에 인증 레이어가 없는 문제를 해결하는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/traefik-keycloak-forwardauth</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/traefik-keycloak-forwardauth</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>traefik</category>
      <category>keycloak</category>
      <category>oauth2</category>
      <category>authentication</category>
    </item>
    <item>
      <title><![CDATA[Recharts 다크 테마 커스터마이징]]></title>
      <description><![CDATA[Recharts 차트를 다크 터미널 테마에 맞게 스타일링하는 방법을 CSS 변수와 커스텀 컴포넌트를 통해 설명합니다.]]></description>
      <link>https://brandonwie.dev/ko/posts/recharts-dark-theme-customization</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/recharts-dark-theme-customization</guid>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>recharts</category>
      <category>charts</category>
      <category>frontend</category>
      <category>dark-theme</category>
    </item>
    <item>
      <title><![CDATA[AI 코드 리뷰 패턴]]></title>
      <description><![CDATA[AI 리뷰어(Claude, Copilot, Codex)가 잘못되거나 오해의 소지가 있는 피드백을 생성하는 패턴 정리.]]></description>
      <link>https://brandonwie.dev/ko/posts/ai-code-review-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ai-code-review-patterns</guid>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
      <category>code-review</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[배치 처리 트레이드오프]]></title>
      <description><![CDATA[데이터베이스 작업을 공유하는 여러 엔티티를 처리할 때, 엔티티별 배칭과 크로스 엔티티 배칭 간의 트레이드오프를 분석해요.]]></description>
      <link>https://brandonwie.dev/ko/posts/batch-processing-trade-offs</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/batch-processing-trade-offs</guid>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>architecture</category>
      <category>trade-offs</category>
    </item>
    <item>
      <title><![CDATA[ECS Auto-Scaling 심층 분석]]></title>
      <description><![CDATA[ECS auto-scaling의 알고리즘, 쿨다운, 비용 최적화 — 비례 제어를 이해하면 flapping과 과금 폭탄을 피할 수 있어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/ecs-autoscaling-deep-dive</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/ecs-autoscaling-deep-dive</guid>
      <pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>autoscaling</category>
      <category>fargate</category>
    </item>
    <item>
      <title><![CDATA[GitHub PR Review API - 인라인 코멘트]]></title>
      <description><![CDATA[GitHub API와 gh CLI로 PR 리뷰에 인라인 코멘트를 다는 방법]]></description>
      <link>https://brandonwie.dev/ko/posts/github-pr-review-api-inline-comments</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/github-pr-review-api-inline-comments</guid>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>github</category>
      <category>api</category>
      <category>pr-review</category>
    </item>
    <item>
      <title><![CDATA[Two-Phase Deletion 패턴]]></title>
      <description><![CDATA[rollback 기능이 없는 시스템에서 외부 API 호출이 성공해야만 데이터를 영구 삭제하는 안전한 삭제 패턴.]]></description>
      <link>https://brandonwie.dev/ko/posts/two-phase-deletion-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/two-phase-deletion-pattern</guid>
      <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>architecture</category>
      <category>data-integrity</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[인프라 보안 강화 체크리스트]]></title>
      <description><![CDATA[AWS 인프라를 위한 종합 보안 강화 체크리스트예요. 네트워크 격리, WAF 배포, 비용 효율적인 보안 개선을 다뤄요.]]></description>
      <link>https://brandonwie.dev/ko/posts/infrastructure-hardening-checklist</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/infrastructure-hardening-checklist</guid>
      <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>aws</category>
      <category>infrastructure</category>
      <category>checklist</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar 동기화 전략]]></title>
      <description><![CDATA[Full sync와 incremental sync 패턴, 그리고 캘린더 분류 로직을 정리했어요.]]></description>
      <link>https://brandonwie.dev/ko/posts/google-calendar-sync-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/ko/posts/google-calendar-sync-strategies</guid>
      <pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>sync</category>
      <category>calendar</category>
      <category>work</category>
    </item>
  </channel>
</rss>