Skip to content

Instantly share code, notes, and snippets.

@leedc0101
leedc0101 / 01-hn-better-streams-api.md
Created March 3, 2026 01:01
frontend-briefing-2026-03-03-KST

원문 제목: A better streams API is possible for JavaScript (HN 토론) 원문 링크: https://news.ycombinator.com/item?id=47180569 번역일: 2026-03-03 (KST)

요약 번역

JavaScript 스트림 API 설계에 대한 커뮤니티 토론이다. 핵심 쟁점은 비동기 반복자(async iterator) 기반 스트림과, 더 일반화된 형태의 반복자/청크 모델 중 무엇이 저수준 프리미티브로 적합한가이다.

주요 주장:

  • 제안 측은 UInt8Array 청크 기반의 단순한 모델이 바이트 스트림 처리에 효율적이라고 본다.
  • 반대 측은 Promise 생성/해체 오버헤드, 동기-비동기 파이프라인 혼용 어려움, 조합성(컴포저빌리티) 문제를 지적한다.
@leedc0101
leedc0101 / 01-nextjs-backend-for-frontend.ko.md
Created March 4, 2026 01:01
frontend-briefing-2026-03-04-KST

원문 제목: How to use Next.js as a backend for your frontend 원문 링크: https://nextjs.org/docs/app/guides/backend-for-frontend 번역일: 2026-03-04 (KST)

Next.js를 BFF(Backend for Frontend)로 활용하는 방법

Next.js는 단순한 SSR 프레임워크를 넘어, 프론트엔드를 위한 API 레이어(BFF)로 사용할 수 있다. 즉, HTML뿐 아니라 JSON/XML/텍스트/이미지/파일 등 다양한 응답을 반환하는 공개 HTTP 엔드포인트를 직접 만들 수 있다.

핵심 구현 수단은 Route Handler(route.ts/route.js)다. 이를 통해 GET/POST 요청을 처리하고, 외부 데이터 소스를 읽거나 업데이트 같은 부수효과를 수행할 수 있다. 예외 처리 시에는 try/catch를 사용하고, 클라이언트에 민감한 오류 정보를 노출하지 않도록 주의해야 한다.

@leedc0101
leedc0101 / 01-sprites-on-the-web.md
Created March 5, 2026 01:01
frontend-briefing-2026-03-05-KST

원문 제목: Sprites on the Web 원문 링크: https://www.joshwcomeau.com/animation/sprites/ 번역일: 2026-03-05 (KST)

한국어 번역

2015년 트위터는 즐겨찾기(⭐)를 좋아요(❤️)로 바꾸면서 복잡한 하트 애니메이션을 웹에서 효율적으로 구현해야 했습니다. 개별 DOM 요소를 여러 개 동시에 애니메이션하면 저사양 모바일 환경에서 부담이 커서, 게임 개발에서 쓰는 스프라이트(sprite) 방식을 도입했습니다.

스프라이트는 여러 프레임을 하나의 긴 이미지(스프라이트시트)에 넣고, 화면에는 그중 일부만 보이게 하면서 프레임을 순서대로 바꿔 보여주는 기법입니다. 이 글은 CSS의 object-fit, object-position, @keyframes, steps()를 이용해 자바스크립트 없이 프레임 전환 애니메이션을 구현하는 과정을 설명합니다.

@leedc0101
leedc0101 / 01_vertexjs_1kloc_spa_ko.md
Created March 6, 2026 01:02
frontend-briefing-2026-03-06-KST

Vertex.js 1kloc SPA 프레임워크 (번역)

한국어 번역

Vertex는 약 1,000줄 규모의 단일 파일 SPA 프레임워크로, 빌드 스텝과 외부 의존성 없이 동작하는 것을 핵심 목표로 한다. 문서에 따르면 React 스타일의 컴포넌트/훅 모델, jQuery 스타일 DOM 유틸, 템플릿 로딩, 라우팅, AJAX API를 한 파일에 통합했다.

원문 제목: Testing React Server Components in Next.js
원문 링크: https://dev.to/shieldstring/testing-react-server-components-in-nextjs-1953
번역일: 2026-03-07 (KST)

한국어 번역

React Server Components(RSC)는 렌더링을 서버로 옮겨 클라이언트 JavaScript를 줄이고, API 계층 없이 데이터에 직접 접근하며, 성능과 SEO를 개선한다. Next.js App Router에서는 기본이 서버 컴포넌트라서 실제 코드베이스 대부분이 RSC가 된다.

다만 테스트 방식은 기존 클라이언트 컴포넌트와 다르다. RSC는 브라우저 환경에서 실행되지 않으므로 jsdom 기반 @testing-library/react의 일반적인 render() 패턴이 잘 맞지 않는다. 서버 전용 API(cookies, headers, redirect, notFound)를 쓰는 경우 모킹이 필수이며, 컴포넌트가 async 함수이기 때문에 테스트에서 먼저 await로 컴포넌트를 실행한 뒤 renderToString으로 결과 HTML을 검증해야 한다.

권장 설정은 Jest의 testEnvironment: 'node'다. 데이터 호출은 단순 fetch 목킹으로 시작하고, 시나리오가 복잡해지면 MSW로 전환해 에러/지연/다중 엔드포인트를 현실적으로 다루는 게 좋다. 테스트 초점은 데이터 변환, 조건부 렌더링, 에러 처리, 호출 검증 같은 “로직”에 두고, 라우팅/실서버 파이프라인은 Playwright/Cypress 같은 통합·E2E로 분리하라고 제안한다.

@leedc0101
leedc0101 / 01-typescript-6.0-rc.md
Created March 8, 2026 01:27
frontend-briefing-2026-03-08-KST

TypeScript 6.0 RC (한국어 번역)

TypeScript 6.0 RC가 공개되었다. 이번 6.0은 단순 기능 추가 버전이 아니라, 기존 JS 코드베이스 기반 TypeScript에서 Go 기반의 차세대 TypeScript(7.0+)로 넘어가기 위한 "브리지 릴리스" 성격이 강하다.

핵심 변화는 다음과 같다.

  1. 7.0 정렬을 위한 정합성 강화
@leedc0101
leedc0101 / 01-a11y-dialog-ko.md
Created March 9, 2026 01:30
frontend-briefing-2026-03-09-KST

원문 제목: Your Dialog Has role='dialog'. That Doesn't Make It Accessible. 원문 링크: https://dev.to/vmvenkatesh78/your-dialog-has-roledialog-that-doesnt-make-it-accessible-4lha 번역일: 2026-03-09 KST

role="dialog"만 붙인다고 접근 가능한 다이얼로그가 되진 않는다

속성은 행동이 아니다

많은 컴포넌트 라이브러리는 다이얼로그 패널에 role="dialog"aria-modal="true"를 붙여 두고 접근성을 끝냈다고 생각한다. 하지만 키보드로 실제 사용해 보면 문제가 바로 드러난다.

다이얼로그를 연 뒤 Tab을 눌렀을 때 포커스가 배경 페이지로 빠지면 그 다이얼로그는 접근 가능하지 않다. 포커스가 내부 요소 사이를 순환하지 않으면 포커스 트랩이 없는 것이고, Escape를 눌러도 닫히지 않거나 트리거 버튼으로 포커스가 돌아오지 않으면 키보드 사용자는 길을 잃는다.

@leedc0101
leedc0101 / 01-from-fiber-to-async-react.md
Created March 10, 2026 01:28
frontend-briefing-2026-03-10-KST

원문 제목: From Fiber to Async React 원문 링크: https://www.nonsoo.com/posts/async-react 번역일: 2026-03-10 KST

한국어 번역

React 19 이후 등장한 새 API와 패턴은 결국 하나의 질문으로 이어진다. React는 비동기 작업을 어떻게 UI 모델 안으로 끌어들였는가? 이 글은 전통적인 useEffect + loading/error/data 패턴에서 출발해, Fiber 아키텍처와 Suspense를 거쳐 오늘날의 Async React까지 흐름을 정리한다.

가장 익숙한 방식은 컴포넌트가 마운트된 뒤 useEffect 안에서 데이터를 가져오고, loading, error, data 상태를 각각 관리하는 것이다. 이 방식은 이해하기 쉽지만 반복 코드가 많고, 로딩 상태와 에러 상태를 매번 수동으로 연결해야 하며, 여러 요청이 중첩되면 UI 흐름이 금방 복잡해진다. 그래서 React 생태계에는 TanStack Query, SWR 같은 라이브러리가 성장했다.

@leedc0101
leedc0101 / 01-frontend-memory-leaks.md
Created March 11, 2026 01:29
frontend-briefing-2026-03-11-KST

원문 제목: Frontend Memory Leaks: A 500-Repository Static Analysis and Five-Scenario Benchmark Study 원문 링크: https://stackinsight.dev/blog/memory-leak-empirical-study/ 번역일: 2026-03-11 KST

한국어 번역 / 핵심 내용

이 글은 프론트엔드 메모리 누수가 실제로 얼마나 흔한지, 그리고 누락된 cleanup이 어느 정도 비용을 만드는지 실증적으로 측정한 연구다. 작성자는 React, Vue, Angular용 AST 기반 탐지기를 만들어 공개 저장소 500개를 스캔했고, 별도로 통제된 벤치마크를 작성해 cleanup 유무에 따른 retained heap 증가량을 측정했다.

가장 먼저 짚는 포인트는 “자바스크립트는 GC가 있으니 메모리 누수가 크지 않다”는 오해다. GC는 개발자의 의도를 이해하지 못하고, 단지 도달 가능한 객체만 추적한다. 예를 들어 useEffect 안에서 이벤트 리스너를 등록하고 cleanup을 반환하지 않으면, window -> listener -> closure -> component state 참조 체인이 살아 남아 컴포넌트 상태가 계속 유지된다. 즉, GC 실패가 아니라 애플리케이션 레벨 버그다.

@leedc0101
leedc0101 / 01-temporal-ko.md
Created March 12, 2026 01:29
frontend-briefing-2026-03-12-KST

원문 제목: Temporal: The 9-Year Journey to Fix Time in JavaScript 원문 링크: https://bloomberg.github.io/js-blog/post/temporal/ 번역일: 2026-03-12 KST

Temporal: 자바스크립트 시간 API를 9년에 걸쳐 고친 이유

Bloomberg는 자바스크립트 표준화 작업에 오래 참여해 왔고, 그 과정에서 Promise.allSettled 이후 가장 큰 작업 중 하나로 Temporal 제안을 밀어왔다. 글의 핵심은 기존 Date가 1995년의 제약 속에서 자바 스타일 구현을 급히 옮겨오며 만들어졌고, 오늘날의 복잡한 글로벌 서비스 요구를 감당하기에는 구조적으로 부족하다는 점이다.

기존 Date의 대표 문제로는 세 가지가 강조된다. 첫째, 가변 객체라서 헬퍼 함수가 원본 값을 쉽게 망가뜨린다. 둘째, 월 계산이 직관과 다르게 동작해 1월 31일에 한 달을 더하면 2월 말이 아니라 3월 초로 넘어가는 식의 버그를 만든다. 셋째, 모호한 문자열 파싱 때문에 브라우저별로 로컬 시간, UTC, 에러 처리 방식이 달라질 수 있다. 이런 문제는 회계, 예약, 금융, 협업 제품처럼 시간대와 캘린더가 중요한 앱에서 치명적이다.