TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
686766656463626160595857
Backend
ReDoS — 정규식 하나가 서버를 멈추는 취약점
입력 몇 글자에 CPU가 100%로 치솟고 서버가 멎는다. 취약한 정규식의 "재앙적 백트래킹" 원리와, 안전하게 짜는 법.
Etc
Big-O 표기법 — 실무 개발자를 위한 최소한
알고리즘 이론이 아니라, 코드가 데이터 10배 커지면 얼마나 느려지는지 가늠하는 도구. O(1)·O(n)·O(n²)만 알아도 대부분의 성능 사고를 예방한다.
Database
인덱스의 단점 — 언제 인덱스를 만들지 말아야 하나
인덱스는 조회를 빠르게 하지만 공짜가 아니다. 쓰기 성능 저하, 저장공간, 안 타는 인덱스까지. 무작정 다는 게 답이 아닌 이유.
Frontend
이벤트 위임 — 동적으로 추가한 요소에 클릭이 안 먹을 때
나중에 JS로 추가한 버튼에 addEventListener가 안 먹는 이유와, 부모에 한 번만 걸어 모두 처리하는 이벤트 위임 패턴을 정리한다.
Frontend
WebP·AVIF 이미지 최적화 — 언제 무엇을 쓰나
같은 사진을 JPEG 대신 WebP·AVIF로 바꾸면 용량이 절반 이하다. 포맷별 차이, picture 태그로 안전하게 폴백하는 법, 실무 선택 기준.
Database
EXPLAIN ANALYZE 읽는 법 — 느린 쿼리 진단
Seq Scan·Nested Loop·actual time·rows 추정 오차. EXPLAIN ANALYZE에서 진짜 병목을 찾는 읽기 순서.
Database
복합 인덱스 컬럼 순서, 왜 중요한가
복합 인덱스 (a,b)는 a로 시작하는 조건엔 쓰이지만 b만으론 못 탄다. 등호·범위·정렬을 고려한 순서 설계.
Database
DB 커넥션 풀 사이즈, 크게 잡을수록 좋은 게 아니다
풀을 무작정 키우면 DB가 컨텍스트 스위칭으로 더 느려진다. 코어 수 기반 공식과 서버리스 환경의 함정.
Database
Redis 캐시 무효화 전략과 흔한 함정
"캐시 무효화는 컴퓨터과학 2대 난제." TTL·쓰기 시 무효화·캐시 스탬피드·일관성 트레이드오프를 실무 기준으로.
Database
N+1 쿼리 문제, 발견과 해결
목록 1번 + 각 항목마다 1번씩 쿼리가 나가는 N+1은 성능 킬러다. eager loading·조인·in 절·DataLoader로 한 방에 줄인다.
Database
PostgreSQL 인덱스를 만들었는데 안 타는 이유
인덱스가 있어도 Seq Scan을 하는 건 이유가 있다. 함수 가공·형변환·낮은 선택도·통계 부재 등 원인을 EXPLAIN으로 짚는다.
Backend
Node.js 메모리 누수 찾기 — 힙 스냅샷 실전
시간이 지날수록 메모리가 계속 오른다면 누수다. 전역 캐시·이벤트 리스너·클로저가 단골 범인. 힙 스냅샷 비교로 추적.