/
https://42jerrykim.github.io/ _index.md
수동 메모리 관리는 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가 더 가벼운 선택인지 다룹니다.
한 서비스의 장애가 이를 호출하는 다른 서비스로 연쇄 전파되는 문제와, 실패율이 임계값을 넘으면 타임아웃 중인 호출을 차단해 장애 확산을 막는 서킷 브레이커의 Closed/Open/Half-Open 상태 전이, 그리고 서비스 메시 계층에서의 적용까지 다룹니다.
세그먼트 트리는 구간 합·구간 최솟값 같은 구간 쿼리를 O(log n)에 처리하는 트리입니다. 배열 순회 대비 이점과 트리 구축·쿼리 원리를 컴파일 가능한 C 코드로 다루고, 배열 크기 산정·경계 조건에서 흔히 나는 구현 버그도 함께 짚습니다.
세마포어는 값이 0/1인 뮤텍스와 달리 정수 카운트로 여러 스레드의 동시 진입을 허용하는 동기화 도구입니다. 커넥션 풀 예시, POSIX 세마포어 코드, 락+조건 변수를 캡슐화한 모니터까지 다루며, 언제 세마포어 대신 모니터를 써야 하는지 비교합니다.