2026.02.25T·04Vitest 심화: 모킹, 스냅샷, 커버리지 전략
vi.mock()과 vi.spyOn()의 차이를 몰라 밤새 디버깅한 적이 있다. 스냅샷 테스트가 언제 독이 되고 약이 되는지, 커버리지 숫자가 왜 거짓말을 하는지 — 실전에서 배운 Vitest 심화 전략을 풀어본다.
VitestTestingMocking
→2026.02.21E·75정규표현식(RegExp) 실제: 개발자의 만능 텍스트 도구
정규표현식을 외계어처럼 느꼈는데, 실제로 자주 쓰는 패턴 20개만 익히니 텍스트 처리가 한 줄로 끝났다.
RegExpJavaScriptText Processing
→2026.02.09E·67Web Worker: 무거운 연산을 메인 스레드 밖으로
CSV 파일을 파싱하는 동안 UI가 완전히 멈췄다. Web Worker로 무거운 연산을 분리하니 UI가 부드럽게 유지됐다.
Web WorkerPerformanceJavaScript
→2026.01.18E·50Bun: Node.js를 대체할 수 있을까?
npm install이 3분 걸리던 프로젝트가 bun install로 10초. 빠르다는 건 알겠는데, 실제로 프로덕션에 쓸 수 있을까?
BunNode.jsRuntime
→2026.01.03E·48메모리 누수 찾기
앱을 오래 쓰면 느려지는 이유가 메모리 누수였다. Chrome DevTools Memory 탭으로 범인을 찾는 과정을 정리했다.
MemoryPerformanceDevTools
→2026.01.01E·46에러 스택 트레이스 읽기
빨간 에러 메시지가 뜨면 당황해서 그냥 구글에 복붙했는데, 스택 트레이스를 읽는 법을 알고 나니 디버깅 속도가 10배 빨라졌다.
DebuggingJavaScriptError Handling
→2025.12.29E·43console.log 대신 debugger 활용
console.log 100개 찍어가며 디버깅하던 시절을 끝내고, 브라우저 debugger와 breakpoint로 효율적으로 버그를 잡는 방법.
DebuggingDevToolsJavaScript
→2025.12.28E·42디바운스와 스로틀 적용
검색창에 글자 하나 칠 때마다 API 콜이 날아가고, 스크롤할 때마다 이벤트가 폭주하는 문제를 디바운스와 스로틀로 해결한 이야기.
JavaScriptPerformanceDebounce
→2025.11.05G·03CJS 라이브러리 호환 문제 해결하기
"Named export not found" 에러의 원인인 CommonJS와 ES Modules의 충돌을 파헤칩니다. package.json의 exports 필드부터 transpilePackages 설정까지 완벽 가이드.
Next.jsJavaScriptCommonJS
→2025.11.04E·19절대 경로 import가 안 될 때: 원인부터 모노레포 설정까지
TypeScript/JavaScript에서 절대 경로 import 설정이 안 될 때의 원인을 '지도와 택시 기사' 비유로 설명합니다. CJS vs ESM 역사적 배경과 모노레포 설정, 팀 컨벤션까지 총정리.
TypeScriptJavaScriptImport
→2025.09.20E·11오래된 클로저(Stale Closure) 문제
React에서 클로저가 오래된 값을 참조해서 생긴 버그와 해결 방법
ReactJavaScriptClosures
→2025.09.10U·10setState가 즉시 반영 안 되는 이유 (React Batching)
React의 setState가 비동기로 동작해서 겪었던 삽질과 해결 과정. 사학과 출신 창업자가 겪은 React 상태 관리의 미스터리를 풉니다.
ReactJavaScriptState Management
→2025.09.05U·06내 회원가입 코드는 50% 확률로 실패했다 (Async/Await의 함정)
회원가입 후 프로필 이미지를 올리는 간단한 로직이었습니다. 그런데 왜 가끔 'User Not Found' 에러가 뜰까요? 자바스크립트의 비동기 처리와 Promise Waterfall 문제를 해결한 과정을 공유합니다.
JavaScriptAsyncReact
→2025.09.01W·07번들러: Webpack, Rollup, Vite가 하는 일의 본질 (대규모 업데이트)
수천 개의 JS 파일을 하나로 합치는 마법. Tree Shaking, HMR, Code Splitting의 원리와 차세대 번들러(Vite, Turbopack)의 등장 배경.
WebJavaScriptTooling
→2025.08.27U·04키보드 입력이 딴 데로 튄다? React key='index'의 저주
React 콘솔에 뜨는 'unique key prop' 경고, 귀찮아서 index로 때우셨나요? 그 사소한 습관이 입력 폼 데이터를 뒤죽박죽으로 만들고 사용자를 미치게 만듭니다. Virtual DOM의 동작 원리와 함께 왜 index를 key로 쓰면 안 되는지, 제 '삽질' 경험을 통해 파헤칩니다.
ReactFrontendDebugging
→2025.06.18F·142이벤트 버블링과 캡처링
버튼을 눌렀는데 부모 DIV까지 클릭되는 현상. 이벤트는 물방울처럼 위로 올라갑니다(Bubbling). 반대로 내려오는 캡처링(Capturing)도 있죠.
CSWebFrontend
→2025.05.27U·02React 조건부 렌더링의 함정: 화면에 숫자 '0'이 왜 나오죠? (&& 연산자와 Falsy의 배신)
React에서 `count && <Component />`를 썼을 때 의도치 않게 숫자 0이 화면에 출력되는 현상, 다들 겪어보셨죠? JavaScript의 단락 평가(Short-Circuit Evaluation)와 Falsy 값의 특성 때문에 발생하는 이 버그의 원인을 심층 분석하고, 3가지 확실한 해결책(비교 연산자, 이중 부정, 삼항 연산자)과 React Native에서의 크래시 위험성까지 상세히 다룹니다.
ReactJavaScriptFrontend
→2025.05.23W·05부모가 렌더링되면 자식도 렌더링된다? React 렌더링의 진실과 오해
React 성능 최적화의 첫걸음은 렌더링 규칙을 정확히 이해하는 것입니다. 부모 컴포넌트가 업데이트될 때 자식 컴포넌트의 불필요한 렌더링을 막는 React.memo, useMemo, Context API 최적화, 그리고 React 19 Compiler의 미래를 정리합니다.
ReactPerformanceFrontend
→2025.05.20W·04클로저(Closure): 자바스크립트의 가장 강력한 무기 (대규모 업데이트)
함수가 선언될 때의 렉시컬 환경(Lexical Environment)을 기억하는 현상. React Hooks의 원리이자 정보 은닉의 핵심 키.
JavaScriptCSWeb
→2025.04.01F·65호이스팅(Hoisting): 자바스크립트의 특이한 동작
변수 선언이 코드 꼭대기로 끌어올려진 것처럼 보이는 마법. 성격 급한 자바스크립트 엔진의 '미리 읽기' 습관.
CSLanguageJavaScript
→2025.03.28F·62강타입 vs 약타입: 자바스크립트가 욕먹는 이유
사과 + 3 = ? 여기서 에러를 내면 강타입, '사과3'을 만들면 약타입입니다. [] + []가 0이 되는 마법과 TypeScript가 구원투수인 이유.
CSLanguageTypeSystem
→