Readium 개발기 #0 — 우리는 왜 틀린 설계에서 시작하는가

설계는 처음부터 맞지 않는다. 대부분의 프로젝트는 문제를 정확히 정의하지 못한 상태에서 시작되고, 그 결과 틀린 구조 위에서 개발이 진행된다. 이 글은 Readium 개발기를 시작하기 전에, 왜 이 시리즈가 “정답”이 아니라 “설계가 무너지는 과정”을 기록하려 하는지에 대한 선언이다.

polyfill에서 ponyfill까지 — 환경을 믿지 못한 코드의 역사

우리는 단순히 기능을 구현하는 것이 아니라, 신뢰할 수 없는 실행 환경을 견디기 위한 코드를 함께 작성하고 있다. polyfill에서 ponyfill, 그리고 그 너머까지 이어진 흐름은 JavaScript가 어떻게 불확실성 위에서 진화해왔는지를 보여준다. 이 글은 우리가 작성하는 코드의 상당 부분이 왜 기능이 아니라 ‘환경에 대한 방어’로 존재하는지를 구조적으로 풀어낸다.

리눅스 파일 디스크립터(fd)와 dup, dup2 — 실행과 리다이렉션이 연결되는 진짜 구조

리눅스에서 리다이렉션과 파이프는 단순 문법이 아니라 파일 디스크립터(fd) 연결 구조의 변경이다. 이 글에서는 dup, dup2를 통해 stdout, stderr, pipe가 어떻게 연결되고, 쉘이 실행 전에 어떤 방식으로 I/O 흐름을 재구성하는지 내부 구조 기준으로 설명한다.

개발 문화를 바꾼 도구들 — 개발자들이 일하는 방식이 바뀐 순간들

코드를 어떻게 작성하느냐보다 더 중요한 것은 코드를 어떻게 다루느냐였다. Git, GitHub, Stack Overflow, Docker와 같은 도구들은 개발자의 협업 방식과 지식 공유, 그리고 소프트웨어 배포 구조까지 바꾸며 오늘의 개발 문화를 만들어냈다.

리눅스 fork와 exec 완전 이해 — 쉘은 어떻게 프로그램을 실행하는가

이 글은 쉘이 명령어를 직접 실행하는 것이 아니라 fork와 exec를 통해 새 프로세스를 만들고 실행을 위임하는 구조를 설명한다. 명령 실행, 백그라운드 작업, 파이프, 리다이렉션까지 이어지는 리눅스 실행 모델의 핵심을 한 흐름으로 정리한다.

AI 시대인데 왜 소프트웨어는 늘지 않았을까 — 보이지 않는 코드의 폭발

AI로 개발 생산성은 분명히 증가했다. 그런데 왜 세상에는 더 많은 소프트웨어가 보이지 않을까. PyPI와 앱스토어 데이터를 통해 드러난 것은 생산성의 부재가 아니라, 우리가 보지 못하는 곳에서 폭발적으로 증가하고 있는 ‘비공개 소프트웨어’의 존재다.

AI 시대, 개발자는 더 오래 일하지 않는다 — 대신 더 위험한 일을 한다

AI는 개발자의 일을 줄여주지 않는다. 대신 코드 작성이라는 작업을 밀어내고, 더 어려운 문제를 남긴다. 이제 개발자의 역할은 코드를 만드는 것이 아니라, 무엇이 맞는지 판단하는 것이다. 이 글은 생산성의 문제가 아니라 구조의 문제로 개발자의 변화를 설명한다.

리눅스 Job Control 완전 정리 — jobs, fg, bg와 백그라운드 실행 구조

Job Control은 프로세스를 실행하는 방법이 아니라, 실행 이후 상태를 어떻게 제어할 것인가에 대한 구조다. 이 글은 foreground, background, stopped 상태가 signal을 통해 어떻게 전이되는지, 그리고 jobs, fg, bg가 어떻게 하나의 제어 모델을 이루는지를 설명한다.