TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
139213911390138913881387138613851384138313821381
Tools
Git stash — 작업을 잠시 치워두고 브랜치 옮기기
커밋하기 애매한 작업 중에 급하게 다른 브랜치로 가야 할 때, stash로 변경사항을 잠시 서랍에 넣어두고 나중에 꺼내는 법. pop·apply·list 실전 정리.
Tools
좋은 커밋 메시지 쓰는 법 — Conventional Commits
"fix", "수정함" 같은 커밋 메시지는 6개월 뒤 나를 괴롭힌다. 왜·무엇을 남기는 규칙과 Conventional Commits로 자동 changelog까지.
AI
AI 코딩 도구 잘 쓰는 법 — 프롬프트보다 컨텍스트 관리
Copilot·Cursor·Claude Code가 엉뚱한 코드를 낸다면 프롬프트가 아니라 컨텍스트 문제일 때가 많다. 좋은 결과를 얻는 실전 습관을 정리한다.
AI
LLM temperature와 top_p — 출력이 매번 다를 때 조절법
같은 질문에 답이 들쭉날쭉하거나 너무 뻔하다면 샘플링 파라미터를 만질 때다. temperature와 top_p가 무엇을 조절하는지, 용도별 권장값까지.
AI
LLM 컨텍스트 윈도우 — 길다고 다 좋은 게 아니다
컨텍스트 윈도우가 크면 다 넣으면 될까? "중간을 잊는" 현상과 비용·지연 때문에 무작정 채우면 오히려 답이 나빠진다. 제대로 쓰는 법.
Backend
타임존 지옥 — UTC로 저장하고 변환해서 표시하기
"서버에선 맞는데 사용자에겐 9시간 어긋난다"는 타임존 문제의 정석 해법. 저장은 UTC, 표시할 때만 변환. 흔한 함정까지 정리한다.
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은 "의도적으로 비움". 언제 뭐가 튀어나오는지 정리한다.