모든 글
총 80개의 글이 있습니다. (1/4 페이지)
HTML5 드래그앤드롭에서 멀티선택 이동 처리, 페이로드가 아니라 드롭 시점에 해석하라
여러 항목을 선택해도 드래그한 1개만 이동되는 버그를 고쳤습니다. 선택 배열을 페이로드에 담는 대신 드롭 시점에 선택 상태와 대조해 bulk, single, blocked 로 나누는 방법입니다.
2026-10-28 · 4 min read
#react#html5-dnd#frontend#ux
DB 와 앱이 같은 ID 를 다르게 읽으면 검사가 우회된다
검사 층과 실행 층이 같은 입력을 각자 파싱하면 두 파서의 차집합이 우회로가 됩니다. DB 를 흉내 내는 대신 좁은 정규형만 믿고 나머지는 fail-closed 로 막는 방법을 적었습니다.
2026-10-27 · 7 min read
#security#postgresql#validation#fail-closed
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
Postgres 전문검색이 느리면 ts_headline 부터 의심하라 (스니펫 입력 캡)
전문검색이 느린 원인은 인덱스가 아니라 스니펫을 만드는 ts_headline 이었습니다. 입력을 앞 8KB 로 캡해 266ms 를 3ms 로 줄인 과정을 정리했습니다.
2026-10-17 · 4 min read
#postgresql#full-text-search#performance
요청을 쪼갰는데 화면은 여전히 가장 느린 요청을 기다린다
요청을 섹션별로 나눴는데도 합산 로딩 플래그 때문에 화면은 50초 뒤에야 바뀌었습니다. 섹션 단위 pending 판정과 TanStack Query v5 의 pending 함정을 정리했습니다.
2026-10-16 · 6 min read
#react#tanstack-query#frontend#loading-state
한글 조사 때문에 마크다운 굵게가 안 먹는 이유, CommonMark right-flanking
닫는 별표 앞이 문장부호이고 바로 뒤에 조사가 붙으면 CommonMark 규칙상 굵게가 닫히지 않습니다. 영어에서는 드러나지 않는 이 규칙이 한국어 문서에서만 깨지는 이유와 해결, 검증 방법을 정리했습니다.
2026-10-15 · 5 min read
#markdown#commonmark#korean#i18n
트랜잭션 안에서 에러를 삼키면 COMMIT 이 조용히 ROLLBACK 된다 (node-postgres)
실패해도 되는 조회를 try/catch 로 삼켰더니 앞선 UPDATE 까지 사라졌습니다. aborted 트랜잭션의 COMMIT 이 에러 없이 ROLLBACK 이 되는 이유와 SAVEPOINT 로 막는 방법입니다.
2026-10-14 · 4 min read
#postgresql#node-postgres#transaction#error-handling
iframe 안 모달의 딤을 부모 화면 전체로, 조상 z-index:0 이 막는다
iframe 안에서 모달이 뜰 때 부모 화면 전체를 딤 처리하려다 조상의 z-index:0 stacking context 에 막힌 원인과, 딤이 켜진 동안만 풀어 주는 해법을 정리했습니다.
2026-10-13 · 6 min read
#css#iframe#postmessage#stacking-context
from_config 모델 로딩이 30초 걸린 이유, 어차피 덮어쓸 난수 초기화
from_config 로 뼈대를 만들고 load_state_dict 로 가중치를 채우면 로딩 30초 중 23초를 곧바로 덮어쓰일 난수 초기화에 씁니다. no_init_weights() 로 초기화를 끄면 0.8초까지 줄어듭니다.
2026-10-12 · 4 min read
#pytorch#transformers#model-loading#performance
X-Forwarded-For 맨 왼쪽 IP로 접근 제어하면 헤더 한 줄에 뚫린다
프록시는 클라이언트가 보낸 X-Forwarded-For 를 지우지 않고 뒤에 덧붙이므로 맨 왼쪽 값은 요청자가 정할 수 있습니다. 오른쪽에서 신뢰 프록시 수만큼 건너뛰는 trust proxy 설정을 정리했습니다.
2026-10-11 · 5 min read
#security#express#proxy#x-forwarded-for#nginx
fetch 로는 업로드 진행률을 못 그린다, XHR onprogress 로 돌아가기
업로드가 77% 에서 멈춘다는 제보의 원인은 타이머로 만든 가짜 진행률이었습니다. fetch 가 업로드 진행 이벤트를 주지 않는 이유와 XHR 로 실제 진행률을 그리는 방법입니다.
2026-10-10 · 6 min read
#frontend#javascript#fetch#xmlhttprequest
pg-pool 에서 빌린 연결을 오래 쥐면 error 리스너가 없을 때 프로세스가 죽는다
pool.connect() 로 빌린 연결에 error 리스너를 달지 않으면, 쉬는 동안 연결이 끊기는 순간 Node 프로세스 전체가 죽습니다. advisory lock 연결을 예로 원인과 리스너 처리 패턴을 정리했습니다.
2026-10-09 · 8 min read
#postgresql#node-postgres#pg-pool#advisory-lock#error-handling