본문으로 건너뛰기
wooncloud

모든 글

총 80개의 글이 있습니다. (2/4 페이지)

sticky 가 조용히 죽는 자리, overflow:hidden 은 스크롤하지 않아도 scrollport 다
sticky 가 조용히 죽는 자리, overflow:hidden 은 스크롤하지 않아도 scrollport 다
같은 컴포넌트인데 iframe 화면에서만 position:sticky 가 먹지 않았던 원인은 루트의 overflow:hidden 이었습니다. 스크롤 컨테이너 기준과 flex 높이 협상의 함정까지 다룹니다.
2026-10-08 · 5 min read
#css#sticky#overflow#iframe
reduced-motion 에서 CSS 애니메이션을 원하는 프레임에 멈추기
reduced-motion 에서 CSS 애니메이션을 원하는 프레임에 멈추기
reduced-motion 설정 시 루프 애니메이션이 사라지는 문제를 해결하기 위해 음수 animation-delay와 paused 속성을 활용해 특정 프레임에 멈추게 하는 방법과 이를 활용한 스크린샷 검수 팁을 소개합니다
2026-10-06 · 4 min read
#css#animation#accessibility#prefers-reduced-motion
Jev 대안이라던 laya를 써보고 Jev로 돌아온 이야기
Jev 대안이라던 laya를 써보고 Jev로 돌아온 이야기
오픈소스 laya 는 실제 데이터에서 정확도가 30~46%에 그쳐 하루 만에 지우고, 확신도 0.8 이상이 거의 다 맞는 Jev 로 전환해 이슈 분류 파이프라인을 구축한 경험입니다.
2026-09-23 · 14 min read
#jev#laya#llm#classification
다른 레포를 건드리면 그 레포 CLAUDE.md를 안 따른다 — 레포별 세션과 SendMessage
다른 레포를 건드리면 그 레포 CLAUDE.md를 안 따른다 — 레포별 세션과 SendMessage
다른 레포를 --add-dir 로 열면 hooks·권한이 따라오지 않고 /cd 로 옮기면 원래 레포 규칙을 잃는데, 레포마다 세션을 두고 SendMessage 로 요청하면 각자 자기 하네스대로 작업합니다.
2026-09-13 · 12 min read
#claude-code#ai-agent#architecture#backend
값이 하나뿐인 컬럼이 인덱스를 죽인다
값이 하나뿐인 컬럼이 인덱스를 죽인다
복합 인덱스의 선두 컬럼을 조건절에서 빼면, 카디널리티가 1이라 무의미해 보여도 인덱스 전체가 Seq Scan으로 죽습니다. 상수로 채워 넣자 35초가 525ms로 줄었습니다.
2026-09-10 · 9 min read
#postgresql#인덱스#쿼리튜닝
삭제 필터를 걸었는데 아무것도 안 걸러지고 있었다
삭제 필터를 걸었는데 아무것도 안 걸러지고 있었다
논리 삭제 처리를 위해 작성한 쿼리 조건이 실제 데이터와 맞지 않아 수년간 무용지물이었던 경험을 통해, 코드 리뷰만으로는 알 수 없는 데이터의 실체를 확인하는 과정과 죽은 로직을 방치하지 않기 위한 현실적인 대응 방안을 공유합니다
2026-09-10 · 7 min read
#sql#레거시#데이터품질
링크 테이블을 조인해 SUM 하면 파일 하나를 여러 번 센다
링크 테이블을 조인해 SUM 하면 파일 하나를 여러 번 센다
링크 테이블을 조인해 SUM하면 같은 파일이 여러 번 더해져, 중복 링크는 전체의 2%뿐인데도 400GB 넘게 과다 계상됩니다. 물리 파일로 되돌려 더해야 합니다.
2026-09-10 · 7 min read
#postgresql#sql#집계
자동완성이 다시 안 뜬다 — 닫힘 상태를 값으로 저장했을 때
자동완성이 다시 안 뜬다 — 닫힘 상태를 값으로 저장했을 때
자동완성 닫힘 상태를 검색어 값으로 기억하면 지웠다 같은 값을 다시 입력했을 때(IME 수정 동작) 패널이 영영 안 열립니다. 값 대신 편집 횟수 카운터로 바꿔야 합니다.
2026-09-07 · 12 min read
#react#ime#frontend#상태관리
코딩 에이전트의 할 일을 애플 미리알림에 (2) — 구조와 세팅
코딩 에이전트의 할 일을 애플 미리알림에 (2) — 구조와 세팅
코딩 에이전트의 할 일을 애플 미리알림과 동기화하는 하네스입니다. 제목 대신 메모(body)에 세션별 고유 키를 심어 여러 세션이 리스트 하나를 공유해도 서로의 항목을 건드리지 않고, 세션 종료 시 자동 정리됩니다.
2026-09-01 · 19 min read
#applescript#macos#claude-code#automation#hooks
코딩 에이전트의 할 일을 애플 미리알림에 (1) — 되는 것, 안 되는 것, 5초의 함정
코딩 에이전트의 할 일을 애플 미리알림에 (1) — 되는 것, 안 되는 것, 5초의 함정
맥 미리알림을 AppleScript로 제어하면 섹션·태그는 다룰 수 없지만 깃발로 대신할 수 있고, 항목 참조를 변수에 담아 속성을 쓰면 속성당 5초가 붙어 참조 없이 한 번에 쓰면 9배 빨라집니다.
2026-09-01 · 17 min read
#applescript#macos#claude-code#automation
화이트라벨 앱에 소셜 로그인을 붙일 때 본앱 SDK를 그대로 못 쓰는 이유
화이트라벨 앱에 소셜 로그인을 붙일 때 본앱 SDK를 그대로 못 쓰는 이유
화이트라벨 앱에 본앱 소셜 로그인 SDK를 그대로 붙이면 로그인은 되지만, 소셜 ID가 앱마다 다르게 발급돼 서버가 계정을 엉뚱하게 매핑합니다. 인증수단과 앱 출처를 별도 축으로 분리해야 합니다.
2026-08-27 · 10 min read
#mobile#oauth#social-login#whitelabel#android
macOS의 sort·uniq은 UTF-8 로케일에서 한글을 전부 같은 값으로 본다
macOS의 sort·uniq은 UTF-8 로케일에서 한글을 전부 같은 값으로 본다
macOS의 sort와 uniq 명령어가 UTF-8 환경에서 한글 등 비ASCII 문자를 동일하게 취급해 데이터를 유실하는 문제를 설명하고 LC_ALL=C를 통한 바이트 단위 비교 해결책과 검산의 중요성을 제안합니다
2026-08-27 · 9 min read
#shell#macos#locale#unix
복사했더니 빈 값 — innerText는 화면에 보이는 것만 읽는다
복사했더니 빈 값 — innerText는 화면에 보이는 것만 읽는다
content-visibility:auto 로 접어 둔 긴 글을 innerText 로 읽으면 화면 밖 부분이 렌더되지 않아 빈 문자열이 복사됩니다. display:none 은 전문을 돌려주니, 데이터 그대로가 필요하면 textContent 를 씁니다.
2026-08-27 · 8 min read
#frontend#dom#javascript#debugging
거짓 성공을 만드는 방어 코드 — 동적 UPDATE에서 컬럼을 조용히 건너뛸 때
거짓 성공을 만드는 방어 코드 — 동적 UPDATE에서 컬럼을 조용히 건너뛸 때
동적 UPDATE문에서 특정 컬럼을 조용히 제외하는 방어 코드는 실패를 숨겨 데이터 무결성을 해칠 수 있습니다. 예외를 삼키는 대신 입구에서 검증하거나 실패를 명확히 응답하여 시스템의 정직함을 유지하는 설계 방법을 제안합니다
2026-08-26 · 9 min read
#backend#sql#error-handling#api-design
툴팁으로 감쌌더니 옆 요소가 밀려났다 — 래퍼가 가져가는 flex 성질
툴팁으로 감쌌더니 옆 요소가 밀려났다 — 래퍼가 가져가는 flex 성질
툴팁 같은 래퍼 컴포넌트가 부모의 flex 계산에 개입해 레이아웃을 깨뜨리는 문제를 해결하기 위해 래퍼의 flex 속성을 옵션으로 분리하고 레이아웃 설계 시 호출부의 영향력을 고려하는 방법을 제안합니다
2026-08-21 · 8 min read
#css#flexbox#react#컴포넌트설계
vi.mock이 안 먹는 이유 — vitest isolate:false와 모듈 캐시
vi.mock이 안 먹는 이유 — vitest isolate:false와 모듈 캐시
isolate: false 로 모듈 캐시가 파일 간에 공유되면, 다른 파일이 먼저 로드한 모듈에서는 vi.mock이 무력화됩니다. vi.spyOn으로 객체 메서드를 교체하면 해결됩니다.
2026-08-21 · 7 min read
#vitest#testing#javascript#mocking
렌더 실패가 앱 밖으로 새는 이유 — 라이브러리가 document.body에 그릴 때
렌더 실패가 앱 밖으로 새는 이유 — 라이브러리가 document.body에 그릴 때
렌더 라이브러리가 실패 시 document.body에 만든 임시 div를 정리 직전에 throw해, catch로 예외를 삼켜도 화면에 잔재가 누적됩니다. 컨테이너를 직접 만들어 finally에서 제거해야 합니다.
2026-08-20 · 11 min read
#frontend#dom#react#testing
드롭한 폴더는 0바이트 파일로 온다 — webkitGetAsEntry 로 가려내기
드롭한 폴더는 0바이트 파일로 온다 — webkitGetAsEntry 로 가려내기
드래그로 드롭한 폴더는 size 0인 File로 섞여 들어와 파일과 구분되지 않는데, drop 핸들러 안에서 동기로 webkitGetAsEntry()를 호출해야 폴더를 가려낼 수 있습니다.
2026-08-14 · 10 min read
#frontend#drag-and-drop#browser-api#ux
사파리에서만 클립보드 복사가 실패하는 이유 — transient activation
사파리에서만 클립보드 복사가 실패하는 이유 — transient activation
사파리에서 클립보드 복사가 실패하는 이유는 비동기 네트워크 요청으로 인해 사용자 제스처가 만료되기 때문이며 이를 해결하려면 복사 로직을 요청보다 앞서 실행하거나 Promise를 활용해 쓰기를 예약해야 합니다
2026-08-11 · 7 min read
#frontend#safari#clipboard#browser-api
idx_scan=0 은 인덱스가 필요없다는 뜻이 아니다 — OR 한쪽이 인덱스를 잠근다
idx_scan=0 은 인덱스가 필요없다는 뜻이 아니다 — OR 한쪽이 인덱스를 잠근다
OR로 묶인 조건은 한쪽에 인덱스가 없으면 전체가 Seq Scan으로 떨어져, idx_scan=0인 인덱스도 불필요해서가 아니라 잠긴 것일 수 있습니다. 쿼리를 둘로 분리하자 응답이 3,866ms에서 137ms로 줄었습니다.
2026-08-07 · 9 min read
#postgresql#index#pg_trgm#performance