TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
133213311330132913281327132613251324132313221321
Database
DB 커넥션 풀 사이즈, 크게 잡을수록 좋은 게 아니다
풀을 무작정 키우면 DB가 컨텍스트 스위칭으로 더 느려진다. 코어 수 기반 공식과 서버리스 환경의 함정.
Database
Redis 캐시 무효화 전략과 흔한 함정
"캐시 무효화는 컴퓨터과학 2대 난제." TTL·쓰기 시 무효화·캐시 스탬피드·일관성 트레이드오프를 실무 기준으로.
Database
트랜잭션 격리수준과 데드락, 실무 기준
Read Committed로 충분한 경우가 대부분이지만, 잔액·재고는 더 강한 격리나 잠금이 필요하다. 데드락 회피 원칙까지.
Database
N+1 쿼리 문제, 발견과 해결
목록 1번 + 각 항목마다 1번씩 쿼리가 나가는 N+1은 성능 킬러다. eager loading·조인·in 절·DataLoader로 한 방에 줄인다.
Database
PostgreSQL 테이블이 계속 커진다 — VACUUM과 부풀음
행을 지워도 디스크가 안 줄고 느려지는 건 MVCC 죽은 튜플(bloat) 때문. autovacuum·VACUUM·인덱스 재생성 정리.
Backend
.env 환경변수 관리와 흔한 유출 사고 막기
.env를 깃에 올려 키가 유출되는 사고가 흔하다. gitignore·시크릿 매니저·프론트 노출 변수 구분까지 안전 관리법.
Database
PostgreSQL 인덱스를 만들었는데 안 타는 이유
인덱스가 있어도 Seq Scan을 하는 건 이유가 있다. 함수 가공·형변환·낮은 선택도·통계 부재 등 원인을 EXPLAIN으로 짚는다.
Backend
결제 API 멱등성(idempotency), 중복 결제 막기
네트워크 재시도·더블클릭으로 같은 결제가 두 번 일어난다. Idempotency-Key로 "한 번만" 보장하는 표준 패턴.
Backend
Webhook 안전하게 받기 — 서명 검증과 멱등 처리
결제·외부 이벤트 webhook은 위조·중복 전송이 온다. HMAC 서명 검증으로 진위를, 이벤트 ID로 멱등성을 보장한다.
Backend
파일 업로드 서버 처리, multipart와 스트리밍
큰 파일을 메모리에 통째로 받으면 OOM 난다. 스트림으로 디스크/스토리지에 흘리고, 크기·확장자·MIME를 검증한다.
Backend
API rate limiting, 어떻게 구현하나 (토큰 버킷)
남용·DoS·비용 폭증을 막는 rate limit. 고정 윈도우의 경계 문제와 토큰 버킷·슬라이딩 윈도우 비교, Redis 구현.
Backend
비밀번호 해싱, bcrypt와 argon2 중 무엇을
비밀번호는 절대 평문·단순 해시(MD5/SHA) 저장 금지. bcrypt는 검증된 표준, argon2id는 현대 권장. 둘 다 안전하게 쓰는 법.