#frontend
14개의 글.
동영상 썸네일을 canvas 캡처 없이 video 태그의 media fragment 로 만들기
S3 presigned URL 로 redirect 되는 구조에서는 canvas 로 동영상 프레임을 캡처할 수 없습니다. video 의 src 끝에 #t=0.1 을 붙여 첫 프레임을 그대로 보여 주는 방법입니다.
2026-10-22 · 5 min read
#frontend#video#html5#cors
요청을 쪼갰는데 화면은 여전히 가장 느린 요청을 기다린다
요청을 섹션별로 나눴는데도 합산 로딩 플래그 때문에 화면은 50초 뒤에야 바뀌었습니다. 섹션 단위 pending 판정과 TanStack Query v5 의 pending 함정을 정리했습니다.
2026-10-16 · 6 min read
#react#tanstack-query#frontend#loading-state
fetch 로는 업로드 진행률을 못 그린다, XHR onprogress 로 돌아가기
업로드가 77% 에서 멈춘다는 제보의 원인은 타이머로 만든 가짜 진행률이었습니다. fetch 가 업로드 진행 이벤트를 주지 않는 이유와 XHR 로 실제 진행률을 그리는 방법입니다.
2026-10-10 · 6 min read
#frontend#javascript#fetch#xmlhttprequest
자동완성이 다시 안 뜬다 — 닫힘 상태를 값으로 저장했을 때
자동완성 닫힘 상태를 검색어 값으로 기억하면 지웠다 같은 값을 다시 입력했을 때(IME 수정 동작) 패널이 영영 안 열립니다. 값 대신 편집 횟수 카운터로 바꿔야 합니다.
2026-09-07 · 12 min read
#react#ime#frontend#상태관리
복사했더니 빈 값 — innerText는 화면에 보이는 것만 읽는다
content-visibility:auto 로 접어 둔 긴 글을 innerText 로 읽으면 화면 밖 부분이 렌더되지 않아 빈 문자열이 복사됩니다. display:none 은 전문을 돌려주니, 데이터 그대로가 필요하면 textContent 를 씁니다.
2026-08-27 · 8 min read
#frontend#dom#javascript#debugging
렌더 실패가 앱 밖으로 새는 이유 — 라이브러리가 document.body에 그릴 때
렌더 라이브러리가 실패 시 document.body에 만든 임시 div를 정리 직전에 throw해, catch로 예외를 삼켜도 화면에 잔재가 누적됩니다. 컨테이너를 직접 만들어 finally에서 제거해야 합니다.
2026-08-20 · 11 min read
#frontend#dom#react#testing
드롭한 폴더는 0바이트 파일로 온다 — webkitGetAsEntry 로 가려내기
드래그로 드롭한 폴더는 size 0인 File로 섞여 들어와 파일과 구분되지 않는데, drop 핸들러 안에서 동기로 webkitGetAsEntry()를 호출해야 폴더를 가려낼 수 있습니다.
2026-08-14 · 10 min read
#frontend#drag-and-drop#browser-api#ux
사파리에서만 클립보드 복사가 실패하는 이유 — transient activation
사파리에서 클립보드 복사가 실패하는 이유는 비동기 네트워크 요청으로 인해 사용자 제스처가 만료되기 때문이며 이를 해결하려면 복사 로직을 요청보다 앞서 실행하거나 Promise를 활용해 쓰기를 예약해야 합니다
2026-08-11 · 7 min read
#frontend#safari#clipboard#browser-api
background-clip: content-box 는 border-radius 도 깎는다
background-clip을 content-box로 설정하면 padding 두께만큼 border-radius가 깎여 의도치 않게 각진 모양이 되는데, 이를 해결하려면 슬래시 문법을 사용해 가로와 세로 반경을 개별적으로 보정해야 합니다
2026-08-05 · 7 min read
#css#ui#border-radius#frontend
롱프레스 드래그가 안 되는 이유 — touch-action 은 제스처가 시작될 때 확정된다
touch-action 은 pointerdown 시점에 이미 확정돼 늦게 바꾸면 소용없고, 롱프레스 시작 순간 touchmove 를 passive: false 로 preventDefault 해야 스크롤이 드래그를 취소하지 않습니다.
2026-07-31 · 9 min read
#touch-action#pointer-events#mobile#frontend
disabled 버튼에 툴팁이 안 뜨는 이유와 해결
disabled 버튼은 포인터 이벤트를 차단해 툴팁 표시를 방해하므로 CSS의 pointer-events: none을 활용해 이벤트를 부모 요소로 전달하는 해결법과 함께 키보드 사용자를 위한 접근성 보완책을 제시합니다
2026-07-23 · 7 min read
#frontend#css#react#ux#accessibility
모바일 키보드가 모달을 가릴 때 — visualViewport + paddingBottom 한 방
iOS Safari 는 키보드가 떠도 레이아웃 뷰포트를 줄이지 않아 모달이 키보드 뒤에 가려지는데, visualViewport 로 가린 높이를 구해 padding-bottom 에 더하면 정렬을 안 바꾸고도 해결됩니다.
2026-06-11 · 7 min read
#frontend#css#react#mobile#visualviewport
Next.js App Router 캐싱 4계층 완전정복
Next.js App Router 캐싱은 4계층으로 나뉘며, cookies()·headers()·no-store 하나만 써도 라우트가 동적이 되어 Full Route Cache 가 꺼집니다.
2026-06-07 · 21 min read
#nextjs#react#performance#frontend
Core Web Vitals 95점 만들기: LCP·CLS·INP
LCP 는 TTFB 와 렌더 블로킹 해소·이미지 preload 로, CLS 는 이미지·광고 슬롯 공간을 미리 예약해서, INP 는 긴 JS 작업을 쪼개 메인 스레드에 양보해서 개선하며, 랩 점수가 아니라 필드 데이터 75퍼센타일로 검증해야 합니다.
2026-06-03 · 24 min read
#frontend#performance#seo#web