TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
138613851384138313821381138013791378137713761375
Backend
SQL 인젝션, 아직도 1위 취약점 — 원리와 막는 법
문자열로 쿼리를 조립하면 입력값이 SQL 문법으로 해석돼 뚫린다. 파라미터 바인딩(prepared statement) 하나면 대부분 막힌다. 원리와 실전 방어.
Backend
API 키가 GitHub에 올라갔을 때 — 유출 대응 절차
커밋에 실수로 넣은 키는 히스토리에 영원히 남는다. .gitignore로는 못 지운다. 즉시 폐기부터 히스토리 제거까지 올바른 대응 순서를 정리한다.
Backend
CSRF 공격과 방어 — SameSite 쿠키까지
로그인된 사용자를 속여 의도치 않은 요청을 보내는 CSRF. 원리부터 CSRF 토큰, SameSite 쿠키까지 현대적 방어 조합을 정리한다.
Frontend
이벤트 위임 — 동적으로 추가한 요소에 클릭이 안 먹을 때
나중에 JS로 추가한 버튼에 addEventListener가 안 먹는 이유와, 부모에 한 번만 걸어 모두 처리하는 이벤트 위임 패턴을 정리한다.
Frontend
== 와 === — JavaScript 타입 강제변환의 함정
0 == "", null == undefined, [] == ![]... == 는 타입을 멋대로 변환해 직관을 배신한다. === 를 기본으로 써야 하는 이유를 규칙으로 정리.
Frontend
null과 undefined 차이 — 언제 무엇이 나오나
둘 다 "값이 없음"이지만 의미가 다르다. undefined는 "아직 할당 안 됨", null은 "의도적으로 비움". 언제 뭐가 튀어나오는지 정리한다.
Frontend
TypeScript any·unknown·never 차이와 실전 사용
any는 타입 검사를 끄고, unknown은 검사를 강제하며, never는 절대 없는 값이다. 이 셋을 구분해 쓰면 타입 안전성이 확 올라간다.
Frontend
WebP·AVIF 이미지 최적화 — 언제 무엇을 쓰나
같은 사진을 JPEG 대신 WebP·AVIF로 바꾸면 용량이 절반 이하다. 포맷별 차이, picture 태그로 안전하게 폴백하는 법, 실무 선택 기준.
Tools
lsof로 포트·파일 누가 잡고 있는지 찾기
"파일이 사용 중이라 삭제가 안 된다", "포트가 이미 쓰인다"의 범인을 찾는 만능 도구 lsof. 열린 파일·소켓을 추적하는 실전 사용법.
Frontend
0.1 + 0.2 는 왜 0.3이 아닌가 — 부동소수점과 돈 계산
JavaScript에서 0.1 + 0.2가 0.30000000000000004가 되는 건 버그가 아니라 부동소수점의 원리다. 왜 그런지와 돈 계산을 안전하게 하는 법.
Infra
Permission denied (publickey) — SSH 접속 오류 잡기
SSH 접속에서 가장 흔한 이 에러는 원인이 몇 가지로 정해져 있다. 키 위치·권한·서버 등록·에이전트를 순서대로 점검하면 대부분 해결된다.
Infra
OOM Killer가 프로세스를 죽였다 — dmesg로 확인하고 대응
앱이 이유 없이 종료됐다면 리눅스 OOM Killer를 의심하라. dmesg로 범인을 확인하고, 왜 죽였는지와 재발을 막는 법을 정리한다.