/
https://42jerrykim.github.io/ _index.md
레이트 리미팅은 짧은 시간에 과도한 요청을 보내는 클라이언트를 제한해 서비스 남용과 무차별 대입 공격을 막습니다. 토큰 버킷과 슬라이딩 윈도우 알고리즘을 코드로 비교하고, API 게이트웨이·로그인 방어에 적용하는 실무 사례와 429 응답 처리까지 다룹니다.
레지스터가 캐시·메인 메모리보다 빠른 이유를 CPU 내부의 물리적 위치와 접근 방식으로 설명하고, 명령어 집합 구조(ISA)가 소프트웨어와 하드웨어를 잇는 계약이라는 개념, RISC와 CISC의 설계 철학 차이를 다룹니다.
CPU의 L1/L2/L3 캐시 계층 개념을 애플리케이션 레벨로 확장합니다. 브라우저 캐시부터 CDN, Redis, DB 캐시까지 이어지는 계층 구조와 캐시 미스 전파를, Cache-Aside 코드와 계층 수를 정하는 판단 기준까지 함께 다룹니다.
수동 메모리 관리는 use-after-free, 이중 해제 같은 버그를 낳습니다. Rust의 소유권·빌림 규칙이 이런 버그를 컴파일 시점에 원천 차단하는 원리를 가비지 컬렉션과 대비해 설명합니다.
서비스 간 직접 동기 호출 대신 큐를 거쳐 비동기로 통신하는 방식이 만드는 느슨한 결합과 부하 완충 효과, at-least-once와 at-most-once 전달 보장을 다룹니다. 소비자 로직이 멱등해야 하는 이유와 순서 보장이 깨지는 상황도 함께 다룹니다.
같은 요청을 여러 번 보내도 결과가 한 번 보낸 것과 같아야 한다는 멱등성의 원리와, 네트워크 재시도가 분산 시스템에서 필수인 이유, 멱등키 패턴을 다룹니다. GET·PUT·DELETE·POST의 멱등성 여부와 판단 기준을 실행 가능한 코드로 설명합니다.
방화벽은 IP·포트 규칙으로 트래픽을 허용·차단하고, NAT는 사설 IP를 공인 IP로 변환해 여러 기기가 하나의 공인 IP를 공유하게 합니다. 상태 기반 방화벽의 연결 추적 방식과, 외부에서 내부 서버로 접속하려면 필요한 포트 포워딩 설정까지 함께 다룹니다.
분산 시스템에서 물리적 시계로는 이벤트의 선후 관계를 정확히 알 수 없는 이유와, 각 노드가 카운터 벡터를 유지해 인과 순서를 판단하는 벡터 시계의 원리를 다룹니다.
부호·지수·가수로 실수를 근사하는 IEEE 754 형식을 설명하고, 0.1+0.2가 정확히 0.3이 되지 않는 이유와 부동소수점 값을 비교할 때 epsilon 오차 허용이 필요한 이유를 컴파일 가능한 C 코드로 재현해 다룹니다.
SSE는 서버가 하나의 HTTP 연결로 클라이언트에게 단방향 실시간 스트림을 보내는 표준 기술입니다. text/event-stream 형식과 EventSource의 자동 재연결, 웹소켓의 양방향 통신과 비교해 언제 SSE가 더 가벼운 선택인지 다룹니다.