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