새로운 zine: 터미널의 비밀 규칙
안녕하세요! 수개월 동안 터미널에 대한 심층 블로그 글을 써 온 끝에, 화요일에 “The Secret Rules of the Terminal”이라는 새로운 zine을 공개했습니다!
12달러에 구입하실 수 있습니다: https://wizardzines.com/zines/terminal, 또는 제 zine 15종 세트도 구입하실 수 있습니다.
표지는 다음과 같습니다:
목차
목차는 다음과 같습니다:
왜 터미널인가
20년 동안 매일 터미널을 사용해 왔고 터미널 사용에 매우 익숙하지만, 늘 어딘가 불안한 느낌이 있었습니다. 보통은 잘 작동하지만 가끔 문제가 생기면 원인을 파헤치는 것이 불가능하게 느껴지거나, 적어도 엄청나게 복잡한 일들을 건드리게 될 것 같았습니다.
그래서 터미널에서 겪었던 이상한 문제들을 목록으로 적어 보기 시작했는데, 터미널에는 다음과 같은 자잘한 불일치가 많다는 것을 알게 되었습니다:
- 가끔은 방향키로 커서를 움직일 수 있지만, 가끔은 방향키를 누르면
^[[D만 출력됩니다 - 가끔은 마우스로 텍스트를 선택할 수 있지만, 가끔은 할 수 없습니다
- 가끔은 실행한 명령어가 히스토리에 저장되지만, 가끔은 저장되지 않습니다
- 어떤 셸에서는 위쪽 방향키로 이전 명령어를 볼 수 있지만, 어떤 셸에서는 그렇지 않습니다
터미널을 매일 10년이나 20년 동안 사용하다 보면, 이런 일이 왜 일어나는지 정확히 이해하지 못하더라도 어느 정도 감을 잡게 될 겁니다.
하지만 감이 있다고 해서 왜 그런 일이 일어나는지 이해하는 것과 같은 것은 아닙니다. 이번 zine을 쓰면서 터미널에서 정확히 무슨 일이 일어나는지 파악하고, 그것을 어떻게 분석해야 할지 설명할 수 있을 만큼 이해하기 위해 실제로 많은 노력을 기울여야 했습니다.
규칙은 어디에도 정리되어 있지 않습니다
터미널이 어떻게 동작하는지에 대한 “규칙”(입력한 명령어를 어떻게 수정하는지, 프로그램을 어떻게 종료하는지, 색상을 어떻게 고치는지 등)을 완전히 이해하는 것이 극도로 어려운 이유는, “터미널”이 실제로는 전혀 다른 사람들이 각자 다른 생각으로 만든 여러 소프트웨어 조각(터미널 에뮬레이터, 운영체제, 셸, grep 같은 핵심 유틸리티, 그리고 설치한 그 밖의 수많은 터미널 프로그램)으로 이루어져 있기 때문입니다.
그래서 다음과 같은 내용을 설명하는 글을 쓰고 싶었습니다:
- 터미널의 4가지 구성 요소(셸, 터미널 에뮬레이터, 프로그램, TTY 드라이버)가 어떻게 맞물려 동작하는지
- 터미널에서 당연하게 기대할 수 있는 동작에 대한 핵심 관례들
- 터미널 프로그램을 활용하는 다양한 팁과 요령
이 zine에서는 터미널 내부 구조 중 가장 유용한 부분을 설명합니다
터미널 내부 구조는 엉망입니다. 상당 부분은 누군가가 80년대에 내린 결정 때문에 지금은 바꿀 수 없게 된 것일 뿐이고, 솔직히 터미널 내부의 모든 것을 배우는 것은 그만한 가치가 없다고 생각합니다.
하지만 일부는 이해하기 어렵지 않으면서도 터미널 사용 경험을 훨씬 더 좋게 만들어 줄 수 있습니다. 예를 들면 다음과 같습니다:
- 셸이 무엇을 담당하는지 이해하면, 셸을 설정하거나(또는 다른 셸을 사용해서!) 히스토리에 더 쉽게 접근하고, 훌륭한 탭 완성 기능을 얻는 등 훨씬 더 많은 일을 할 수 있습니다
- 이스케이프 코드를 이해하면, 바이너리를
cat으로 표준 출력에 출력해서 터미널이 깨졌을 때도 훨씬 덜 당황하게 됩니다. 그냥reset을 입력하고 넘어가면 됩니다 - 색상이 어떻게 동작하는지 이해하면, 터미널에서 가독성을 해치는 나쁜 색상 대비를 없애 텍스트를 제대로 읽을 수 있게 만들 수 있습니다
이 zine을 쓰면서 놀라울 정도로 많은 것을 배웠습니다
How Git Works를 썼을 때는 Git이 어떻게 동작하는지 알고 있다고 생각했고, 실제로 그랬습니다. 하지만 터미널은 다릅니다. 터미널 사용에 완전히 자신 있고 20년 동안 매일 사용해 왔음에도 불구하고, 터미널이 어떻게 동작하는지에 대해 잘못 알고 있던 것이 많았고, (tmux의 저자 같은 분이 아니라면) 여러분도 그럴 가능성이 높다고 생각합니다.
제가 배운 것 중 실제로 유용했던 몇 가지는 다음과 같습니다:
- 터미널의 구조를 더 잘 이해하게 되어, 터미널에서 일어나는 이상한 문제를 디버깅하는 데 훨씬 더 자신감이 생겼습니다(심지어 fish에 작은 개선을 제안하기도 했습니다!). 터미널에서 이상한 현상을 일으키는 소프트웨어가 정확히 무엇인지 찾아내는 일이 여전히 쉽지는 않지만, 예전보다 훨씬 잘하게 되었습니다.
- SSH를 통해 클립보드에 복사하는 셸 스크립트를 작성할 수 있습니다
reset이 내부적으로 어떻게 동작하는지(사실상stty sane; sleep 1; tput reset과 동일한 일을 합니다) — 기본적으로stty sane이나tput reset을 외울 필요 없이 그냥reset만 실행하면 된다는 것을 알게 되었습니다- 프로그램이 출력하는 눈에 보이지 않는 이스케이프 코드를 확인하는 방법(
unbuffer program > out; less out을 실행합니다) - 제 Mac에 내장된
sqlite3같은 REPL이 왜 그렇게 사용하기 불편한지(readline대신libedit을 사용하기 때문입니다)
작업하면서 쓴 블로그 글
요즘 늘 그렇듯, 여러 곁다리 탐구에 대해 블로그 글을 여러 편 썼습니다:
- PATH에 디렉터리를 추가하는 방법
- 터미널 문제가 따르는 “규칙”
- 파이프가 가끔 “막히는” 이유: 버퍼링
- 터미널의 답답한 점들
- 내 터미널의 ASCII 제어 문자 — “Ctrl+A, Ctrl+B, Ctrl+C 등은 도대체 뭘까?”에 대하여
- 터미널에서 텍스트 입력은 복잡합니다
- “최신” 터미널 환경을 갖추려면 무엇이 필요할까?
- 셸의 잡 컨트롤을 사용해야 하는 이유
- ANSI 이스케이프 코드 표준 — 사실
terminfo데이터베이스가 오늘날 우리에게 잘 봉사하고 있는지에 대해 고민해 본 글입니다
이 zine을 함께 만든 분들
오래전에는 zine을 대부분 혼자 썼지만, 프로젝트를 거듭할수록 점점 더 많은 도움을 받고 있습니다. 이번 zine은 9월부터 6월까지 평일마다 Marie Claire LeBlanc Flanagan과 함께 작업했습니다.
표지는 Vladimir Kašiković가 맡았고, Lesley Trites가 교정·교열을, PuTTY를 만든 Simon Tatham이 기술 감수를 맡았습니다. 운영 매니저인 Lee가 트랜스크립션을 비롯해 수많은 업무를 처리해 주었고, Jesse Luehrs(제가 아는 사람 중 터미널의 저주받은 내부 구조를 실제로 이해하는 몇 안 되는 사람 중 한 명)와 터미널에서 무슨 일이 일어나고 있는지에 대해 정말 많은 도움이 되는 대화를 나눴습니다.
zine 구입하기
zine을 구입할 수 있는 링크를 다시 정리해 드립니다:
언제나처럼 집에서 인쇄할 수 있는 PDF 버전이나 집으로 배송되는 인쇄본 중 원하는 형태로 구입하실 수 있습니다. 단, 인쇄본은 8월에 발송됩니다. 인쇄소에 맡기기 전에 얼마나 인쇄해야 할지 파악하기 위해 주문이 들어올 때까지 기다려야 하기 때문입니다.
글을 무작위로 읽기

