<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>hyunbell.dev</title><description>일하며 배운 것과, 좋아하는 것들에 대해 씁니다.</description><link>https://hyunbell.dev/</link><language>ko-kr</language><managingEditor>hyunBell</managingEditor><item><title>Next.js 16.3 Instant Navigation - Deep Dive 1</title><link>https://hyunbell.dev/posts/nextjs-16-3-instant-navigation-deep-dive-1/</link><guid isPermaLink="true">https://hyunbell.dev/posts/nextjs-16-3-instant-navigation-deep-dive-1/</guid><description>클릭했는데 왜 아무 일도 안 일어나는가</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><category>개발</category><category>nextjs</category><category>react</category><category>app-router</category><category>ppr</category><category>렌더링</category></item><item><title>List의 공개 범위는 왜 타입만으로 지킬 수 없었을까</title><link>https://hyunbell.dev/posts/list-exports-boundary-and-bundle/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-exports-boundary-and-bundle/</guid><description>exports로 패키지의 공개 경로를 설계하고, JavaScript와 CSS가 줄어드는 단위를 가르기</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>설계</category><category>번들</category><category>css</category></item><item><title>퇴사 회고</title><link>https://hyunbell.dev/posts/from-lead-back-to-ic/</link><guid isPermaLink="true">https://hyunbell.dev/posts/from-lead-back-to-ic/</guid><description>좋은 개발자가 되는 방식으로 리드를 하다, 다시 프론트엔드 IC를 선택하기까지</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><category>회고</category><category>퇴사</category><category>리더십</category><category>커리어</category><category>팀문화</category></item><item><title>같은 List를 만들었는데 왜 플랫폼 구현은 달라야 했을까</title><link>https://hyunbell.dev/posts/list-web-semantic-contract/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-web-semantic-contract/</guid><description>세 플랫폼이 공유할 의미와 각 플랫폼이 소유할 실현을 나누기</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>접근성</category><category>react</category><category>typescript</category><category>설계</category></item><item><title>List를 나눈 것은 모양이 아니라 &apos;상태의 소유권&apos;이었다</title><link>https://hyunbell.dev/posts/list-selection-ownership/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-selection-ownership/</guid><description>동일한 화면 구조의 목록을 왜 두 개의 Recipe로 나누어야 했을까</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>접근성</category><category>설계</category></item><item><title>ListRow에서 List로 올라와도 새 Recipe는 생기지 않았다</title><link>https://hyunbell.dev/posts/list-collection-anatomy/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-collection-anatomy/</guid><description>목록의 공간을 제목과 본문으로 나누고 그 위에 구분선과 배경 두 축을 세우기까지</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category><category>css</category></item><item><title>ListRow마다 유효하던 코드가 List 전체에서는 어긋났다</title><link>https://hyunbell.dev/posts/list-rules-beyond-a-single-row/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-rules-beyond-a-single-row/</guid><description>ListRow와 List의 책임 경계를 다시 긋고 무엇을 List가 소유할지 가르기</description><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category></item><item><title>ListRow에 열 수 있었던 prop을 왜 열지 않았을까</title><link>https://hyunbell.dev/posts/list-row-props-left-out/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-row-props-left-out/</guid><description>이 결정을 누가, 어디서, 몇 번 하는지로 갈랐다</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category><category>css</category></item><item><title>AI가 사용할 디자인 시스템은 무엇이 달라야 할까</title><link>https://hyunbell.dev/posts/design-system-for-ai-agents/</link><guid isPermaLink="true">https://hyunbell.dev/posts/design-system-for-ai-agents/</guid><description>규칙을 문서에 적는 것과 시스템에 심는 것의 차이</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>ai</category><category>아키텍처</category><category>typescript</category><category>설계</category></item><item><title>ListRow의 모양과 동작을 왜 하나의 계약으로 묶었을까</title><link>https://hyunbell.dev/posts/list-shape-and-behavior-contract/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-shape-and-behavior-contract/</guid><description>화살표와 버튼이 동작 영역, DOM, 접근성까지 결정한 과정</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>접근성</category><category>dom</category><category>설계</category></item><item><title>ReactNode 슬롯은 ListRow에 들어올 컴포넌트를 제한하지 못했다</title><link>https://hyunbell.dev/posts/list-descriptor-over-jsx-slot/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-descriptor-over-jsx-slot/</guid><description>컴포넌트의 정체성을 검사하는 대신 정해진 데이터만 받기까지</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category></item><item><title>List API의 유연성은 어디에 두어야 했을까</title><link>https://hyunbell.dev/posts/list-api-compile-time-guardrails/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-api-compile-time-guardrails/</guid><description>같은 ListRow를 Flat, Compound, Recipe로 만들자 잘하는 일이 갈렸다</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category></item><item><title>List를 화면이 아니라 구조로 나누자 Recipe의 기준이 생겼다</title><link>https://hyunbell.dev/posts/list-anatomy-and-criteria/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-anatomy-and-criteria/</guid><description>화면 사례를 anatomy로 나누고 Recipe와 Variant의 경계를 정한 세 가지 질문</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>typescript</category><category>react</category><category>설계</category></item><item><title>List 디자인 시스템은 왜 자유도를 제한해야 했을까</title><link>https://hyunbell.dev/posts/list-freedom-is-a-cost/</link><guid isPermaLink="true">https://hyunbell.dev/posts/list-freedom-is-a-cost/</guid><description>오픈소스 컴포넌트와 사내 컴포넌트가 다른 답을 고르는 이유</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>개발</category><category>디자인시스템</category><category>react</category><category>설계</category></item><item><title>대출 갈아타기 계산기, 렌더링 전략 분리</title><link>https://hyunbell.dev/posts/loan-calculator-rendering-split/</link><guid isPermaLink="true">https://hyunbell.dev/posts/loan-calculator-rendering-split/</guid><description>미디어쿼리가 나눌 수 없는 축이 있다</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate><category>개발</category><category>nextjs</category><category>ssr</category><category>성능</category><category>fsd</category><category>아키텍처</category></item><item><title>대출 갈아타기 계산기, 리팩토링 회고</title><link>https://hyunbell.dev/posts/loan-calculator-refactoring/</link><guid isPermaLink="true">https://hyunbell.dev/posts/loan-calculator-refactoring/</guid><description>변경 이유가 다르면 층을 나눈다</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><category>개발</category><category>리팩토링</category><category>아키텍처</category><category>fsd</category><category>typescript</category><category>테스트</category></item><item><title>3년 묵은 웹뷰 에러의 범인을 찾아서 (브릿지 재설계)</title><link>https://hyunbell.dev/posts/webview-bridge-java-object-is-gone/</link><guid isPermaLink="true">https://hyunbell.dev/posts/webview-bridge-java-object-is-gone/</guid><description>Java object is gone, 그리고 두 GC 영역 사이</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>개발</category><category>android</category><category>webview</category><category>chromium</category><category>javascript</category><category>디버깅</category></item><item><title>인앱약정 SDK 프로젝트 회고</title><link>https://hyunbell.dev/posts/sdk-project-retrospective/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-project-retrospective/</guid><description>먼저 맡겠다는 사람이 없었던 프로젝트를 끝까지 끌고 간 이유</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>회고</category><category>sdk</category><category>회고</category><category>팀문화</category></item><item><title>AI 시대, 처음 팀 리드를 맡은 1년</title><link>https://hyunbell.dev/posts/first-year-as-team-lead/</link><guid isPermaLink="true">https://hyunbell.dev/posts/first-year-as-team-lead/</guid><description>AI를 들이는 일과, 그 안에서 사람을 지키는 일</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>회고</category><category>리더십</category><category>팀문화</category><category>커리어</category></item><item><title>웹뷰 시스템 폰트 크기 대응, 리뷰에서 설계까지</title><link>https://hyunbell.dev/posts/webview-system-font-scaling/</link><guid isPermaLink="true">https://hyunbell.dev/posts/webview-system-font-scaling/</guid><description>그 플래시는 useLayoutEffect로 막을 수 없었다</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><category>개발</category><category>webview</category><category>react</category><category>css</category><category>렌더링</category><category>android</category></item><item><title>페이지네이션 컴포넌트, 포커스를 잃지 않게 하기</title><link>https://hyunbell.dev/posts/pagination-focus-management/</link><guid isPermaLink="true">https://hyunbell.dev/posts/pagination-focus-management/</guid><description>노드를 지우지 않고 상태만 바꾼다</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>dom</category><category>접근성</category><category>설계</category></item><item><title>페이지네이션 컴포넌트, 헤드리스로 다시 설계하기</title><link>https://hyunbell.dev/posts/pagination-headless-redesign/</link><guid isPermaLink="true">https://hyunbell.dev/posts/pagination-headless-redesign/</guid><description>커스텀 엘리먼트와 compound 구조, 그리고 SSR</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>dom</category><category>ssr</category><category>설계</category></item><item><title>토요일 오후, 서비스 전체가 흰 화면이 되면서 배운 것들</title><link>https://hyunbell.dev/posts/saturday-afternoon-white-screen/</link><guid isPermaLink="true">https://hyunbell.dev/posts/saturday-afternoon-white-screen/</guid><description>장애를 계기로 우리 프론트엔드 인프라를 처음부터 따라가 본 기록</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><category>개발</category><category>인프라</category><category>장애대응</category><category>nextjs</category><category>디버깅</category></item><item><title>페이지네이션 컴포넌트, 모듈 경계부터 그리기</title><link>https://hyunbell.dev/posts/pagination-module-boundaries/</link><guid isPermaLink="true">https://hyunbell.dev/posts/pagination-module-boundaries/</guid><description>라이브러리를 쓰지 않기로 하고 처음부터 설계한 기록</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>아키텍처</category><category>접근성</category><category>설계</category></item><item><title>디자인 시스템을 처음 맡은 리드의 회고</title><link>https://hyunbell.dev/posts/leading-a-design-system/</link><guid isPermaLink="true">https://hyunbell.dev/posts/leading-a-design-system/</guid><description>좌충우돌, 잘 모르는 자리에서 듣고, 묻고, 함께 기준을 만들어간 이야기</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><category>회고</category><category>디자인시스템</category><category>리더십</category><category>팀문화</category></item><item><title>앱 배포 없이 바뀌는 모달 웹뷰를 설계한 이야기</title><link>https://hyunbell.dev/posts/modal-webview-without-app-release/</link><guid isPermaLink="true">https://hyunbell.dev/posts/modal-webview-without-app-release/</guid><description>최초 도입은 앱 배포가 필요했다. 그 이후를 웹 배포만으로 바꾸는 것이 목표였다</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>개발</category><category>webview</category><category>아키텍처</category><category>설계</category><category>nextjs</category><category>성능</category></item><item><title>인앱약정 SDK의 최종 구조 정리</title><link>https://hyunbell.dev/posts/sdk-deploy-dependency-and-final-architecture/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-deploy-dependency-and-final-architecture/</guid><description>아홉 편에서 만든 구조를 한 장에 정리하고, 금융사 30곳으로 가기 위해 남은 배포 문제를 다룬다</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>아키텍처</category><category>설계</category><category>webview</category></item><item><title>웹뷰 라우팅과 뒤로가기 핸들링</title><link>https://hyunbell.dev/posts/sdk-navigation-and-back-handling/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-navigation-and-back-handling/</guid><description>같은 document인가, 새 document인가</description><pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>webview</category><category>react</category><category>설계</category></item><item><title>로딩을 띄웠는데 사용자는 보지 못했다</title><link>https://hyunbell.dev/posts/the-loading-users-never-saw/</link><guid isPermaLink="true">https://hyunbell.dev/posts/the-loading-users-never-saw/</guid><description>소유권, 시점, document 경계, 종료 조건. 원인은 네 갈래였다</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>react</category><category>렌더링</category><category>성능</category></item><item><title>오류의 원인을 볼 수 없는데 화면은 어떻게 책임질 것인가</title><link>https://hyunbell.dev/posts/observing-at-the-boundary-we-control/</link><guid isPermaLink="true">https://hyunbell.dev/posts/observing-at-the-boundary-we-control/</guid><description>금융사가 삼킨 예외의 원인은 볼 수 없다</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>디버깅</category><category>설계</category><category>javascript</category></item><item><title>다음 화면은 누가 정하는가</title><link>https://hyunbell.dev/posts/who-decides-the-next-screen/</link><guid isPermaLink="true">https://hyunbell.dev/posts/who-decides-the-next-screen/</guid><description>화면은 우리가 그리지만, 흐름의 책임은 어디에 둘 것인가</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>설계</category><category>아키텍처</category><category>javascript</category></item><item><title>30개의 금융사를 지원하기 위한 SDK 표준화 설계</title><link>https://hyunbell.dev/posts/sdk-standardization-for-30-partners/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-standardization-for-30-partners/</guid><description>차이를 없애지 않고 관리하는 방법</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>아키텍처</category><category>설계</category><category>리팩토링</category></item><item><title>외부 환경에서 실행되는 SDK를 설계하는 법</title><link>https://hyunbell.dev/posts/sdk-loading-and-deploy-ownership/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-loading-and-deploy-ownership/</guid><description>커맨드 큐, 그리고 해시 파일명의 딜레마</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>javascript</category><category>설계</category><category>성능</category></item><item><title>남의 document 안에서 살아남기</title><link>https://hyunbell.dev/posts/surviving-in-someone-elses-document/</link><guid isPermaLink="true">https://hyunbell.dev/posts/surviving-in-someone-elses-document/</guid><description>15개 금융사 도메인에서 Shadow DOM을 선택하기까지</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>shadow-dom</category><category>css</category><category>설계</category></item><item><title>화면만 그리면 되는 일이라고 생각했다</title><link>https://hyunbell.dev/posts/sdk-first-design-decisions/</link><guid isPermaLink="true">https://hyunbell.dev/posts/sdk-first-design-decisions/</guid><description>금융사 도메인 위에서 시작한 SDK의 첫 번째 설계 결정</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>react</category><category>아키텍처</category><category>설계</category></item><item><title>RSC는 왜 필요했고, CVE-2025-55182는 왜 발생했을까</title><link>https://hyunbell.dev/posts/rsc-and-cve-2025-55182/</link><guid isPermaLink="true">https://hyunbell.dev/posts/rsc-and-cve-2025-55182/</guid><description>Flight 디코더가 프로토타입을 검사하지 않았다</description><pubDate>Sat, 27 Dec 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>rsc</category><category>보안</category><category>nextjs</category></item><item><title>우리는 왜 금융사 웹사이트 안에 SDK를 심었을까</title><link>https://hyunbell.dev/posts/why-we-embedded-an-sdk/</link><guid isPermaLink="true">https://hyunbell.dev/posts/why-we-embedded-an-sdk/</guid><description>남의 페이지에서 우리 서비스의 품질을 보장하는 방법</description><pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate><category>개발</category><category>sdk</category><category>아키텍처</category><category>설계</category><category>javascript</category></item><item><title>대출 갈아타기 계산기, 반응형 웹 설계 회고</title><link>https://hyunbell.dev/posts/loan-calculator-responsive-design/</link><guid isPermaLink="true">https://hyunbell.dev/posts/loan-calculator-responsive-design/</guid><description>프레임, 커밋, 구독, 그리고 상태</description><pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>성능</category><category>애니메이션</category><category>context</category><category>렌더링</category></item><item><title>FSD에서 배럴 파일 사용 가이드</title><link>https://hyunbell.dev/posts/fsd-barrel-file-guide/</link><guid isPermaLink="true">https://hyunbell.dev/posts/fsd-barrel-file-guide/</guid><description>배럴 파일은 FSD에서 Public API 역할을 하지만, 잘못 쓰면 순환 import와 tree shaking 실패를 부른다. 계층별 사용 기준과 성능 함정을 정리했다</description><pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>fsd</category><category>아키텍처</category><category>설계</category><category>성능</category></item><item><title>FSD 아키텍처 소개</title><link>https://hyunbell.dev/posts/fsd-architecture-intro/</link><guid isPermaLink="true">https://hyunbell.dev/posts/fsd-architecture-intro/</guid><description>모노레포 구조의 서비스마다 폴더 구조가 너무 달랐다. 공통 컨벤션이 필요한 상황에서 왜 FSD인가에 대한 이야기</description><pubDate>Sat, 26 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>fsd</category><category>아키텍처</category><category>설계</category></item><item><title>Node.js, require(esm) 공식 지원</title><link>https://hyunbell.dev/posts/nodejs-require-esm/</link><guid isPermaLink="true">https://hyunbell.dev/posts/nodejs-require-esm/</guid><description>CJS와 ESM이 갈라져 있던 15년. top-level await만 없으면 ESM도 동기 평가가 가능하다는 발견이 어떻게 require(esm)로 이어졌는지 — Joyee Cheung의 발표를 보고 정리한 글</description><pubDate>Sat, 26 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>nodejs</category></item><item><title>Vanilla Web: You don&apos;t need that library</title><link>https://hyunbell.dev/posts/vanilla-web-you-dont-need-that-library/</link><guid isPermaLink="true">https://hyunbell.dev/posts/vanilla-web-you-dont-need-that-library/</guid><description>라우팅·상태 관리·템플릿팅·컴포넌트를 라이브러리 없이 브라우저 표준만으로 푸는 방법을 짚은 발표 정리다. 도구를 고르기 전에 그 도구가 가리고 있는 웹 플랫폼을 먼저 보자는 이야기다.</description><pubDate>Sat, 26 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>dom</category><category>설계</category></item><item><title>JavaScript의 미래: JIT를 넘어 AOT 컴파일의 시대로 (feat. Porffor)</title><link>https://hyunbell.dev/posts/javascript-aot-compilation-porffor/</link><guid isPermaLink="true">https://hyunbell.dev/posts/javascript-aot-compilation-porffor/</guid><description>hello world 하나를 위해 100MB짜리 런타임을 들고 다니는 게 당연한가. Porffor가 보여준 AOT 컴파일의 가능성 — 발표 영상을 보고 팀 내 공유용으로 정리한 글</description><pubDate>Wed, 23 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>javascript</category><category>성능</category></item><item><title>Mark Erikson의 “2025년 리액트 커뮤니티 현황” 읽기</title><link>https://hyunbell.dev/posts/react-community-2025-analysis/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-community-2025-analysis/</guid><description>리액트 커뮤니티가 왜 이렇게 갈라졌는지, Vercel 음모론은 사실인지, RSC는 어떤 경로로 만들어졌는지 — Redux 메인테이너의 긴 글을 팀 공유용으로 정리했다</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>rsc</category><category>커뮤니티</category></item><item><title>React useState를 언제 작별해야 할까?</title><link>https://hyunbell.dev/posts/when-to-say-goodbye-to-usestate/</link><guid isPermaLink="true">https://hyunbell.dev/posts/when-to-say-goodbye-to-usestate/</guid><description>useState가 나쁜 게 아니라, 너무 간단해서 복잡한 자리에 잘못 놓인다. 다섯 가지 문제 상황과 각각의 대안을 실무 경험과 함께 정리했다</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>설계</category></item><item><title>Playwright를 활용한 E2E 테스트 작성 가이드</title><link>https://hyunbell.dev/posts/playwright-e2e-testing-guide/</link><guid isPermaLink="true">https://hyunbell.dev/posts/playwright-e2e-testing-guide/</guid><description>팀이 E2E 테스트를 같은 기준으로 쓰게 하려고 정리한 문서. 무엇을 테스트할지부터 선택자·대기·모킹 전략, 빌더 패턴과 Given-When-Then 구조까지</description><pubDate>Thu, 03 Jul 2025 00:00:00 GMT</pubDate><category>개발</category><category>테스트</category><category>playwright</category><category>팀문화</category></item><item><title>Astro Islands Architecture: 성능 중심 웹 개발의 새로운 패러다임</title><link>https://hyunbell.dev/posts/astro-islands-architecture/</link><guid isPermaLink="true">https://hyunbell.dev/posts/astro-islands-architecture/</guid><description>Next.js로 만든 블로그를 Astro로 다시 만들면서 재본 것들 — Islands Architecture, Content Collections 증분 빌드, 그리고 Next.js가 PPR로 향하는 방향까지</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>astro</category><category>nextjs</category><category>렌더링</category><category>성능</category></item><item><title>AI를 동료로서 협업하는 효율적인 방법</title><link>https://hyunbell.dev/posts/collaborating-with-ai-as-a-teammate/</link><guid isPermaLink="true">https://hyunbell.dev/posts/collaborating-with-ai-as-a-teammate/</guid><description>Claude Code의 Plan Mode·CLAUDE.md·메모리·커스텀 명령어부터 TaskMaster·Sequential Thinking·Context7·Figma MCP와 Git Worktree 병렬 작업까지, AI를 동료로 앉히는 작업 환경을 사내 발표용으로 정리했다</description><pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>ai</category><category>팀문화</category></item><item><title>Next.js 미들웨어의 복잡성을 해결하는 파이프라인 라이브러리 개발기</title><link>https://hyunbell.dev/posts/nextjs-middleware-pipeline/</link><guid isPermaLink="true">https://hyunbell.dev/posts/nextjs-middleware-pipeline/</guid><description>인증 체크 하나로 시작한 middleware.ts가 500줄이 됐다. Express의 next() 패턴을 Next.js Edge Runtime에 맞게 다시 만들면서 어댑터 패턴과 fail-open을 고른 기록</description><pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>nextjs</category><category>설계</category><category>typescript</category></item><item><title>리액트 스케줄러 완전 분석: MessageChannel을 선택한 이유</title><link>https://hyunbell.dev/posts/react-scheduler-messagechannel/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-scheduler-messagechannel/</guid><description>동료의 질문에 requestIdleCallback이라고 답했는데 틀렸다. 리액트가 MessageChannel을 고른 이유부터 Lane 우선순위, useEffect가 paint 전에 실행되는 경우까지 소스코드로 따라간 기록</description><pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>javascript</category></item><item><title>React 동시성 렌더링: Fiber가 가능하게 한 혁신</title><link>https://hyunbell.dev/posts/react-concurrent-rendering-fiber/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-concurrent-rendering-fiber/</guid><description>단일 스레드와 동기적 렌더링이 만들던 버벅거림을, Fiber의 중단 가능한 구조와 우선순위 시스템이 어떻게 풀었는지 정리한다</description><pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>성능</category></item><item><title>React Fiber 아키텍처와 Reconciliation 심화 이해</title><link>https://hyunbell.dev/posts/react-fiber-reconciliation-deep-dive/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-fiber-reconciliation-deep-dive/</guid><description>React의 핵심 엔진인 Fiber가 Reconciliation을 어떻게 수행하는지, 그리고 그 이해가 왜 성능 최적화로 이어지는지 살펴본다</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>아키텍처</category></item><item><title>React Server Components: 서버와 클라이언트의 경계를 넘어</title><link>https://hyunbell.dev/posts/react-server-components-boundary/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-server-components-boundary/</guid><description>React의 가장 혁신적인 패러다임 전환인 RSC가 우리가 알던 SSR과 어떻게 다른지 깊이 파헤쳐본다</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>rsc</category><category>ssr</category><category>렌더링</category></item><item><title>React SSR의 진화: Next.js Page Router에서 App Router로의 여정</title><link>https://hyunbell.dev/posts/react-ssr-page-to-app-router/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-ssr-page-to-app-router/</guid><description>왜 Page Router에서는 스트리밍이 안 되고 App Router에서는 될까. renderToString의 동기적 한계부터 renderToPipeableStream, Chunked Transfer Encoding, 선택적 하이드레이션까지 따라간다</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>nextjs</category><category>ssr</category><category>렌더링</category></item><item><title>데이터가 화면에 도달하기까지의 여정: OSI, TCP/UDP, HTTP</title><link>https://hyunbell.dev/posts/how-data-travels-osi-tcp-http/</link><guid isPermaLink="true">https://hyunbell.dev/posts/how-data-travels-osi-tcp-http/</guid><description>브라우저에 주소를 치고 엔터를 누른 뒤 화면에 무언가 그려지기까지, 데이터가 어떤 계층을 지나 어떤 프로토콜을 거치는지 — 원문을 읽고 팀에 공유하려고 정리한 글</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>네트워크</category><category>http</category><category>인프라</category></item><item><title>빌드 시간 75% 단축하기: Turborepo 최적화</title><link>https://hyunbell.dev/posts/turborepo-build-time-optimization/</link><guid isPermaLink="true">https://hyunbell.dev/posts/turborepo-build-time-optimization/</guid><description>동료가 빌드 5분이 길다고 했다. Turborepo는 이미 쓰고 있었는데 캐시 히트는 0회였다. 무엇이 캐시를 깨뜨렸고, 무엇을 왜 그렇게 바꿨는지에 대한 기록</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>turborepo</category><category>성능</category><category>인프라</category></item><item><title>React Fiber 아키텍처: 선언적 UI의 마법을 가능하게 하는 엔진</title><link>https://hyunbell.dev/posts/react-fiber-architecture-engine/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-fiber-architecture-engine/</guid><description>「전문가를 위한 리액트」 스터디에서 Fiber 아키텍처를 파고들며 얻은 인사이트를, Stack Reconciler의 한계부터 스케줄러와 실무 최적화까지 정리했다</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>아키텍처</category></item><item><title>React 19 cache()로 서버 컴포넌트 워터폴 페칭 막기</title><link>https://hyunbell.dev/posts/react-19-cache-server-component-waterfall/</link><guid isPermaLink="true">https://hyunbell.dev/posts/react-19-cache-server-component-waterfall/</guid><description>서버 컴포넌트에서 부모에서 자식으로 요청이 줄줄이 늘어지는 워터폴 페칭을, React 19 cache()의 프리로딩 패턴으로 푸는 방법을 정리했다</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>rsc</category><category>성능</category></item><item><title>Tailwind vs Linaria: 성능 조사</title><link>https://hyunbell.dev/posts/tailwind-vs-linaria-performance/</link><guid isPermaLink="true">https://hyunbell.dev/posts/tailwind-vs-linaria-performance/</guid><description>Tailwind가 CSS를 줄이고 HTML을 늘리는 건 맞는데, 초기 로드에는 아무 영향이 없었다. 대신 예상 못 한 곳에서 차이가 났다 — 원문을 읽고 팀에 공유하려고 정리한 글</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>css</category><category>tailwind</category><category>성능</category></item><item><title>Flame Graph로 보는 클라이언트 사이드 렌더링</title><link>https://hyunbell.dev/posts/client-side-rendering-flame-graph/</link><guid isPermaLink="true">https://hyunbell.dev/posts/client-side-rendering-flame-graph/</guid><description>성능 패널의 그 알록달록한 막대들을 어떻게 읽는지, 그리고 그 그래프가 클라이언트 사이드 렌더링의 비용을 어떻게 드러내는지 — 원문을 읽고 팀에 공유하려고 정리한 글</description><pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>성능</category></item><item><title>React 개발자를 위한 초기 로딩 성능: 심층 탐구</title><link>https://hyunbell.dev/posts/initial-load-performance-deep-dive/</link><guid isPermaLink="true">https://hyunbell.dev/posts/initial-load-performance-deep-dive/</guid><description>TTFB부터 FCP·LCP까지 무엇을 재는지, 그리고 느린 서버·좁은 대역폭·높은 지연·캐시가 각각 그 숫자를 어떻게 흔드는지 — 팀 내 발표용으로 원문을 읽고 정리한 글</description><pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>렌더링</category><category>성능</category></item><item><title>Astro 5.0으로 개발자 블로그 마이그레이션 경험기</title><link>https://hyunbell.dev/posts/astro-5-blog-migration/</link><guid isPermaLink="true">https://hyunbell.dev/posts/astro-5-blog-migration/</guid><description>실시간 반영이 중요할 줄 알고 Next.js ISR로 시작했는데, 정작 글을 매일 쓰지 않았다. 블로그에 필요한 복잡도가 어디까지인지 다시 따져보고 Astro로 옮긴 기록</description><pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>astro</category><category>nextjs</category><category>성능</category></item><item><title>React 개발자를 위한 SSR 심화 가이드</title><link>https://hyunbell.dev/posts/ssr-deep-dive/</link><guid isPermaLink="true">https://hyunbell.dev/posts/ssr-deep-dive/</guid><description>메타 태그 프리렌더링부터 전체 페이지 SSR, 하이드레이션, SSG까지 — 각 단계가 무엇을 해결하고 무슨 비용을 청구하는지, 그리고 SSR이 오히려 초기 로드를 느리게 만드는 조건까지</description><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>react</category><category>ssr</category><category>렌더링</category><category>성능</category></item><item><title>디자인 QA 지옥에서 탈출하기: 픽셀 비교 기반 자동화 테스트 도입기</title><link>https://hyunbell.dev/posts/visual-regression-testing-playwright/</link><guid isPermaLink="true">https://hyunbell.dev/posts/visual-regression-testing-playwright/</guid><description>기능 테스트는 전부 그린인데 버튼은 깨져 있었다. 시각적 회귀 테스트를 어떤 기준으로 고르고 Playwright로 어떻게 붙였는지, 그리고 무엇이 남았는지</description><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><category>개발</category><category>테스트</category><category>playwright</category><category>디자인시스템</category></item></channel></rss>