2026.05.20E·100React의 Signal 기반 상태 관리 도입: Zustand를 넘어선 상태 전파 최적화
리액트의 전통적인 가상 DOM 리렌더링 한계를 넘어, 세밀한 값 변화 추적(Fine-grained Reactivity)을 통해 컴포넌트 단위 리렌더링 없이 UI를 초고속 업데이트하는 Signal 기반 상태 관리의 원리와 실무 적용 가이드.
ReactState ManagementSignal
→2026.04.06E·89React 19 Actions: Form 처리와 Pending 상태 관리의 정석
React 19에 추가된 Actions 기능을 보며 그동안 지저분하게 관리하던 비동기 Form 전송과 로딩 상태를 어떻게 깔끔하게 바꿀 수 있는지, 그리고 왜 이렇게 변화했는지에 대한 나의 이해와 실무 적용기.
ReactReact 19Actions
→2026.03.14E·85Vercel AI SDK: Next.js에서 스트리밍 AI 채팅 만들기
Vercel AI SDK를 써서 Next.js에서 스트리밍 AI 채팅을 만드는 방법을 정리했다. useChat 훅, Server Actions, 프로바이더 전환, 도구 통합까지 실제 코드로 한 번에 설명한다.
Vercel AI SDKNext.jsStreaming
→2026.03.13M·10AI Agent 패턴: Tool Use, ReAct, Chain of Thought
AI Agent를 만들 때 반복적으로 등장하는 핵심 패턴 세 가지—Tool Use, ReAct, Chain of Thought—를 실제 TypeScript 코드와 함께 정리했다. 이 패턴을 이해하면 Agent 설계가 훨씬 명확해진다.
AI AgentTool UseReAct
→2026.03.08U·16XState로 복잡한 UI 상태 길들이기: if문 20개에서 상태 머신으로
결제 플로우의 상태를 if문과 boolean 플래그로 관리하다 버그 지옥에 빠졌다. XState의 상태 머신으로 불가능한 상태를 원천 차단한 경험.
XStateState MachineReact
→2026.03.04A·05Clean Architecture 실전: 프론트엔드에서의 레이어 분리
Uncle Bob의 Clean Architecture를 프론트엔드에 그대로 적용하면 과도한 복잡도가 생긴다. 실전에서 통하는 수준으로 다듬은 프론트엔드 레이어 분리 전략을 정리했다.
Clean ArchitectureFrontend ArchitectureDesign Patterns
→2026.02.28E·79MSW(Mock Service Worker): API 모킹의 표준
테스트에서 fetch를 직접 모킹하거나, axios를 vi.mock()으로 교체하다가 실제 API와 차이가 생겨 고생한 적 있다. MSW는 네트워크 레벨에서 요청을 인터셉트해서 그런 문제를 근본적으로 해결한다. 설정부터 Vitest, Storybook 통합까지 정리했다.
MSWAPI MockingTesting
→2026.02.25T·05Vitest + Testing Library: 테스트 코드를 처음 짰다
프론트엔드 테스트를 처음 도입하면서 겪은 시행착오. Vitest와 Testing Library 조합으로 React 컴포넌트를 테스트하는 실전 패턴을 정리했다.
VitestTesting LibraryReact
→2026.02.24E·78HTML5 드래그 앤 드롭이 웨일에서 안 된다: dnd-kit으로 해결한 이야기
HTML5 Drag and Drop API로 만든 칸반 보드가 네이버 웨일에서만 동작하지 않았다. 브라우저 제스처가 네이티브 드래그 이벤트를 가로채는 문제, dnd-kit의 Pointer Events 기반 아키텍처로 해결했다.
Reactdnd-kitDrag and Drop
→2026.02.19E·73Zustand 심화: 전역 상태 관리의 실제 패턴
Redux가 너무 복잡해서 Zustand로 바꿨는데, 보일러플레이트가 90% 줄었다. 근데 제대로 쓰려면 알아야 할 패턴이 있었다.
ZustandState ManagementReact
→2026.02.18E·72Streaming SSR: 점진적 페이지 렌더링으로 체감 속도 개선
SSR 페이지가 데이터 로딩 때문에 3초간 빈 화면을 보여주고 있었다. Streaming SSR로 준비된 부분부터 먼저 보여주니 체감 속도가 극적으로 개선됐다.
Streaming SSRReactNext.js
→2026.02.17E·71Server Actions: 폼 처리의 새로운 패러다임
API 라우트 만들고, fetch 호출하고, 로딩 상태 관리하고... 폼 하나 처리하는 데 너무 많은 코드가 필요했는데, Server Actions로 획기적으로 줄었다.
Server ActionsNext.jsForms
→2026.02.16E·70React Server Components 심화: 직렬화 규칙과 실제 패턴
Server Component에서 함수를 props로 전달했더니 에러가 났다. 직렬화 경계를 이해하고 나니 RSC의 진짜 패턴이 보였다.
ReactServer ComponentsRSC
→2026.02.07E·65Lazy Loading과 Code Splitting: 초기 로딩 속도 절반 줄이기
번들 크기가 2MB를 넘어가면서 초기 로딩이 5초나 걸렸다. Lazy Loading과 Code Splitting으로 필요한 코드만 불러오니 2초로 줄었다.
PerformanceLazy LoadingCode Splitting
→2025.12.31E·45React DevTools 활용
React 앱이 느린 이유를 찾지 못해 코드만 뒤지고 있었는데, React DevTools의 Profiler와 Components 탭이 범인을 바로 찾아줬다.
ReactDevToolsPerformance
→2025.12.28E·42디바운스와 스로틀 적용
검색창에 글자 하나 칠 때마다 API 콜이 날아가고, 스크롤할 때마다 이벤트가 폭주하는 문제를 디바운스와 스로틀로 해결한 이야기.
JavaScriptPerformanceDebounce
→2025.12.26E·40앱이 자꾸 흰 화면으로 죽어요 (Error Boundary의 구원)
컴포넌트 하나에서 에러가 났는데 전체 페이지가 흰색이 됩니다. `react-error-boundary`로 에러를 격리하고, 우아한 폴백 UI를 보여주는 방법.
ReactError HandlingSuspense
→2025.12.24E·38초기 로딩 속도 0.5초 빨라지면 매출이 10% 오른다 (번들 사이즈 다이어트)
기능 추가할 때마다 늘어나는 번들 사이즈, 그대로 두면 사용자는 떠납니다. Code Splitting, Tree Shaking, Dynamic Import로 JS 다이어트하는 실제 기법.
PerformanceOptimizationWebpack
→2025.12.24E·37컴포넌트가 500줄이 넘어가서 Custom Hook으로 도망쳤습니다
`useEffect`와 `useState`로 범벅된 비대해진 컴포넌트. Custom Hook으로 로직을 분리하여 UI와 비즈니스 로직을 깔끔하게 나누는 실제 리팩토링 가이드.
ReactRefactoringCustom Hooks
→2025.12.23E·36useMemo를 떡칠하면 앱이 느려지는 이유 (최적화의 함정)
습관적으로 모든 변수에 `useMemo`를 감싸고 있나요? 그게 오히려 성능을 망치고 있습니다. 메모이제이션 비용과 올바른 최적화 타이밍.
ReactPerformanceOptimization
→2025.12.21E·34Context API 하나에 다 때려 넣었다가 지옥을 봤습니다
전역 상태 관리를 위해 Redux 대신 Context API를 선택했습니다. 하지만 `UserContext`에 모든 정보를 담자마자 앱 전체가 리렌더링되기 시작했습니다. Context 분리(Splitting) 전략.
ReactPerformanceContext API
→2025.12.18E·32무한 스크롤(Infinite Scroll), scroll 이벤트로 짰다가 혼났습니다
`window.addEventListener('scroll')`로 무한 스크롤을 구현하면 성능이 박살 납니다. Intersection Observer API로 리팩토링하여 CPU 사용량을 90% 줄이는 방법.
ReactPerformanceInfinite Scroll
→2025.10.30U·13내 코드가 스파게티가 된 이유: Prop Drilling 지옥 탈출기
React 개발 초기, 데이터를 5단계 깊이로 전달하다가 멘붕에 빠진 경험을 공유합니다. Prop Drilling이 왜 유지보수의 적인지, 그리고 Context API, Composition(합성), Zustand를 사용해 이 지옥에서 우아하게 탈출하는 3가지 실제 패턴을 정리합니다.
ReactProp DrillingContext API
→2025.10.21E·17useRef로 DOM 조작하기: 리액트 탈출구의 올바른 사용법
React에서 DOM에 직접 접근해야 할 때 useRef를 사용하는 방법과 주의사항, 그리고 forwardRef와 useImperativeHandle을 이용한 고급 패턴까지 완벽하게 정리했습니다.
ReactuseRefDOM
→2025.10.15E·15useImperativeHandle: 자식 컴포넌트의 함수를 부모에서 호출하기 (feat. forwardRef)
React의 데이터 흐름은 단방향(부모->자식)이지만, 가끔은 거꾸로 명령을 내려야 할 때가 있습니다. useImperativeHandle과 forwardRef를 사용해 캡슐화를 유지하면서 자식의 함수를 호출하는 법을 정리해봤습니다.
ReactuseImperativeHandleRefs
→2025.10.05E·13언마운트된 컴포넌트에서 setState 호출 경고
컴포넌트가 사라진 후 setState를 호출해서 생기는 메모리 누수 경고 해결
ReactMemory LeaksCleanup
→2025.09.25E·12Props로 받은 객체가 undefined일 때
부모에서 전달한 props가 undefined로 나와서 앱이 크래시되는 문제 해결
ReactPropsTypeScript
→2025.09.20E·11오래된 클로저(Stale Closure) 문제
React에서 클로저가 오래된 값을 참조해서 생긴 버그와 해결 방법
ReactJavaScriptClosures
→2025.09.15E·10useEffect 무한 루프 탈출기
useEffect 의존성 배열 때문에 무한 루프에 빠졌던 경험과 해결 방법
ReactuseEffectHooks
→2025.09.11U·11검색창에 'Vue'를 쳤는데 'React'가 나왔다 (Race Condition)
비동기 통신의 함정, 경쟁 상태(Race Condition)를 해결하는 과정을 담았습니다. 플래그 변수부터 AbortController까지, 탭 전환 시 발생하는 버그까지 잡는 법.
ReactNetworkDebugging
→2025.09.10U·10setState가 즉시 반영 안 되는 이유 (React Batching)
React의 setState가 비동기로 동작해서 겪었던 삽질과 해결 과정. 사학과 출신 창업자가 겪은 React 상태 관리의 미스터리를 풉니다.
ReactJavaScriptState Management
→2025.09.08U·09내 코드가 서버에서 실행된 줄도 몰랐다 (ReferenceError: window is not defined)
React에서는 잘 돌아가던 코드가 Next.js로 옮기자마자 'window is not defined' 에러를 뿜으며 폭발했습니다. Next.js의 SSR/Hydration 원리를 통해 이 에러가 발생하는 근본적인 이유를 파헤치고, useEffect, typeof 체크, Dynamic Import 등 3가지 확실한 해결책을 제시합니다.
Next.jsSSRReact
→2025.09.07U·08내 서버 컴포넌트가 오염됐다 (Next.js Composition 패턴)
서버 컴포넌트를 클라이언트 컴포넌트 안에 import 했더니, DB 연결이 끊기고 에러가 폭발했습니다. Next.js App Router의 핵심인 'Composition Pattern'을 구멍 뚫린 도넛에 비유해 설명하고, Context Provider를 올바르게 분리하는 방법을 정리해봤습니다.
Next.jsApp RouterReact
→2025.09.06U·07"use client"를 도대체 어디에 써야 할까? (Next.js 13+ 가이드)
Next.js 13 App Router를 처음 쓸 때 가장 많이 하는 실수인 'use client 남발'을 막는 방법을 소개합니다. 서버 컴포넌트와 클라이언트 컴포넌트의 경계(Boundary)를 명확히 이해하고, 성능을 지키면서 인터랙션을 구현하는 실제 패턴을 다룹니다.
Next.jsReactServer Components
→2025.09.05U·06내 회원가입 코드는 50% 확률로 실패했다 (Async/Await의 함정)
회원가입 후 프로필 이미지를 올리는 간단한 로직이었습니다. 그런데 왜 가끔 'User Not Found' 에러가 뜰까요? 자바스크립트의 비동기 처리와 Promise Waterfall 문제를 해결한 과정을 공유합니다.
JavaScriptAsyncReact
→2025.08.30U·05당신의 앱이 고장 난 것처럼 보이는 이유: 로딩과 에러 처리의 미학
사용자가 '앱이 느리다', '고장 났다'고 느끼는 진짜 이유는 API 속도가 아니라 불친절한 UI 때문입니다. 덜덜거리며 깜빡이는 화면 대신 스켈레톤 UI를 도입하고, alert() 창 대신 우아한 에러 처리를 구현하여 UX를 개선한 경험을 공유합니다.
UXReactFrontend
→2025.08.27U·04키보드 입력이 딴 데로 튄다? React key='index'의 저주
React 콘솔에 뜨는 'unique key prop' 경고, 귀찮아서 index로 때우셨나요? 그 사소한 습관이 입력 폼 데이터를 뒤죽박죽으로 만들고 사용자를 미치게 만듭니다. Virtual DOM의 동작 원리와 함께 왜 index를 key로 쓰면 안 되는지, 제 '삽질' 경험을 통해 파헤칩니다.
ReactFrontendDebugging
→2025.08.25W·01로그인 풀렸다고 욕먹고 배운 JWT 토큰 관리
서비스 런칭 일주일 만에 '작업하던 거 다 날아갔어요!'라는 항의 메일을 받았습니다. 원인은 JWT 토큰 만료. 보안과 편의성 사이에서 줄타기하며 배운 Refresh Token 전략, Axios Interceptor 구현, 그리고 보안 사고를 막기 위한 저장소 선택 기준을 공유합니다.
JWTAuthenticationSecurity
→2025.08.21E·09내 코드가 화면에 안 바뀐다: HMR 고장 수리기
개발 중에 코드를 수정했는데 브라우저가 반응이 없나요? 새로고침을 백만 번 하다가 지쳐서 찾아낸 HMR(Hot Module Replacement)의 원리와 고장 원인, 그리고 해결 방법을 '노가다 개발자'의 시선으로 정리했습니다.
HMRViteReact
→2025.08.20U·02Next.js 렌더링 완전정복: CSR, SSR, SSG, ISR, 그리고 RSC
싱글 페이지 애플리케이션(SPA)의 SEO 문제를 해결하기 위해 등장한 SSR. 그리고 정적 생성(SSG)과 점진적 재생성(ISR)의 진화. 이제는 서버 컴포넌트(RSC) 시대.
CSWebNextJS
→2025.08.16E·05부모가 자식의 DOM을 만지고 싶을 때: forwardRef와 useImperativeHandle 완전 정복
React에서 자식 컴포넌트에 ref를 전달하는 방법이 왜 그렇게 복잡할까요? props로 ref를 전달하려다 실패한 경험부터, forwardRef를 사용하여 우아하게 DOM에 접근하는 법, useImperativeHandle을 통해 필요한 메서드만 노출하는 캡슐화 패턴, 그리고 TypeScript 제네릭과 함께 사용하는 고급 기법까지 상세히 다뤄봤습니다.
ReactforwardRefRefs
→2025.08.15E·04폼(Form) 입력이 거북이처럼 느릴 때: 리렌더링 지옥 탈출기
대용량 폼에서 입력 지연을 해결하는 디바운싱과 최적화 기법
ReactFormsPerformance
→2025.08.15U·01React Virtual DOM: 왜 코드를 짜면 화면이 그려질까?
리액트가 혁신이었던 이유. 진짜 DOM 조작이 느린 이유(Reflow/Repaint)와 Virtual DOM의 '더블 버퍼링' 전략, 그리고 React Fiber가 가져온 혁명.
CSFrontendReact
→2025.08.02E·02if (loading) return 'Loading...' 이제 그만 쓰고 싶다 (Suspense & ErrorBoundary)
컴포넌트마다 지저분하게 널려있는 로딩/에러 처리를 우아하게 삭제하는 법. 선언적 UI가 가져다주는 평화.
ReactSuspenseErrorBoundary
→2025.07.14Y·05내 쿠키를 훔쳐간 범인은 게시판 댓글이었다 (XSS 방어 가이드)
게시판에 달린 댓글 하나 때문에 관리자 계정이 탈취당했습니다. XSS(Cross-Site Scripting)의 3가지 유형(Stored, Reflected, DOM)과 React/Next.js 환경에서의 구체적인 방어법(HTML 이스케이프, CSP, 쿠키 보안)을 예제와 함께 깊이 있게 다룹니다.
SecurityXSSWeb Development
→2025.06.23F·147상태 관리: Props Drilling 지옥 탈출
React의 영원한 숙제, 상태 관리. 할아버지 컴포넌트에서 손자 컴포넌트로 데이터를 줄 때 왜 전역 상태(Redux, Zustand)를 써야 할까?
CSWebFrontend
→2025.06.20F·144SPA vs MPA: 새로고침과의 전쟁
웹이 앱처럼 부드러워진 비결(SPA)과 옛날 방식(MPA)의 장단점. 그리고 이 둘을 합친 넥스트(Next.js)의 등장.
CSWebSPA
→2025.06.19F·143Virtual DOM: 리액트가 빠른 진짜 이유
진짜 집을 부수고 다시 짓는 건 비쌉니다. 설계도(가상돔)에서 미리 그려보고 바뀐 부분만 공사하는 '똑똑한 리모델링'의 기술.
CSWebFrontend
→2025.05.31U·05Custom Hooks: 잘못 만든 추상화가 빚을 만든다 (The Art of Abstraction)
Custom Hook은 React의 가장 강력한 무기지만, 잘못 사용하면 오히려 독이 됩니다. 단순히 로직을 옮겨 적는 것을 넘어, '상태(State)'와 '이펙트(Effect)'를 분리하고 재사용 가능한 'Headless UI' 패턴을 설계하는 방법을 심도 있게 다룹니다.
ReactCustom HooksClean Code
→2025.05.30U·04CSS Modules: 클래스 이름 충돌에서 해방되기 (Why your styles are broken)
React나 Next.js 프로젝트에서 `.module.css`를 사용할 때 클래스 이름이 해시값으로 바뀌어 스타일이 적용되지 않는 문제, 겪어보셨나요? CSS Modules의 작동 원리인 'Scoping' 개념부터 `composes`를 활용한 스타일 상속, 그리고 TypeScript와 함께 쓸 때의 팁까지 완벽하게 정리했습니다.
CSSReactFrontend
→2025.05.28U·03React Context API: 왜 모든 컴포넌트가 다시 렌더링될까? (최적화 가이드)
Context API를 사용할 때마다 앱이 느려지는 경험, 해보셨나요? Provider의 Value가 바뀔 때 모든 하위 컴포넌트가 리렌더링되는 근본적인 이유인 '객체 참조' 문제와 React reconciler의 작동 방식을 분석합니다. 이를 막기 위한 3가지 솔루션(State 분리, Memoization, Dispatch 분리)과 Zustand/Recoil 같은 외부 라이브러리로의 마이그레이션 기준을 명확히 제시합니다.
ReactPerformanceFrontend
→2025.05.27U·02React 조건부 렌더링의 함정: 화면에 숫자 '0'이 왜 나오죠? (&& 연산자와 Falsy의 배신)
React에서 `count && <Component />`를 썼을 때 의도치 않게 숫자 0이 화면에 출력되는 현상, 다들 겪어보셨죠? JavaScript의 단락 평가(Short-Circuit Evaluation)와 Falsy 값의 특성 때문에 발생하는 이 버그의 원인을 심층 분석하고, 3가지 확실한 해결책(비교 연산자, 이중 부정, 삼항 연산자)과 React Native에서의 크래시 위험성까지 상세히 다룹니다.
ReactJavaScriptFrontend
→2025.05.25U·01Next.js: Client Component는 async일 수 없다? (Error: async/await is not yet supported in Client Components)
Next.js 13 이상 App Router 환경에서 가장 빈번하게 마주치는 에러 중 하나입니다. 클라이언트 컴포넌트('use client')에 async 키워드를 붙이면 왜 에러가 발생하는지, React의 렌더링 메커니즘 관점에서 깊이 있게 분석하고, 이를 해결하기 위한 3가지 핵심 디자인 패턴(Container-Presenter, useEffect, React Query)을 상세한 코드 예제와 함께 정리해봤습니다.
Next.jsReactFrontend
→2025.05.23W·05부모가 렌더링되면 자식도 렌더링된다? React 렌더링의 진실과 오해
React 성능 최적화의 첫걸음은 렌더링 규칙을 정확히 이해하는 것입니다. 부모 컴포넌트가 업데이트될 때 자식 컴포넌트의 불필요한 렌더링을 막는 React.memo, useMemo, Context API 최적화, 그리고 React 19 Compiler의 미래를 정리합니다.
ReactPerformanceFrontend
→2025.05.19W·03SPA 배포 후 새로고침하면 404가 뜨는 이유 (Nginx, S3, Netlify 설정법)
React나 Vue 프로젝트를 빌드해서 배포했는데, 홈 화면은 잘 나오지만 새로고침만 하면 'Page Not Found'가 뜨나요? CSR의 원리와 서버 설정(Nginx, Apache, S3)을 통해 이를 해결하는 완벽 가이드.
WebReactDeployment
→