TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
138913881387138613851384138313821381138013791378
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은 "의도적으로 비움". 언제 뭐가 튀어나오는지 정리한다.
Frontend
TypeScript any·unknown·never 차이와 실전 사용
any는 타입 검사를 끄고, unknown은 검사를 강제하며, never는 절대 없는 값이다. 이 셋을 구분해 쓰면 타입 안전성이 확 올라간다.
Frontend
WebP·AVIF 이미지 최적화 — 언제 무엇을 쓰나
같은 사진을 JPEG 대신 WebP·AVIF로 바꾸면 용량이 절반 이하다. 포맷별 차이, picture 태그로 안전하게 폴백하는 법, 실무 선택 기준.
Tools
lsof로 포트·파일 누가 잡고 있는지 찾기
"파일이 사용 중이라 삭제가 안 된다", "포트가 이미 쓰인다"의 범인을 찾는 만능 도구 lsof. 열린 파일·소켓을 추적하는 실전 사용법.