All Posts

아직도 AI에게 코딩만 부탁하시나요? 디버깅, 검증도 맡길 수 있습니다
스크린샷 첨부 대신 AI에게 직접 페이지를 열어 확인하게 시키는 Playwright MCP를, 평소 쓰는 패턴과 함께 소개합니다.

Claude Code의 Playwright MCP, 내 Chrome 프로필 그대로 쓰기
매번 새 프로필로 뜨는 Playwright MCP를 평소 쓰는 Chrome 프로필에 연결하는 방법을 정리했습니다.
May 7, 2026
Radix UI vs Base UI: 어떤 Headless 라이브러리를 선택할까
Headless UI 라이브러리 Radix UI와 Base UI의 설계 철학, API, 접근성, 개발 경험을 비교합니다
April 24, 2026
i18n 미사용 키 정리
공식 i18next-cli가 네임스페이스를 통째로 지우려 한 실측에서 출발해, ts-morph 커스텀 스크립트와 GitHub Actions 주간 자동 PR로 번역 카탈로그를 안전하게 정리하는 파이프라인을 만든 과정
April 13, 2026
React Router는 자체 ErrorBoundary를 갖고 있다
ErrorBoundary를 감쌌는데 에러가 안 잡히는 상황. React Router가 내부에서 먼저 에러를 잡고 있었고, errorElement로 해결한 과정을 공유한다.
April 9, 2026
시뮬레이터에선 되던 앱이 실기기에서 터진 이유
Flutter 시뮬레이터에서 잘 되던 API 호출이 실기기에서 Connection refused, localhost가 가리키는 곳이 달랐다. 원인을 찾고 device_info_plus로 자동 감지까지 구현한 과정.
April 9, 2026
Orval 코드 생성 시 500개 파일 diff가 생긴다면
Orval이 생성하는 파일 헤더의 OpenAPI spec version 때문에 500개 파일에 불필요한 diff가 생기는 문제를, 커스텀 header 함수로 해결한 경험.
April 1, 2026
Obsidian 블로그 워크플로우
Next.js 블로그에 Obsidian과 AI를 연동한 글쓰기 환경 구축기
March 27, 2026
Obsidian 이미지를 Next.js 블로그에서 렌더링하기 - 커스텀 remark 플러그인
Obsidian의 ![[이미지.png]] 문법이 MDX에서 깨지는 문제를 커스텀 remark 플러그인으로 해결한 과정
March 25, 2026
파일 업로드 리팩토링기
산발적 파일 관리 로직의 문제를 인식하고, useTempFileManager를 v1에서 v2로 리팩토링한 과정
March 25, 2026
배포했는데 왜 안 바뀌죠 - Version Polling으로 SPA 업데이트 알림 배너 만들기
SPA에서 배포 후에도 사용자 화면이 갱신되지 않는 문제를, Service Worker 없이 version.json 폴링과 Cache API로 해결한 과정.
March 20, 2026
에러 핸들링 시리즈
TanStack Query 에러 타입 지정부터 인터셉터 통합, 에러 UI 설계, ErrorBoundary 안전망까지 — 에러가 만들어지고 보여지고 잡히는 흐름 전체를 개선한 과정
March 13, 2026
Zustand scoped store 시리즈
글로벌 store의 한계에서 출발해, createStore() + React Context 패턴으로 scoped store를 구현하고, ~40줄 유틸리티로 추상화하는 과정
March 13, 2026
F12 누르면 비밀번호가 보인다 - 프론트엔드에서 SHA-256 해싱으로 로그인 평문 노출 막기
로그인 보안 태스크를 받고, SHA-256 해싱을 처음 접하며 하나씩 질문하고 답을 찾아간 과정을 공유합니다.
March 11, 2026
런타임에 변하는 한글 - i18next에서 조사를 자동으로 선택하기
{{name}}에 어떤 단어가 올지 모르는데, 을/를은 어떻게 정하지? i18next post-processor로 번역 키 하나만으로 조사를 자동 선택한 과정.
February 27, 2026TypeScript는 왜 내 코드를 의심할까
TypeScript는 왜 내 코드를 의심할까
April 12, 2024if문 하나로 TypeScript가 똑똑해지는 이유
if문 하나로 TypeScript가 똑똑해지는 이유
April 9, 2024