/
https://42jerrykim.github.io/ _index.md
가중치 없는 그래프의 BFS 최단경로와 가중치 있는 그래프의 다익스트라 알고리즘을 비교하고, 음수 가중치에서 다익스트라가 실패하는 구체적 반례와, 이를 해결하는 벨만-포드 알고리즘의 동작 원리·시간 복잡도·음수 사이클 검출 기능까지 함께 다룹니다.
레지스터-L1-L2-L3-메인메모리로 갈수록 용량은 커지고 속도는 느려지는 캐시 계층 구조를 설명하고, 캐시 라인과 지역성이 성능에 미치는 영향, 캐시 미스의 세 종류(compulsory/capacity/conflict)를 코드 예제와 함께 다룹니다.
하이퍼바이저 기반 VM과 커널 네임스페이스·cgroup 기반 컨테이너의 격리 수준·오버헤드 차이를 비교하고, unshare 시스템 콜로 PID 네임스페이스를 직접 만들어보는 코드와 언제 무엇을 선택할지의 판단 기준을 다룹니다.
코드 리뷰는 병합 전 마지막 검토 관문으로, 버그뿐 아니라 결합도·응집도 같은 설계 문제를 잡아낸다. 병목이 되지 않으려면 작은 단위로 자주 올려야 하는 이유와, PR을 언제 쪼개야 하는지 구체적인 판단 기준까지 함께 다룹니다.
코루틴은 OS 스레드보다 훨씬 가벼운 사용자 수준 실행 단위로, I/O 대기 중 스레드를 블로킹하지 않고 다른 작업으로 전환합니다. Python asyncio의 async/await 코드로 이벤트 루프의 전환 원리를 설명합니다.
콘텐츠 협상은 같은 URL이 Accept·Accept-Language 헤더에 따라 형식·언어가 다른 응답을 주는 HTTP 메커니즘입니다. Vary 헤더가 캐싱과 상호작용하는 방식과, 협상 실패 시 406 응답·캐시 파편화 문제까지 함께 다룹니다.
쿠키는 매 요청에 자동으로 전송되는 브라우저 저장소이고, 로컬 스토리지는 JS로만 접근하는 저장소입니다. CSRF·XSS 위험과 HttpOnly·Secure 속성, 그리고 어떤 데이터를 어느 저장소에 둘지 판단하는 기준을 함께 다룹니다.
쿼리 플래너는 같은 SQL을 실행하는 여러 방법 중 통계를 근거로 가장 저렴한 것을 고르는 옵티마이저입니다. 조인 알고리즘 선택과 EXPLAIN 출력 읽는 법을 다룹니다.
클로저는 함수가 자신이 정의된 렉시컬 환경의 변수를 기억해 반환 후에도 접근하는 원리입니다. 렉시컬 스코프와 동적 스코프의 차이를 JavaScript 카운터 예시로 다루고, 클로저의 메모리 누수 위험과 언제 피해야 하는지도 정리합니다.
선형 탐색과 이진 탐색의 시간 복잡도를 비교하고, 이진 탐색이 정렬된 데이터를 전제로 하는 이유를 구간 배제 논리로 설명하며, 실무에서 흔한 오프바이원·오버플로 버그를 컴파일 가능한 C 코드와 종료 조건·중간값 계산·경계 갱신별 비교표로 함께 다룹니다.