겹쳐 쓰는 세 단어
'터미널 열어' 라고 말할 때 진짜 의미는 '터미널 에뮬레이터 창 띄우고 그 안에서 shell 실행해' 야. 일상에서는 terminal, shell, console 을 다 섞어 쓰지만 사실 같은 stack 의 세 layer 야. 분리해서 보는 게 통제의 시작이야.
Terminal — 창 (window)
터미널 에뮬레이터 는 클릭해서 띄우는 GUI 프로그램이야. 화면에 글자를 그리고, 키보드 입력을 받아서 shell 한테 전달하는 역할만 해. command 를 직접 실행하지 않아. ls 가 뭔지 몰라. macOS 기본은 Terminal.app 이고, 같은 자리를 iTerm2, Warp, Alacritty, Kitty, WezTerm, VS Code / Cursor 의 통합 터미널이 채워.
Shell — interpreter
Shell 은 터미널 창 안에서 도는 프로그램이야. 타이핑한 거 읽고, 파싱하고, $PATH 에서 binary 찾아서 실행하고, 결과를 출력해. zsh, bash, fish, nu, PowerShell 다 shell 이야. macOS 는 Catalina (2019) 부터 기본 shell 을 zsh 로 두고 있어.
Console — 옛날 단어
역사적으로 console 은 서버에 직접 붙어 있는 물리 키보드 + 모니터를 뜻했어. 지금 macOS 에서 Console.app 은 로그 뷰어고, 리눅스에서는 Ctrl+Alt+F2 로 tty console 에 들어갈 수 있어. 개발자들이 일상에서 'console' 이라고 하면 보통 브라우저 DevTools 의 JS REPL 을 가리키는 경우가 많아. 헷갈리니까 누가 'console' 이라고 하면 어떤 거 말하는지 꼭 다시 묻기.
로컬에서 직접 분리해 보기
두 터미널 앱에서 똑같이 echo $SHELL 쳐 봐. 출력은 같아. 같은 shell 이 다른 창에서 도는 거야. 창은 바꿨지만 shell 은 안 바뀜 — 이게 분리의 증거야.
역시 단어를 정확하게 아는게 중요하지! 피파 고마워!