시스템이 어떻게 동작하는지 이해하고 기록하기 위한 기술 노트 모음. Unix 설계 철학, 운영 환경, 개발 도구, 소프트웨어 구조, 실제 개발 과정에서 마주한 문제와 해결 과정을 정리한다. 단순한 튜토리얼보다 기술의 배경과 원리, 그리고 왜 그렇게 설계되었는지를 탐구하는 엔지니어링 기록에 가깝다.
인터넷은 거대한 시스템처럼 보이지만, 실제로는 수많은 작은 코드와 의존성 위에 세워진 구조다. 이 글은 left-pad, Log4Shell, Heartbleed와 같은 사건들을 통해 작은 코드 하나가 어떻게 전 세계 인프라를 흔들 수 있었는지, 그리고 우리가 의존하는 소프트웨어 생태계의 본질을 따라간다.
우리가 당연하게 사용하는 개발 방식은 자연스럽게 만들어진 것이 아니다. Git, GitHub, Stack Overflow, npm, Docker와 같은 도구들은 각각의 문제를 해결하는 과정에서 등장했고, 그 선택들이 쌓이며 오늘의 개발 문화가 형성되었다. 이 글은 그 흐름을 하나의 이야기로 정리한다.
Docker는 단순한 컨테이너 도구가 아니었다. 이 글에서는 Docker 이전의 배포 문제가 어떻게 구조적인 한계였는지, 그리고 Docker가 등장하며 개발과 운영, 인프라 관리 방식이 어떻게 근본적으로 바뀌었는지를 따라간다. DevOps와 Cloud Native 시대가 시작된 순간을 기술 역사 관점에서 살펴본다.
Git은 처음부터 세상을 바꾸기 위해 만들어진 도구가 아니었다. Linux 커널 개발 과정에서 발생한 협업 위기 속에서 탄생한 Git은 분산 버전관리라는 새로운 구조를 통해 개발 방식 자체를 바꾸었다. 이 글은 Git이 등장하게 된 배경과 그 구조가 어떻게 개발 문화를 바꾸었는지를 하나의 흐름으로 정리한다.
우리는 단순히 기능을 구현하는 것이 아니라, 신뢰할 수 없는 실행 환경을 견디기 위한 코드를 함께 작성하고 있다. polyfill에서 ponyfill, 그리고 그 너머까지 이어진 흐름은 JavaScript가 어떻게 불확실성 위에서 진화해왔는지를 보여준다. 이 글은 우리가 작성하는 코드의 상당 부분이 왜 기능이 아니라 ‘환경에 대한 방어’로 존재하는지를 구조적으로 풀어낸다.