TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
144614451444144314421441144014391438143714361435
Frontend
oklch() — 예측 가능한 밝기로 디자인 토큰 팔레트 만들기
oklch()로 밝기가 일관된 디자인 토큰 팔레트를 만드는 법. HSL이 색상마다 밝기가 달라 배신하는 이유, 상대 색상(from) 문법, P3 넓은 색역과 sRGB 클리핑 주의점까지 예제 코드와 함께 정리했다.
AI
LLM 스트리밍 UX — 토큰이 흐를 때의 경험 설계
LLM 스트리밍 UX 설계를 다룬다. TTFT와 체감 지연, 멈춤 버튼과 렌더 버퍼링, 추론·도구 호출 중 생기는 침묵을 메우는 법, 스트림 끊김과 최종본 확인까지 토큰이 흐를 때 사용자 경험을 좌우하는 결정들을 정리했다.
Etc
유니코드 정규화 NFC/NFD — 같아 보이는 한글이 다른 이유
화면엔 똑같은 한글인데 ===가 false인 귀신 버그. macOS 파일이 Linux에서 깨지는 이유가 바로 NFC/NFD 정규화입니다. 원리와 입력 경계 정규화 대응법을 정리했습니다.
Database
부분 인덱스 — WHERE로 인덱스를 작게 만드는 기술
WHERE 조건으로 일부 행만 인덱싱하는 부분 인덱스. 소프트 삭제 유니크, 치우친 상태값 최적화 등 실전 사례와 immutable 조건 같은 함정을 정리했다.
Infra
컨테이너 이미지 서명 — cosign 키리스 서명으로 공급망 지키기
코드가 아니라 레지스트리의 이미지 하나로 프로덕션이 뚫린다. cosign 키리스 서명, SBOM·프로버넌스, admission 강제까지 컨테이너 공급망 방어를 층층이 쌓는 법.
Backend
데드레터 큐(DLQ) — 독약 메시지가 큐를 막지 않게
처리 못 한 메시지가 큐 전체를 마비시키는 독약 메시지 문제와 DLQ로 격리·재처리하는 법. max receive count, redrive, 멱등 재처리까지 정리했습니다.
Frontend
inert 속성 — 화면 밖 UI의 포커스와 스크린리더를 막는 표준 방법
inert 속성으로 화면 밖 UI의 키보드 포커스와 스크린리더 접근을 표준 방식 한 줄로 차단하는 법. aria-hidden·display:none과의 결정적 차이, 드로어와 커스텀 모달 배경에서의 실전 활용을 정리했다.
AI
임베딩 실전 — 정규화·차원 축소(Matryoshka)·유사도 함정
임베딩 실전 — L2 정규화와 코사인·내적을 헷갈리면 검색이 조용히 망가진다. Matryoshka 차원 축소, 질의·문서 비대칭 임베딩, 모델 교체 시 전체 재색인까지 벡터 검색 품질을 좌우하는 설정들을 실수 사례와 함께 정리했다.
Tools
잠금 파일과 재현 가능한 빌드 — npm ci를 써야 하는 이유
내 컴퓨터에선 되는데 CI에선 깨지는 유령 버그의 정체는 잠금 파일입니다. package.json 범위와 lockfile의 차이, npm install과 ci의 결정적 차이를 실무 규칙과 함께 정리했습니다.
Database
HNSW vs IVFFlat — 벡터 인덱스 두 종류, 언제 무엇을
pgvector의 두 벡터 인덱스 HNSW와 IVFFlat을 리콜·속도·메모리·증분 갱신 관점으로 비교. 파라미터 튜닝과 필터 조합 함정까지 RAG 실무 기준으로 정리했다.
Infra
Argo Rollouts — 지표로 자동 판정하는 카나리 배포
그라파나 앞에서 카나리를 노려보는 일을 규칙으로 넘긴다. Argo Rollouts의 AnalysisTemplate으로 에러율·지연을 보고 자동 롤백하는 점진적 배포 구성법을 정리했다.
Backend
트랜잭셔널 아웃박스 패턴 — 이중 쓰기 문제를 없애는 법
DB 저장과 메시지 발행 사이의 이중 쓰기 문제를 outbox 테이블로 푸는 법. 폴링과 CDC 릴레이, at-least-once와 멱등 소비자까지 실전 관점으로 설명합니다.