프론트엔드/풀스택 개발자 최재용(jaeyonging)의 개발 블로그입니다. React, TypeScript, Node.js 등 웹 개발 경험과 직접 만든 사이트, 프로젝트 기록을 공유합니다.
홈페이지 한 번 여는 데 19.7MB를 내려받고 있었다
19.7MB를 782KB로 줄인 기록
CSR, SSR, SSG, ISR, 스트리밍, RSC를 정리하고 내가 고른 건 반쪽짜리 SSR이었다
렌더링 방식 7가지 비교와 내가 실제로 고른 기준
react-query v3를 TanStack Query v5로 올렸더니 useErrorBoundary가 사라져 있었다
메이저 업글이 바꾼 것 — 그리고 왜 그렇게 바꿨나
TypeScript 컴파일러가 Go로 다시 쓰여서 타입 체크가 10배 빨라졌다
tsc는 왜 느렸나, Go로 옮기니 왜 빨라졌나
자바스크립트 Date 때문에 매번 하루씩 어긋나던 걸 Node 26 Temporal로 갈아탔다
Date는 왜 그렇게 불편했나, Temporal은 뭘 고쳤나
React 19로 올리면서 forwardRef랑 작별하고, 메타태그를 컴포넌트에서 박았다
React 19가 바꾼 것 — ref, Actions, 그리고 네이티브 메타태그
Vite를 4에서 8로 올렸더니 빌드 번들러가 통째로 Rust로 바뀌어 있었다
Rolldown은 왜 빠른가 — 번들러 두 개를 Rust 하나로
React로 구현했더니 카톡에 링크 미리보기가 다 똑같이 떴다
SSR 없이 SPA 글에 OG 썸네일·메타 붙이기
새로고침하면 로그인이 풀리던 문제를 Zustand persist로 해결했다
전역 상태를 localStorage에 영속시키기
즐겨찾기를 Cookie로 저장했다가 localStorage로 옮긴 이유
만료 때문에 사라지던 즐겨찾기
Socket.IO로 실시간 채팅이랑 시세, 접속자 수를 한 번에 처리했다
코인 사이트의 실시간 통신 구조
실시간 모니터링 대시보드를 폴링 대신 SSE로 만들었다
Server-Sent Events로 서버 메트릭 실시간 전송
예전에 SHA-256으로 저장한 비밀번호를 로그인할 때마다 bcrypt로 자동 변환했다
서비스 끊김 없이 비번 해시 마이그레이션
mysql2로 바꿨더니 평점이 갑자기 깨졌다 — DECIMAL이 문자열로 오는 함정
toFixed가 안 먹던 이유
요청마다 DB 연결을 새로 맺던 코드를 커넥션 풀로 갈아치웠다
createConnection 콜백에서 mysql2 풀로
로컬에선 되던 삭제가 서버에선 405를 뱉었다
배포 환경에서 만난 405 에러 해결기
git push 하나로 서버가 알아서 빌드하고 배포하게 만들었다
Webhook으로 자동 배포 파이프라인 구축
한 대의 서버에 8개 서비스를 PM2랑 Apache 리버스 프록시로 돌리고 있다
포트 하나씩 나눠주고 도메인으로 묶기
fail2ban이랑 UFW를 직접 파싱해서 서버 보안 대시보드를 만들어봤다
리눅스 보안 정보를 긁어와 대시보드로
React와 iframe 사이 postMessage 통신을 실제로 구현해본 이야기
iframe에서 react로 메세지 보내기
PHP에서 React → 그리고 Express로, 한 번에 못 바꾸는 현실 속 점진적 전환기 (2탄)
마이그레이션 이야기 2탄
PHP + HTML에서 React + Express로 갈아탄 이유와 과정
마이그레이션 이야기
React 프로젝트에서 API 에러 처리, ApiErrorBoundary로 정리해봤다
Error boundary를 사용한 에러잡기