Fedify #879 : KV 락 재시도를 스텁이 아닌 상태로 검증하기
Fedify의 @fedify/cfworkers가 Workers KV의 최종적 일관성 때문에 best-effort로만 순서를 보장하는 이유를 정리하고, 이슈 #879에서 vi.spyOn() 스텁 대신 실제 상태를 가진 가짜 KV로 락 재시도 테스트를 작성한 과정을 담습니다.
Fedify의 @fedify/cfworkers가 Workers KV의 최종적 일관성 때문에 best-effort로만 순서를 보장하는 이유를 정리하고, 이슈 #879에서 vi.spyOn() 스텁 대신 실제 상태를 가진 가짜 KV로 락 재시도 테스트를 작성한 과정을 담습니다.
Fedify 벤치마크 failure 시나리오 테스트가 25ms duration과 CI 스케줄링 때문에 Flaky해지는 이유를 정리하고, Clock 주입으로 시간 의존성을 제거한 수정 과정을 담습니다.
GitHub PR 협업 이벤트와 CI 성공/실패 결과를 하나의 채널에 몰아넣지 않고, GitHub Webhook과 GitHub Actions로 나눠 각각 다른 Discord 채널로 보내도록 구성한 과정을 정리합니다.
Fedify의 첫 오픈소스 기여로 맡은 이슈 #881을 통해 메시지 큐 동작 방식을 이해하고, WorkersMessageQueue.listen() 테스트 코드를 작성해 PR을 머지하기까지의 과정을 정리합니다.
오픈소스 기여를 시작하고 싶었던 이유부터 OSSCA 참여형 지원, Fedify 프로젝트 합류와 발대식까지의 과정을 정리합니다.
Valid Anagram부터 Validate Binary Search Tree까지, DaleStudy leetcode 2주차에 푼 다섯 문제와 코드 리뷰에서 받은 피드백을 정리합니다.
Contains Duplicate부터 House Robber까지, DaleStudy leetcode 1주차에 푼 다섯 문제와 코드 리뷰에서 받은 피드백을 정리합니다.
pnpm 모노레포 Docker 빌드, Jest CI, EC2 배포까지 GitHub Actions 파이프라인 구성 중 겪은 트러블슈팅 전 과정을 기록합니다.
CI/CD 개념부터 GitHub Actions Workflow 구조, pnpm 모노레포 test·deploy 잡 설계까지 전 과정을 정리합니다.
Docker와 Docker Compose의 기초 개념부터 pnpm 모노레포 NestJS 이미지 빌드, EC2에 실제 배포하는 과정까지 정리합니다.
AWS와 EC2의 기초 개념부터 인스턴스 생성, 보안 그룹, SSH 접속, RDS 대신 Docker로 DB를 올린 이유까지 정리합니다.
Astro 블로그에서 한글 웹 폰트의 깜빡임을 줄이기 위해 FOIT/FOUT의 차이부터 WOFF2 변환, Preload, Static Subset까지 적용한 구현 기록입니다.
NestJS Built-in Logger의 운영 환경 한계를 직시하고, Pino로 전환하는 과정을 정리했습니다. 구조화 로깅 설계부터 ExceptionFilter DI 연동, APP_FILTER 등록 방식까지의 형태가 되기까지의 구현 기록입니다.
NestJS 기본 예외 처리부터 커스텀 필터, 응답 인터셉터까지 — 서버 응답을 한 가지 규칙으로 통일한 구현 기록입니다.
프론트엔드 연동 과정에서 발견한 로그인 보안 설계의 허점과, HttpOnly 쿠키 기반으로 전환하면서 Secure, SameSite, CORS 세 레이어를 직접 구현한 흐름을 정리합니다.
TodoList 서버를 구현하며 부딪힌 DTO 분리·Update API 분리 고민과, 명세 우선 워크플로우로 돌아간 과정을 정리합니다.
NestJS에서 로그 레벨을 환경별로 설계하고, Built-in Logger로 실습한 뒤 @nestjs/config로 환경 변수를 분리하는 흐름까지 정리합니다.
TypeORM에서 User와 Board의 관계를 설정하고, N+1 문제를 피하며, 응답에서 민감 정보를 제거하는 흐름까지 직접 구현하며 정리합니다.
NestJS에서 회원가입, 로그인, JWT 발급, Passport Guard를 이용한 인증 파이프라인을 직접 구현하며 정리합니다.
서버와 데이터베이스의 기본 개념부터 TypeORM을 활용한 NestJS 데이터베이스 연동, 그리고 TypeORM 버전 호환성 이슈 해결까지 정리합니다.
Astro v6, TypeScript 6.0, Vite 8의 변경사항과 세 기술의 연결 관계를 공식 문서 기준으로 정리합니다.
NestJS의 Module-Controller-Service 구조와 Dependency Injection, 그리고 Pipe를 활용한 유효성 검사를 직접 구현하며 정리합니다.
서버 주도 협상과 에이전트 주도 협상의 동작 원리, 그리고 Vary 헤더가 캐시 정합성을 보장하는 방식을 정리합니다.
HTTP 통신의 기본 구성 요소인 메서드, 상태 코드, 헤더와 바디의 역할과 구조를 정리합니다.
Express의 미들웨어 체인 구조와 Node.js 싱글 스레드 모델의 동작 원리를 실험으로 검증하며 정리한 글입니다.
플랫폼 블로그 대신 Astro로 직접 블로그를 만든 이유와 초기 세팅, 그리고 앞으로의 블로그 목표를 정리합니다.
멘토멘티, UMC, 프로젝트, AI, 여행 — 2025년 한 해를 돌아보며 회고 기록을 남깁니다.