{"posts":[{"id":27,"title":"CPU를 비우고 주사율에 맞추는 1920px 고정 대시보드 스케일링"},{"id":26,"title":"[SIPE 5기 해커톤 대상 후기] 개발자의 허리를 책임지는 허리피라우 서비스 회고록"},{"id":25,"title":"Sentry Sesstion Replay rrweb JSON을 MP4로 변환해보자"},{"id":24,"title":"OpenAPI 스펙으로 TypeScript API 코드를 자동 생성하는 파이프라인 설계하기"},{"id":23,"title":"React Query 캐싱 전략과 invalidateQueries 올바른 사용 패턴"},{"id":22,"title":"Sentry React/Vite 통합 셋업 가이드 - 기본 설정부터 pnpm 주의사항까지"},{"id":20,"title":"Google Calendar + Apps Script + Discord 봇으로 오프라인 경험 자동 수집하기"},{"id":14,"title":"Claude Code 대화 기록으로 블로그 자동 포스팅 파이프라인 만들기"},{"id":10,"title":"[스위프 후기][SWYP 웹 11기] 국내 여행 AI 서비스 Airoad 개발 회고록"},{"id":9,"title":"FSD(Feature-Sliced Design) 아키텍처 트렌드 정리"},{"id":7,"title":"디자인 시스템 적용기: FE와 디자인팀 소통 창구 만들기"},{"id":8,"title":"상태 관리 지옥 탈출하기: React Query 기초 정리"},{"id":6,"title":"입사 준비하며 정리한 React와 Vue.js 차이점"},{"id":5,"title":"서버 사이드 렌더링이란?"},{"id":4,"title":"Context API가 상태 관리 도구라고 볼 수 없는 이유"},{"id":3,"title":"Concurrent Mode란?"},{"id":2,"title":"함수형 컴포넌트만 사용해도 괜찮을까?"},{"id":1,"title":"useRecoil의 개념"}],"projects":[{"id":3,"title":"NAR.GG - LOL 프로 경기 분석 서비스"},{"id":1,"title":"BlueFill - AI기반 사용자 맞춤 청약 정보 서비스"},{"id":2,"title":"AirRoad - AI 기반 여행 일정 추천 서비스"}],"tags":[{"id":34,"name":"2025기 ProfitLab 해커톤"},{"id":23,"name":"Activity"},{"id":93,"name":"API"},{"id":71,"name":"Apps Script"},{"id":12,"name":"article"},{"id":35,"name":"Claude"},{"id":112,"name":"CSS"},{"id":17,"name":"Design System"},{"id":18,"name":"DevLog"},{"id":72,"name":"Discord Bot"},{"id":94,"name":"DTO"},{"id":104,"name":"Electron"},{"id":33,"name":"Emotion"},{"id":87,"name":"enabled"},{"id":81,"name":"ErrorBoundary"},{"id":21,"name":"Feature-Sliced Design"},{"id":70,"name":"Google Calendar"},{"id":86,"name":"invalidateQueries"},{"id":32,"name":"Mantine UI"},{"id":107,"name":"mediapipe"},{"id":97,"name":"MP4"},{"id":2,"name":"Next.js"},{"id":14,"name":"Nextjs"},{"id":105,"name":"Node.js"},{"id":41,"name":"Notion"},{"id":74,"name":"OAuth"},{"id":99,"name":"OOM"},{"id":53,"name":"OpenAPI"},{"id":80,"name":"pnpm"},{"id":30,"name":"Radix UI"},{"id":1,"name":"React"},{"id":84,"name":"React Query"},{"id":89,"name":"refetchOnMount"},{"id":115,"name":"ResizeObserver"},{"id":96,"name":"rrweb"},{"id":79,"name":"Sentry"},{"id":27,"name":"Shadcn UI"},{"id":110,"name":"SIPE 5기"},{"id":101,"name":"SSE"},{"id":13,"name":"SSR"},{"id":88,"name":"staleTime"},{"id":31,"name":"STOMP.js"},{"id":16,"name":"Storybook"},{"id":106,"name":"supabase"},{"id":5,"name":"Supabase"},{"id":26,"name":"Tailwind CSS"},{"id":19,"name":"Tanstack Query"},{"id":25,"name":"TanStack Query"},{"id":113,"name":"transform"},{"id":3,"name":"TypeScript"},{"id":29,"name":"Vanilla Extract"},{"id":24,"name":"Vite"},{"id":15,"name":"Vue3"},{"id":108,"name":"Yarn"},{"id":28,"name":"Zustand"},{"id":95,"name":"개발생산성"},{"id":90,"name":"다이얼로그"},{"id":116,"name":"대시보드"},{"id":82,"name":"모니터링"},{"id":117,"name":"반응형"},{"id":37,"name":"블로그"},{"id":73,"name":"블로그 파이프라인"},{"id":91,"name":"성능 최적화"},{"id":114,"name":"성능최적화"},{"id":100,"name":"세그먼트"},{"id":98,"name":"세션리플레이"},{"id":20,"name":"스위프 웹 11기"},{"id":22,"name":"아키텍쳐"},{"id":103,"name":"웹개발"},{"id":36,"name":"자동화"},{"id":102,"name":"진행률"},{"id":85,"name":"캐싱 전략"},{"id":92,"name":"코드자동생성"},{"id":77,"name":"트러블슈팅"},{"id":38,"name":"파이프라인"},{"id":55,"name":"프론트엔드"},{"id":109,"name":"해커톤"},{"id":83,"name":"환경설정"},{"id":58,"name":"회고"},{"id":111,"name":"회고록"}]}