2022
an archive of posts from this year
-
종합 - 주소창에 URL을 입력하면 일어나는 일
Enter를 누른 순간부터 페이지가 뜨기까지, 1초 안에 시리즈의 모든 계층이 동원된다. 다섯 편의 내용을 하나의 흐름으로 관통하는 마지막 편.
-
응용 계층 (DNS/HTTP) - 이름을 찾고, 대화한다
사람은 IP 주소가 아니라 이름을 쓴다. 이름을 주소로 바꾸는 분산 시스템 DNS, 그리고 그 주소 위에서 웹이 대화하는 언어 HTTP.
-
전송 계층 (TCP/UDP) - 신뢰성은 선택이다
IP가 약속하지 않은 신뢰성은 누가 보장하는가? 프로세스를 구분하는 포트, 신뢰성을 쌓아 올린 TCP, 그리고 그 비용을 거부한 UDP.
-
인터넷 계층 (IP) - 주소를 보고 길을 찾는다
수많은 네트워크를 건너 목적지 호스트까지 어떻게 가는가? 계층적 주소인 IP, 홉마다 다음 길을 정하는 라우팅, 그리고 도착을 약속하지 않는 최선형 설계.
-
링크 계층 - 같은 네트워크 안에서의 배달
같은 네트워크 안의 두 장비는 서로를 어떻게 찾는가? MAC 주소와 스위치, 그리고 IP 주소를 MAC 주소로 바꿔주는 ARP.
-
동시성 버그와 디버깅
동시성 버그는 왜 "가끔"만 터지는가? 데드락·데이터 레이스·false sharing의 정체와, ThreadSanitizer로 재현 어려운 버그를 잡아내는 법.
-
네트워크와 계층화 - 인터넷은 왜 층으로 나뉘었나
거대한 통신 문제를 어떻게 나눌 것인가? 패킷 교환이라는 선택, 그리고 각 계층이 자기 책임만 지도록 만든 계층화 설계.
-
atomic과 메모리 모델
잠금 없이 공유하는 건 어떻게 가능한가? std::atomic과 CAS, 컴파일러·CPU의 재배치, 그리고 seq_cst·acquire/release·relaxed 메모리 오더링과 happens-before.
-
future, promise, async로 결과 다루기
스레드가 계산한 결과 하나를 어떻게 돌려받는가? mutex+cv 배관을 걷어내는 future/promise, std::async, packaged_task, 그리고 스레드 경계를 넘는 예외 전파.
-
condition_variable과 동기화 패턴
조건이 충족될 때까지 스레드를 어떻게 재웠다 깨우는가? 바쁜 대기를 없애는 condition_variable, lost/spurious wakeup을 막는 이유, 그리고 생산자·소비자 작업 큐.
-
mutex와 RAII 기반 잠금
여러 스레드가 같은 데이터를 동시에 만지면 왜 망가지는가? race condition을 막는 mutex, 예외에도 안전한 RAII 잠금(lock_guard·unique_lock), 그리고 읽기/쓰기를 구분하는 shared_mutex.
-
인터페이스(Interface)
인터페이스는 객체 간의 상호작용을 위한 계약 역할을 담당한다.
-
스레드 만들고 관리하기
실행 흐름을 여러 개 띄운다는 건 무슨 뜻인가? std::thread로 스레드를 만들고 join/detach로 수명을 관리하는 법, 그리고 C++20 jthread의 자동 join과 협력적 취소.