Naver FE News 2026년 4월 — 49MB 웹 페이지부터 Temporal Stage 4까지
매달 쏟아지는 프론트엔드 소식 중에서 진짜 알아야 할 것만 골라야 한다. Naver FE News 2026년 4월호에서 임팩트가 큰 6가지를 뽑았다. 49MB짜리 뉴스 페이지, 9년 걸린 Temporal의 Stage 4 도달, Node.js 릴리스 전략 변경, TypeScript 6.0 발표, Axios 공급망 공격, 그리고 Expo SDK 55의 Jetpack Compose 도입이다.
한눈에 보기
| 소식 | 카테고리 | 임팩트 |
|---|---|---|
| 49MB 웹 페이지 | 성능 | 웹 비만의 실태를 수치로 보여주는 사례 |
| Temporal Stage 4 | 언어 표준 | ES2026에 포함, Date 교체 확정 |
| Node.js 연간 메이저 릴리스 | 런타임 | 짝수/홀수 구분 폐지, 모든 버전 LTS |
| TypeScript 6.0 | 언어 | Go 기반 컴파일러 7.0으로 가는 다리 |
| Axios 공급망 공격 | 보안 | RAT 배포, npm 생태계 신뢰 이슈 |
| Expo UI (SDK 55) | 모바일 | Jetpack Compose로 React Native UI |
1. 49MB 웹 페이지 — 헤드라인 4개에 422개 요청
뉴욕 타임즈 홈 페이지를 열면 헤드라인은 4개인데, 브라우저가 받아야 하는 데이터는 49MB다. HTTP 요청 422개, JavaScript만 13MB. 기사 콘텐츠는 전체 페이지의 극히 일부이고, 나머지는 광고, 추적 스크립트, 분석 도구가 차지한다.
비유하면 편지 한 장을 받으려고 택배 트럭 한 대분의 포장재를 뜯는 것과 같다. 콘텐츠 대비 오버헤드의 비율이 비상식적이다.
[💡 잠깐! 이 용어는?] FCP(First Contentful Paint): 페이지를 요청한 후 브라우저에 첫 번째 콘텐츠(텍스트, 이미지)가 그려지는 시점이다. 사용자가 "페이지가 로딩되기 시작했다"고 느끼는 순간과 대응한다.
이 분석의 핵심 메시지는 단순하다. 성능 최적화의 가장 큰 장벽은 기술이 아니라 비즈니스 모델이다. 광고 수익 구조가 바뀌지 않는 한, 페이지 크기는 계속 늘어난다. 개발자가 통제할 수 있는 범위에서라도 서드파티 스크립트의 영향을 측정하고 관리하는 것이 현실적인 대응이다.
2. Temporal Stage 4 — 9년의 여정이 끝났다
2017년에 제안된 Temporal API가 드디어 TC39 Stage 4에 도달했다. ES2026 표준에 포함이 확정된 것이다. JavaScript의 Date 객체를 대체할 공식 후계자가 9년 만에 완성됐다.
| 항목 | Date | Temporal |
|---|---|---|
| 가변성 | Mutable (원본 변경) | Immutable (새 객체 반환) |
| 타임존 | 암묵적 변환 | 명시적 지정 필수 |
| 월 인덱스 | 0-based (1월 = 0) | 1-based (1월 = 1) |
| 캘린더 | ISO 8601만 | 다중 캘린더 지원 |
| 기간 표현 | 없음 | Duration 타입 |
Chrome 144가 이미 Temporal을 탑재하고 있고, 다른 브라우저도 순차적으로 구현 중이다. Stage 4는 "모든 주요 엔진이 구현을 완료하거나 진행 중"이어야 통과할 수 있으므로, 크로스 브라우저 지원은 시간문제다.
moment.js는 2020년에 이미 유지보수 모드에 들어갔다. Temporal이 표준이 되면서date-fns,Day.js같은 라이브러리의 존재 이유도 점차 줄어들 것이다.
3. Node.js 연간 메이저 릴리스 — 짝수/홀수 구분 폐지
Node.js가 지금까지 유지해온 짝수/홀수 릴리스 전략을 버렸다. 기존에는 짝수 버전(18, 20, 22)만 LTS(Long-Term Support)를 받고, 홀수 버전(19, 21, 23)은 단명하는 Current 릴리스였다. 이제는 모든 메이저 버전이 LTS를 받는다.
| 기존 | 변경 후 |
|---|---|
| 매년 2개 메이저 (짝수 LTS + 홀수 Current) | 매년 1개 메이저 (모두 LTS) |
| 홀수 버전은 실험적 | 모든 버전이 프로덕션 대상 |
| LTS 선택이 필요 | 버전 선택 고민 감소 |
[💡 잠깐! 이 용어는?] LTS(Long-Term Support): 장기 지원 버전이다. 보안 패치와 버그 수정을 최소 30개월간 받을 수 있어서, 프로덕션 환경에서 안정적으로 사용할 수 있다.
이 변경의 실질적 효과는 의사결정 비용 감소다. "지금 21을 쓸까 22를 기다릴까"라는 고민이 사라진다. 어떤 버전이든 LTS 지원을 받으니, 최신 버전을 바로 프로덕션에 올려도 된다.
4. TypeScript 6.0 — Go 컴파일러로 가는 다리
TypeScript 6.0은 그 자체로 혁신적인 릴리스라기보다 7.0을 위한 준비 단계다. 7.0에서 Go 기반 컴파일러(tsgo)로 전환될 예정이고, 6.0은 그 사이를 잇는 다리 역할이다.
npm install typescript@6.0.0-beta6.0의 핵심 변경사항:
--module node18이 기본값으로 변경 — ESM 모드가 기본이 된다--target es2023— 최신 ECMAScript 기능을 기본으로 타겟팅noUncheckedIndexedAccess강화 — 인덱스 접근의 타입 안전성 향상- 사전 지원 중단 경고 — 7.0에서 제거될 옵션에 대한 마이그레이션 가이드 제공
비유하면 고속도로(TypeScript 컴파일러)를 다시 깔고 있는데, 6.0은 공사 구간 우회 안내판이다. 7.0에서 Go 컴파일러가 들어오면 컴파일 속도가 10배 이상 빨라질 것으로 예상되지만, 기존 설정과의 호환성이 깨질 수 있어서 6.0에서 미리 경고하고 마이그레이션 경로를 안내하는 것이다.
5. Axios npm 패키지 공급망 공격
npm 생태계에서 또 다른 공급망 공격이 발생했다. axios 패키지의 타이포스쿼팅 변종이 RAT(Remote Access Trojan)을 배포한 것이다.
| 항목 | 내용 |
|---|---|
| 공격 방식 | 유사한 이름의 악성 패키지 배포 |
| 악성코드 유형 | RAT (원격 접근 트로이목마) |
| 영향 범위 | 설치 시 시스템 제어권 탈취 가능 |
| 대응 | npm에서 패키지 삭제, 설치자 대상 경고 |
[💡 잠깐! 이 용어는?]
타이포스쿼팅(Typosquatting): 유명 패키지 이름과 유사한 이름으로 악성 패키지를 등록하는 공격 기법이다. axios → axiso, axois 같은 오타를 노린다.
이 사건이 주는 교훈은 명확하다. npm install은 사실상 임의의 코드를 다운로드해서 실행하는 행위다. lockfile 검증, npm audit, 설치 전 패키지 이름 재확인이 일상적인 보안 습관이 되어야 한다. 특히 CI/CD 파이프라인에서 의존성을 자동 업데이트하는 경우, 새로 추가되는 패키지에 대한 수동 리뷰 단계가 필요하다.
6. Expo UI (SDK 55) — Jetpack Compose가 React Native에 온다
Expo SDK 55가 expo-ui 패키지를 도입했다. 핵심은 Jetpack Compose 컴포넌트를 React Native에서 직접 사용할 수 있다는 것이다.
기존 React Native UI는 브릿지를 통해 네이티브 뷰를 제어했다. expo-ui는 이 패턴을 바꿔서, 각 플랫폼의 최신 UI 프레임워크(Android: Jetpack Compose, iOS: SwiftUI)를 직접 래핑한다. React 컴포넌트처럼 사용하지만 렌더링은 완전한 네이티브다.
| 기존 방식 | Expo UI |
|---|---|
| 브릿지 기반 네이티브 뷰 | Jetpack Compose / SwiftUI 직접 래핑 |
| 커스텀 네이티브 모듈 필요 | React 컴포넌트 API로 즉시 사용 |
| 플랫폼별 룩앤필 불일치 | 각 OS 네이티브 디자인 시스템 반영 |
비유하면, 기존에는 한국 음식(React)을 미국 식재료(기존 네이티브 브릿지)로 만들었다면, 이제는 한국 식재료(Jetpack Compose, SwiftUI)를 직접 가져다 쓰는 것이다. 결과물의 맛(사용자 경험)이 근본적으로 달라진다.
주목할 도구 3가지
이번 호에서 소개된 도구 중 눈여겨볼 것들이 있다.
| 도구 | 한 줄 설명 | 링크 |
|---|---|---|
| Defuddle | 웹 페이지에서 본문만 깔끔하게 추출하는 라이브러리 | github.com/nichochar/defuddle |
| shadcn/cli v4 | shadcn/ui 컴포넌트를 CLI로 설치/관리하는 도구 v4 업데이트 | ui.shadcn.com |
| RTK (Rust Token Killer) | Rust로 만든 토큰 최적화 도구, LLM 컨텍스트 절약용 | github.com/nichochar/rtk |
Defuddle은 Readability 같은 기존 도구와 비슷하지만, LLM 에이전트가 웹 페이지를 읽을 때 특히 유용하다. 광고, 네비게이션, 푸터를 제거하고 본문 텍스트만 추출해서 토큰을 절약할 수 있다. RTK도 같은 맥락에서 코드의 토큰 수를 줄이는 데 초점을 맞춘 도구다.
마무리
이번 달 소식의 공통 키워드를 뽑자면 **"성숙"**이다.
- Temporal이 9년 만에 표준이 됐고
- Node.js가 불필요하게 복잡했던 릴리스 전략을 단순화했고
- TypeScript가 Go 컴파일러라는 큰 전환을 체계적으로 준비하고 있다
반면 49MB 웹 페이지와 Axios 공급망 공격은, 생태계가 성숙해져도 근본적인 문제(웹 비만, 공급망 보안)는 쉽게 풀리지 않는다는 걸 보여준다.
참고:
- Naver FE News 2026년 4월: https://github.com/naver/fe-news/blob/master/issues/2026-04.md
관심 있을 만한 포스트
Bun vs Node.js vs Deno — 뭐가 다른지, 그래서 뭘 쓰면 좋은지 (2026 기준)
런타임 3대장 비교: 호환성(Node), 속도/번들(Bun), 올인원/보안(Deno). 팀/프로덕트 상황별 선택 기준과 체크리스트까지 정리.
node:vfs — Node.js에 가상 파일 시스템이 필요한 이유
Matteo Collina가 제안한 node:vfs 모듈이 해결하려는 4가지 문제와 아키텍처를 분석한다.
envscan — .env.example을 손으로 관리하지 말자
코드에서 process.env 참조를 스캔해 .env.example을 자동 생성하는 envscan의 접근 방식과 기존 도구들과의 차이를 정리한다.
Tsonic — TypeScript를 네이티브 바이너리로 컴파일하는 실험
TypeScript → C# → NativeAOT 파이프라인으로 네이티브 실행 파일을 만드는 Tsonic. 어떻게 동작하고, 어떤 한계가 있는지 살펴봤다.
Bun이 빠른 건 맞다 — 그런데 당신의 이벤트 루프가 문제다
Bun으로 바꿔도 p99가 개선되지 않는 이유. 런타임 선택보다 먼저 봐야 할 진짜 병목 지점들.
TypeScript 6.0 Beta — TS 7 가기 전에 tsconfig부터 정리하자
TypeScript 6.0 Beta의 주요 변경 사항과 깨지는 기본값들을 정리하고, TS 7(Go 네이티브) 전환을 대비하는 마이그레이션 전략을 다룬다.
Temporal API — JavaScript Date의 30년 묵은 저주가 풀린다
Chrome 144가 Temporal API를 정식 탑재하면서 JavaScript 날짜 처리의 새 시대가 열렸다.
죽지 않는 배포 파이프라인 — Netflix가 Temporal로 실패율을 40,000배 낮춘 이야기
Netflix Spinnaker 팀이 Temporal Durable Execution을 도입해 Cloud Operation의 일시적 장애를 사실상 제거한 마이그레이션 이야기.