/
https://42jerrykim.github.io/ _index.md
CPU가 하드웨어 이벤트에 즉시 반응하는 인터럽트와, 사용자 프로그램이 커널 기능을 요청하는 시스템 콜의 원리를 사용자 모드·커널 모드 전환과 함께 다룹니다. 시스템 콜 비용을 줄이기 위해 언제 버퍼링·배치를 고려해야 하는지도 설명합니다.
B-Tree 인덱스는 정확 일치·범위 검색에 강하지만 본문 검색에는 약합니다. 역색인이 단어를 문서 목록에 매핑해 이 문제를 푸는 원리와 SQL 예시를 다루고, 토큰화·불용어 제거·형태소 분석 과정까지 함께 설명합니다.
버블·삽입·선택정렬 같은 O(n²) 단순 정렬과 병합·퀵정렬 같은 O(n log n) 분할정복 정렬을 비교하고, 안정 정렬 개념과 퀵정렬 최악의 경우를 C 코드로 다룹니다.
제네릭은 정적 타입 언어에서 타입마다 로직을 중복 작성하지 않도록 타입을 매개변수화합니다. 오버로딩·오버라이딩·제네릭이라는 다형성의 세 형태를 TypeScript·Java 코드로 구분하고, Java의 타입 소거로 인한 실무 함정도 함께 다룹니다.
제로 트러스트는 내부 네트워크도 신뢰하지 않고 모든 요청을 위치와 무관하게 매번 검증하는 모델입니다. 경계 방어의 한계, Never trust, always verify 원칙, 마이크로세그멘테이션과 NIST SP 800-207 표준을 다룹니다.
가중치 없는 그래프의 BFS 최단경로와 가중치 있는 그래프의 다익스트라 알고리즘을 비교하고, 음수 가중치에서 다익스트라가 실패하는 구체적 반례와, 이를 해결하는 벨만-포드 알고리즘의 동작 원리·시간 복잡도·음수 사이클 검출 기능까지 함께 다룹니다.
레지스터-L1-L2-L3-메인메모리로 갈수록 용량은 커지고 속도는 느려지는 캐시 계층 구조를 설명하고, 캐시 라인과 지역성이 성능에 미치는 영향, 캐시 미스의 세 종류(compulsory/capacity/conflict)를 코드 예제와 함께 다룹니다.
하이퍼바이저 기반 VM과 커널 네임스페이스·cgroup 기반 컨테이너의 격리 수준·오버헤드 차이를 비교하고, unshare 시스템 콜로 PID 네임스페이스를 직접 만들어보는 코드와 언제 무엇을 선택할지의 판단 기준을 다룹니다.
코드 리뷰는 병합 전 마지막 검토 관문으로, 버그뿐 아니라 결합도·응집도 같은 설계 문제를 잡아낸다. 병목이 되지 않으려면 작은 단위로 자주 올려야 하는 이유와, PR을 언제 쪼개야 하는지 구체적인 판단 기준까지 함께 다룹니다.
코루틴은 OS 스레드보다 훨씬 가벼운 사용자 수준 실행 단위로, I/O 대기 중 스레드를 블로킹하지 않고 다른 작업으로 전환합니다. Python asyncio의 async/await 코드로 이벤트 루프의 전환 원리를 설명합니다.