Skip to content

Web

  • Published on
    2009년부터 2014년 사이에 만들어진 단축 링크 65만여 개를 2026년에 전부 따라가 본 조사가 공개됐습니다. 결과보다 중요한 것은 실패의 구성입니다. 죽은 링크의 대부분은 404가 아니라 연결 자체가 되지 않는 상태였고, 이는 내용이 옮겨진 것이 아니라 인프라가 사라졌다는 뜻입니다. 조사 방법의 한계까지 짚은 뒤에, 외부 URL을 데이터로 보관하는 시스템에서 무엇을 다르게 해야 하는지 정리합니다.
  • Published on
    CORS는 서버를 지키는 보안 장치가 아니라 브라우저가 스크립트에게 응답을 읽게 해 줄지 판단하는 정책입니다. 그래서 curl은 되고 브라우저만 막히며, 고칠 곳은 언제나 서버의 응답 헤더입니다. 프리플라이트가 발생하는 정확한 조건, credentials를 쓸 때 와일드카드를 못 쓰는 이유, Vary 헤더가 없어서 CDN 캐시가 오염되는 사고, 브라우저 에러 메시지별 원인 해독표를 정리했습니다. 프록시 우회가 정당한 경우와 아닌 경우, 개발할 때 브라우저 보안을 끄라는 조언이 왜 나쁜지, 그리고 CORS가 CSRF를 막아 주지 않는다는 가장 위험한 오해까지 다룹니다.
  • Published on
    no-cache는 캐시하지 말라는 뜻이 아니라 캐시하되 쓰기 전에 검증하라는 뜻입니다. 이 한 글자 차이를 시작으로 Cache-Control 지시어의 정확한 의미, 조건부 요청과 304가 실제로 절약하는 것과 절약하지 못하는 것, 해시 파일명과 immutable이 프런트엔드 배포의 표준이 된 이유를 정리했습니다. 브라우저와 CDN과 리버스 프록시라는 세 계층이 서로 다른 방식으로만 무효화된다는 사실, Vary 헤더가 캐시 키를 폭발시키는 과정, stale-while-revalidate가 지연과 신선도를 동시에 잡는 원리도 다룹니다. 마지막으로 인증된 API 응답을 공유 캐시에 흘려 다른 사용자에게 노출하는 고전적 사고와 그 회피 설계를 짚습니다.
  • Published on
    JWT와 세션의 차이는 암호화나 성능이 아니라 인증 상태를 서버에 둘 것인가 클라이언트에 둘 것인가 하나입니다. 이 선택에서 즉시 무효화 불가능이라는 JWT의 근본 약점이 따라 나오고, 짧은 만료와 리프레시 토큰과 블랙리스트라는 대응책이 왜 결국 상태를 다시 불러들이는지가 설명됩니다. 토큰 저장 위치를 두고 벌어지는 localStorage의 XSS 노출과 httpOnly 쿠키의 CSRF 노출을 SameSite 속성까지 포함해 비교하고, alg none과 서명 검증 누락 같은 고전적 구현 취약점을 코드로 짚습니다. 세션이 실제로 확장에 문제가 되는 시점은 대부분의 예상보다 훨씬 늦다는 계산과, 대부분의 웹 앱에는 세션 쿠키가 낫다는 결론까지 정리했습니다.
  • Published on
    분당 100회로 막았는데 200회가 통과하는 것은 버그가 아니라 고정 윈도우 알고리즘의 정의된 동작입니다. 고정 윈도우, 슬라이딩 로그, 슬라이딩 윈도우 카운터, 토큰 버킷 네 가지의 메모리와 정확도 트레이드오프를 표로 비교하고 경계 문제를 숫자로 확인합니다. 분산 환경에서 레디스 원자적 연산이 왜 필요한지, 노드별 로컬 리밋이 만드는 오차가 얼마나 되는지, IP를 키로 삼으면 무엇이 깨지는지 정리했습니다. 429 응답과 Retry-After, RateLimit 헤더로 클라이언트에게 상태를 알려 주는 방법과, 지터 없는 지수 백오프가 썬더링 허드를 만드는 과정까지 다룹니다.
  • Published on
    실시간이라는 요구사항 대부분은 서버에서 클라이언트로 가는 단방향 전달이고, 그런 경우 SSE가 웹소켓보다 훨씬 단순하면서 HTTP 인프라를 그대로 씁니다. 자동 재연결과 Last-Event-ID 재개가 규격에 내장되어 있고 인증과 로깅과 압축이 평소 쓰던 것과 같습니다. 폴링과 롱폴링을 포함한 네 방식의 지연과 비용을 표로 비교하고, 웹소켓이 정말 필요한 경계를 정합니다. 프록시 유휴 타임아웃과 버퍼링, HTTP/1.1의 커넥션 한도, 수평 확장 시 필요한 펍섭, 하트비트와 백프레셔 설계, 그리고 동시 연결 수에 따른 메모리 계산까지 실제 운영에서 부딪히는 것들을 정리했습니다.
  • Published on
    2026년 2월 Safari 26.3이 Content-Encoding: zstd를 지원하면서, Chrome 123(2024-03)·Firefox 126(2024-05)에 이어 3대 브라우저 엔진이 모두 zstd 응답을 받게 됐습니다. 협상 기반이라 도입 리스크는 낮지만, 서버 쪽은 아직 비대칭입니다 — nginx와 Apache httpd에는 공식 zstd 모듈이 없고, 현실적인 경로는 CDN(Cloudflare 등)이나 Caddy, Node.js v23.8.0의 node:zlib입니다. 이 글은 zstd 프로젝트 자체 벤치마크(조건 포함)로 zstd가 실제로 사 주는 것을 정리하고, 다음 단계인 RFC 9842 압축 사전 전송(dcb/dcz)의 동작과 실측 수치 — RFC 공저자의 테스트(YouTube JS 번들 등)와 Google 검색의 실배포 결과(HTML 페이로드 평균 23% 감소, LCP 개선은 1.7%) — 를 출처와 측정 조건과 함께 살펴봅니다. 사전 압축이 답이 아닌 경우(Discord가 사전을 접고 plain zstd 스트리밍으로 간 사례), 사전을 쿠키처럼 취급해야 하는 프라이버시 규정, 운영 비용도 같이 다룹니다.
  • Published on
    주소창에 URL을 치고 엔터를 누르는 그 1초 사이에 얼마나 많은 일이 일어날까요. URL 파싱부터 DNS 재귀 질의와 캐시, TCP 3-way 핸드셰이크, TLS 핸드셰이크, HTTP 요청과 응답, 그리고 HTML 파싱과 크리티컬 렌더링 경로까지. 브라우저부터 픽셀까지 전 구간을 한 번에 훑는 웹 스택 투어입니다.
  • Published on
    Rust로 웹 백엔드를 만드는 실전 안내입니다. Axum의 핸들러·추출기·라우팅·공유 상태, tower 미들웨어, serde로 JSON 다루기, sqlx로 데이터베이스 연동, 견고한 에러 처리, 그리고 대표 경쟁자인 Actix Web과의 비교까지 예제 중심으로 정리합니다.
  • Published on
    소셜미디어 연령 인증 의무화 흐름과 그에 대한 프라이버시 우려를 짚고, 영지식 증명, Verifiable Credentials와 selective disclosure(SD-JWT), eIDAS 2.0 디지털 지갑, 디바이스 측 검증 모델까지 프라이버시를 보존하는 인증 기술을 개발자 관점에서 정리합니다. 기술이 풀 수 있는 것과 풀 수 없는 정책 문제를 균형 있게 다룹니다.