본문으로 건너뛰기
wooncloud
Node.js 서버가 큰 업로드를 300초 근처에서 408로 끊는 이유, requestTimeout 기본값
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 는 왜 양방향 화살표일까)
네이티브 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 조각에 컬럼 이름만 넘기면 상관 서브쿼리가 자기 자신과 비교한다
상관 서브쿼리에 한정자 없는 컬럼 이름을 넘기면 가장 안쪽 테이블의 컬럼으로 해석되어 조건이 항상 참이 됩니다. 문자열 조각으로 SQL 을 조립할 때 겪은 함정과 방어 방법입니다.
2026-10-24 · 5 min read
#postgresql#sql#subquery#code-review
Claude Code CLI 를 OAuth 구독 계정으로 Docker 에서 헤드리스 자동화하기
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 로 만들기
동영상 썸네일을 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 로 두면 합산에서 넘쳐 통과한다
fail-closed 값을 Long.MAX_VALUE 로 두면 합산에서 넘쳐 통과한다
확인할 수 없는 크기를 Long.MAX_VALUE 로 표현했더니 합산에서 -2 로 넘쳐 한도 검사를 통과했습니다. 유한 상한과 포화 덧셈으로 고친 과정을 적었습니다.
2026-10-21 · 5 min read
#java#overflow#validation#fail-closed
포커스 트랩 훅의 deps에 콜백을 두면 타이핑 중 포커스를 빼앗긴다
포커스 트랩 훅의 deps에 콜백을 두면 타이핑 중 포커스를 빼앗긴다
모달에 닫기 확인 가드를 넣었더니 타이핑할 때마다 포커스가 첫 입력칸으로 튀었습니다. effect deps 에 인라인 콜백이 들어 있던 포커스 트랩 훅을 ref 로 고친 과정입니다.
2026-10-20 · 6 min read
#react#accessibility#hooks#focus-trap
서명 URL로 보내는 302를 캐시하면 만료된 403이 계속 재생된다
서명 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을 삼킨다
메서드에 기능을 얹은 JS Proxy가 vi.spyOn을 삼킨다
query 호출에 SQL 태그를 붙이는 Proxy 래퍼를 만들었더니 vi.spyOn 이 전혀 먹지 않았습니다. get 트랩이 spy 를 가리는 이유와 원본 identity 비교로 푸는 방법을 정리했습니다.
2026-10-18 · 6 min read
#javascript#proxy#vitest#testing