최근 글
모든 글 보기 →Node.js 서버가 큰 업로드를 300초 근처에서 408로 끊는 이유, requestTimeout 기본값
Express 서버로 1GB 파일을 동시에 올리면 5분 조금 넘어 빈 408이 오는 현상을 추적했습니다. 원인은 Node 의 requestTimeout 기본값 300초와 30초 점검 주기였습니다.
2026-10-26 · 6 min read
#nodejs#http#upload#timeout#express
네이티브 select 화살표를 전 플랫폼에서 통일하기 (iOS 는 왜 양방향 화살표일까)
iOS Safari 에서만 양방향 화살표로 보이는 select 를 appearance 리셋으로 통일하고, data-uri SVG 에는 CSS 변수가 먹지 않아 DOM 오버레이를 쓰게 된 이유를 정리했습니다.
2026-10-25 · 4 min read
#css#ios-safari#design-system#accessibility
SQL 조각에 컬럼 이름만 넘기면 상관 서브쿼리가 자기 자신과 비교한다
상관 서브쿼리에 한정자 없는 컬럼 이름을 넘기면 가장 안쪽 테이블의 컬럼으로 해석되어 조건이 항상 참이 됩니다. 문자열 조각으로 SQL 을 조립할 때 겪은 함정과 방어 방법입니다.
2026-10-24 · 5 min read
#postgresql#sql#subquery#code-review
Claude Code CLI 를 OAuth 구독 계정으로 Docker 에서 헤드리스 자동화하기
API 키가 아니라 구독(OAuth) 계정으로 Claude Code 를 cron 스케줄러에서 무인 실행하며 만난 함정 4개와 해결을 정리했습니다. 컨테이너 안에서 1회 로그인하고 설정 디렉토리를 볼륨으로 영속시키는 구성입니다.
2026-10-23 · 5 min read
#claude-code#docker#oauth#automation
동영상 썸네일을 canvas 캡처 없이 video 태그의 media fragment 로 만들기
S3 presigned URL 로 redirect 되는 구조에서는 canvas 로 동영상 프레임을 캡처할 수 없습니다. video 의 src 끝에 #t=0.1 을 붙여 첫 프레임을 그대로 보여 주는 방법입니다.
2026-10-22 · 5 min read
#frontend#video#html5#cors
fail-closed 값을 Long.MAX_VALUE 로 두면 합산에서 넘쳐 통과한다
확인할 수 없는 크기를 Long.MAX_VALUE 로 표현했더니 합산에서 -2 로 넘쳐 한도 검사를 통과했습니다. 유한 상한과 포화 덧셈으로 고친 과정을 적었습니다.
2026-10-21 · 5 min read
#java#overflow#validation#fail-closed
포커스 트랩 훅의 deps에 콜백을 두면 타이핑 중 포커스를 빼앗긴다
모달에 닫기 확인 가드를 넣었더니 타이핑할 때마다 포커스가 첫 입력칸으로 튀었습니다. effect deps 에 인라인 콜백이 들어 있던 포커스 트랩 훅을 ref 로 고친 과정입니다.
2026-10-20 · 6 min read
#react#accessibility#hooks#focus-trap
서명 URL로 보내는 302를 캐시하면 만료된 403이 계속 재생된다
S3 presigned URL 로 리다이렉트하는 302 를 프록시가 캐시하면 몇 분 뒤에도 만료된 Location 이 재생됩니다. Date 헤더로 캐시 층을 가려내고 no-store 로 푸는 과정을 정리했습니다.
2026-10-19 · 4 min read
#s3#presigned-url#http-cache#redirect#debugging
메서드에 기능을 얹은 JS Proxy가 vi.spyOn을 삼킨다
query 호출에 SQL 태그를 붙이는 Proxy 래퍼를 만들었더니 vi.spyOn 이 전혀 먹지 않았습니다. get 트랩이 spy 를 가리는 이유와 원본 identity 비교로 푸는 방법을 정리했습니다.
2026-10-18 · 6 min read
#javascript#proxy#vitest#testing