Skip to content

Instantly share code, notes, and snippets.

@leedc0101
Created February 18, 2026 04:52
Show Gist options
  • Select an option

  • Save leedc0101/6f2f08f34cb74e48c449469e7241c1b0 to your computer and use it in GitHub Desktop.

Select an option

Save leedc0101/6f2f08f34cb74e48c449469e7241c1b0 to your computer and use it in GitHub Desktop.
frontend-briefing-2026-02-18-KST

원문 제목: Mobile Safari web pages are severely limited by memory 원문 링크: https://lapcatsoftware.com/articles/2026/1/7.html 번역 생성일: 2026-02-18 KST

Mobile Safari 웹페이지 메모리 한계가 매우 낮다

작성자는 Safari 확장(StopTheMadness Pro) 기능을 개발하다가, iOS에서 큰 폰트 파일(약 50MB)을 data URL로 바꿔 표시할 때 페이지가 자주 죽는 문제를 확인했다.

테스트는 단순했다. 자바스크립트 배열에 문자열을 반복해서 넣어 메모리를 채웠다.

  • iPhone SE 3세대(iOS 26.2): 대략 100MB 부근에서 페이지 크래시 재현
  • iPad 8세대(iOS 26.2): 대략 200MB 부근에서 페이지 크래시 재현

일부 경우 iPad 전체가 멈추고 재부팅처럼 보이는 현상도 있었다. 즉, 웹페이지 하나가 기기 사용성에 큰 영향을 줄 수 있었다.

또 하나 확인된 사실은 확장 API runtime.sendMessage() 자체에도 메시지 크기 제한이 있다는 점이다.

  • iOS / macOS 모두 개별 메시지 약 64MB 제한
  • 이 경우에는 예외를 잡을 수 있지만, 웹페이지 자체 메모리 한계로 죽는 경우는 try/catch로 처리되지 않음

작성자는 현재 API 설계를 비판한다.

  • 메시지 "개별 크기"만 제한하고
  • "빈도"는 제한하지 않아 우회가 쉽고
  • 자동 청크 분할을 브라우저가 하지 않아 확장 개발자가 직접 구현해야 함

결론적으로, 모바일 Safari 환경에서는 큰 파일 처리(예: FileReader + data URL) 시

  • 기기별 실사용 메모리 한계를 먼저 가정하고
  • 기능에 용량 경고/가드레일을 넣는 것이 현실적인 대응이라고 정리한다.

원문 제목: Watching an elderly relative trying to use the modern web 원문 링크: https://news.ycombinator.com/item?id=47042747 번역 생성일: 2026-02-18 KST

고령 사용자가 현대 웹을 쓰는 모습을 보며

작성자는 고령의 가족이 인터넷에서 간단한 작업을 하려다 반복적으로 실패하는 장면을 보고 큰 충격을 받았다고 말한다.

핵심 메시지는 짧지만 분명하다.

  • 현재 많은 웹 디자인은 고령층에게 사실상 "사용 불가"에 가깝다.
  • 사용자는 해야 할 일을 알고 있어도, UI/흐름 때문에 좌절한다.
  • 이 문제는 단순 불편이 아니라 감정적 고통(눈물)까지 만든다.

작성자는 이를 "현대 웹 디자인이 고령층을 학대하는 수준"이라고 매우 강하게 표현한다.

(참고: 본문은 HN 텍스트 포스트로 매우 짧다.)

원문 제목: Swift 6.0 Blockers 원문 링크: LadybirdBrowser/ladybird#933 번역 생성일: 2026-02-18 KST

Ladybird의 Swift 6.0 전환을 막는 이슈 정리

이 문서는 Ladybird 브라우저 팀이 Swift 6.0 지원을 실험 단계에서 올리지 못하는 이유를 "체크리스트" 형태로 정리한 이슈다.

1) Swift/C++ 인터롭 핵심 문제

여러 케이스에서 Swift와 C++ 브리징이 깨진다.

  • Optional ABI 불일치(컴파일러와 브리징 헤더가 다르게 해석)
  • Ubuntu + C++17 이상에서 libstdc++ 순환 헤더 문제
  • 특정 타입(swift::Optional, swift::String) 반환 불가
  • libstdc++ 최신 버전(예: 13, 15)에서 import 실패 또는 대량 오류
  • SIL verifier / frontend 크래시 다수

실무 영향:

  • "그 기능은 쓰지 말자" 수준의 우회가 필요하고
  • 일부는 우회도 없으며
  • 릴리스 버전과 main 브랜치의 상태 차이 때문에 CI 안정성이 떨어진다.

2) CMake 레벨 문제

Swift + Ninja + macOS 배포 타깃, install_name, 인터페이스 옵션 전달 등 빌드 시스템 이슈가 별도로 존재한다.

  • 공식 해결 전까지 CMake 스크립트에 임시 패치/커스텀 커맨드 필요
  • 팀이 유지해야 할 빌드 부채가 커짐

3) Ladybird 자체 코드베이스 이슈

AK/LibGfx 모듈맵, 타입 이름 충돌(String), 테스트 모듈 연동 등에서 swift-frontend 크래시가 반복된다.

  • Debug 빌드 실패 → Release로 우회
  • 네임스페이스 강제(AK.String vs Swift.String)
  • 커스텀 테스트 러너 유지

4) 아직 열린 설계 질문

  • 복사 없이 바이트 뷰/슬라이스를 Swift에 넘기는 방법
  • AK 타입을 std 타입 수준으로 인터롭시키는 방법
  • 가비지 컬렉터와 Swift 런타임의 통합 방향

결론

이 이슈의 요지는 "단순 버전 업"이 아니라,

  • 언어 인터롭 안정성
  • 빌드 도구 체인 성숙도
  • 대형 C++ 코드베이스와의 접합 비용

이 3개가 동시에 해결돼야 실제 마이그레이션이 가능하다는 점이다.

즉, 전환 판단은 기술 선호가 아니라 "운영 가능한 안정성" 기준으로 내려야 한다는 사례다.

원문 제목: How We Reduced INP by 100ms+: GTM Isolation, React Compiler, and Better Telemetry 원문 링크: https://dev.to/subito/how-we-reduced-inp-by-100ms-gtm-isolation-react-compiler-and-better-telemetry-315g 번역 생성일: 2026-02-18 KST

INP를 100ms 이상 줄인 방법

이탈리아 중고마켓 Subito 팀 사례.

문제: LCP/CLS는 관리됐지만, 트래픽이 큰 페이지(리스트/상세)에서 INP가 계속 나빴다.

접근 전환: 감(경험) → 실험

기존에는 INP 급등 때 릴리스 롤백부터 했지만, 원인이 팀 코드가 아닌 경우가 많았다.

그래서 트래픽 1% A/B 테스트로 원인 분리:

  • A: GTM 제거
  • B: 광고(ADV) 제거
  • C: 기본

상세 페이지 결과

  • 기본: 208ms
  • 광고 제거: 180ms
  • GTM 제거: 112ms

핵심 병목은 GTM으로 확인.

해결은 GTM 트리거를 이진탐색(bisect)으로 좁혀 특정 스크립트를 찾는 방식. 문제 스크립트는 TikTok/Facebook 트래킹 쪽이었고, 마케팅 팀과 합의해 TikTok 트래킹을 비활성화.

결과: 약 170ms까지 하락(200ms 미만 달성).

리스트 페이지 결과

  • 기본: 345ms
  • 광고 제거: 279ms
  • GTM 제거: 320ms

여긴 단일 범인이 아니라 복합 원인.

1) 텔레메트리 강화

web-vitals attribution(longestScriptURL, interactionTarget)을 Grafana Faro로 수집해 "어떤 스크립트 + 어떤 DOM 타깃"이 느린지 시각화.

문제 타깃은 특정 링크 클릭 구간이었고, 전면 광고(interstitial) 핸들러가 무거웠다.

2) 팀이 제어 가능한 영역 최적화

Next.js 16 업그레이드 + React Compiler 활성화.

결과: 345ms → 271ms로 큰 폭 개선.

비즈니스 영향 측정

개선 후 ad_views / visits 지표를 전년 동기와 비교해 +5.3% 증가.

즉, 성능 개선이 기술 지표에만 머물지 않고 퍼널 하단(상세 진입)에도 의미 있는 효과를 냈다고 본다.

배운 점

  • 추측 말고 분리 측정(외부 스크립트 가중치 계량)
  • 우회 해킹보다 조직 간 협업으로 근본 원인 제거
  • Core Web Vitals를 기술 KPI가 아니라 비즈니스 KPI로 관리

원문 제목: We Have Database Rollbacks. Why Don't We Have State Rollbacks? 원문 링크: https://dev.to/plc-creates/we-have-database-rollbacks-why-dont-we-have-state-rollbacks-3k0n 번역 생성일: 2026-02-18 KST

DB는 롤백하는데, 프런트 상태는 왜 롤백하지 않을까?

글의 주장:

  • 백엔드는 실패를 전제로 설계한다(트랜잭션, 백업, 롤백).
  • 프런트는 최신 스냅샷 복원만 되면 끝났다고 보는 문화가 강하다.

하지만 SPA가 커지면서 프런트 상태는 임시 UI 데이터가 아니라 비즈니스 전환(폼 단계, 낙관적 업데이트, 파생 상태)을 담는 "운영 데이터"가 되었다.

문제는 여기서 생긴다.

프런트 상태 흐름은 보통

변경 → 자동저장 → 재수화 → 제출 시 검증

까지는 있는데, 복원된 상태가 잘못됐을 때 돌아갈 "마지막 정상 상태"가 없다.

글은 "검증(validation)"과 "복구(recovery)"를 분리해야 한다고 말한다.

  • 검증: 지금 유효한가?
  • 롤백: 깨진 뒤 안전한 상태로 되돌릴 수 있는가?

결론은 단순하다.

DB에 롤백 없이 배포하지 않듯, 복잡한 클라이언트 상태에도 버전 관리·결정적 복원·안전 폴백 같은 "롤백 규율"이 필요하다는 문제 제기다.

원문 제목: How We Built a Real-Time Analytics Platform on Cloudflare Workers (Architecture Deep-Dive) 원문 링크: https://dev.to/zenovay/how-we-built-a-real-time-analytics-platform-on-cloudflare-workers-architecture-deep-dive-5h3h 번역 생성일: 2026-02-18 KST

(길이상 요약 번역)

Cloudflare Workers 기반 실시간 분석 플랫폼 아키텍처

목표는 세 가지였다.

  • 전 세계 이벤트 수집 100ms 이하
  • 대시보드 실시간 반영
  • 쿠키/핑거프린트 없는 프라이버시 중심 추적

1) 왜 엣지 우선인가

중앙 서버 방식은 사용자와 서버 물리 거리가 멀어 지연이 크다. 엣지(Cloudflare Workers)로 수집 로직을 옮기면 요청이 지역 PoP에서 바로 처리되어 추적 스크립트가 사이트 체감 속도를 덜 해친다.

2) 전체 구조

브라우저 스크립트 → Worker(Hono) →

  • KV: 중복제거/레이트리밋/핫데이터
  • Supabase(Postgres): 영구 저장
  • Workers Analytics Engine: 고카디널리티 이벤트(듀얼 라이트)

→ Supabase Realtime(WebSocket) → Next.js 대시보드

핵심 포인트:

  • Worker에서 봇 차단, 지리정보 추출, 중복제거를 먼저 처리
  • SDK 대신 경량 PostgREST 클라이언트 직접 구현(Worker 호환성 때문)

3) 쿠키 없이 세션 식별

클라이언트에서 UUID 2개 사용:

  • session_id(sessionStorage): 탭 단위 세션
  • visitor_id(localStorage): 재방문 식별

장단점은 명확하다.

  • 장점: 쿠키/핑거프린트 없이 개인정보 친화적
  • 단점: 기기/브라우저 간 사용자 통합 추적 불가, 프라이빗 모드에서 신규 방문자로 잡힘

4) DB 부하 제어

직접 INSERT 남발 대신:

  • upsert로 세션 레코드 갱신
  • KV 5초 TTL 중복제거
  • 의미 있는 변화 때만 계산 로직 재실행
  • WAE 듀얼라이트로 장기/대규모 집계 분산

5) 실시간 대시보드

  • 빠른 현재값은 KV에서 읽고
  • 상세 이벤트는 Supabase Realtime 구독으로 반영

글로브 시각화까지 포함해 수백 ms 단위 반영을 목표로 운영.

6) 운영 결과(요약)

  • 이벤트 수집 P95: 약 47ms
  • P99: 약 89ms
  • 대시보드 반영: 약 400ms

7) 실무 교훈

  • Hono + Workers 조합은 엣지 API에 적합
  • Cloudflare cf 지오데이터는 외부 GeoIP 의존을 줄임
  • KV는 강한 일관성보다 지연/비용 이점이 큰 용도에 적합
  • 초기에 WAE/DO(강일관 카운터)까지 설계하면 이후 마이그레이션 비용을 줄일 수 있음
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment