터미널, 콘솔, 쉘

Taeyoon Kim·2025년 1월 26일
0

컴퓨터와 관련된 일을 하는 사람이라면
너무 익숙한 단어인 터미널 또는 시스템 콘솔

나는 살아오면서 마우스를 휘저으며 클릭으로 컴퓨터를 다루는 것에 익숙했다.

근데 컴퓨터와 관련된 일을 시작하면서 터미널 이라는 것을 사용하기 시작하였는데,
참 생소한 개념이었다.

터미널이 사용하기에는 크게 어려운 개념은 아니지만,
왜 터미널이라고 부르지? 터미널과 콘솔의 차이는 뭐지? 등등 컴퓨터의 발전을 모두 함께 해오지 않기 때문에 생기는 궁금증이 항상 있었다.



1. 터미널이라는 이름


Terminal 이라는 단어는 끝단의, 말단의 라는 의미를 갖는다.
잘은 모르지만, 지금과 같은 컴퓨터를 어느 가정집이나 흔하게 가질 수 있는 시대가 오기 전에는 컴퓨터는 전문적인 회사나 기관에만 설치가 되었을 것이며,
한 사람당 한 개 컴퓨터를 사주는 것이 아니라, 기관당 한 개.. 이런 식이었다.

그러면 여러 사람이 그 컴퓨터를 이용하고 싶은데 어떡하나?

컴퓨터는 한 대 이지만, 그 컴퓨터에 입력을 하고 출력을 받아볼 수 있는 장치는 여러 개 연결할 수 있었다. 그리고 그 장치는 보통 일체형이었다. 이 장치가 바로 터미널 이다.
현대에 키보드와 모니터를 합치면 하나의 터미널이라고 할 수 있다.
오늘날에는 PC 가 흔해져서, PC 한 개에 키보드+모니터 한 세트면 충분하지~ 같은 느낌이라 터미널 이라는 개념이 필요 없어진 듯하다.

from 컴퓨터 -> To 사람 의 경로에서 사람 쪽 끝에 있어서 끝단의 라는 뜻의 터미널이라는 이름이 붙은 것이다. 한국어로는 단말기 라고 하기도 한다.

옛날의 터미널은, 오늘날처럼 마우스를 요리조리 이동하여 클릭하거나, 터치로 하는 직관적인 상호작용이 불가했다.
그저 텍스트를 입력하여 신호를 보내고, 보낸 신호에 대한 결과에 해당하는 텍스트 신호가 되돌아와서, 그것을 출력했다.

Teletypewriter 가 대표적인 초기의 터미널이다. Typewriter 는 한국어로 타자기라고 부르는 것으로, 옛날에 자판을 두들기면 기계적인 펜촉이 종이에 잉크로 글을 써주는 것이다. Teletypewriter(혹은 Teleprinter) 는 한국어로는 전신타자기(전신인자기) 등으로 부르는 듯한데, Tele- + typewriter 이다. Tele- 라는 접두어는 '멀리' 의 뜻을 갖는다 (e.g. telephone, television, telescope etc.).
Teletypewriter 로 타자기를 두들기면 전선을 따라 연결된 컴퓨터에 신호가 전달되고, 그 입력에 대한 출력이 텍스트 신호로 돌아오면 그에 맞게 타자기가 두들겨져서 종이에 써져갔을 것이다.
좀 더 발전한 형태는 모니터가 달려있었다. 그러나 오늘날과 같이 마우스로 창을 요리조리 띄울 수 있는 건 아니고, 한 줄 한 줄 텍스트를 알맞은 위치에 표시할 수 있을 뿐이었다.



2. 콘솔과 터미널의 차이


현재 산업에서 콘솔과 터미널은 같은 의미로 사용된다.
근데 나는 정확하게 콘솔과 터미널이 각각 무슨 의미로 이름붙여졌는지 궁금했다.

우선 콘솔이라는 단어는 컴퓨터가 발명되기 전부터 기계 장치의 제어판이나 중앙 제어 장치, 운전석 등을 의미했다고 하는 듯하다.

그런 의미에서 콘솔은, teletypewriter 에서 모니터와 키보드가 통합된 형태의 한 개의 터미널 장치를 의미했던 듯하다. 아래의 포스트에서 System Console 항목의 이미지를 보길 바란다.
difference-between-terminal-console-and-shell

이제는 더 이상 콘솔이라는 하드웨어 장치도 사용되지 않기 때문에, 터미널처럼 콘솔도 의미가 바뀐 듯하다. 시스템의 핵심 부분과 상호작용하는 인터페이스를 지칭하는 것 같다. BIOS 나 부트로더에 명령을 입력하고 출력을 볼 수 있는 텍스트 기반의 통로라든지... 좀 추상적이다.



3. 터미널 에뮬레이터 그리고 시리얼 통신 에뮬레이터


오늘 날에 이제 터미널이라는 단어는 진짜 터미널 장치가 아니라, 주로 터미널 장치를 모방하는(emulate) 터미널 에뮬레이터를 지칭한다. 과거의 텍스트 기반의 인터페이스를 그래픽 인터페이스 상에서 모방하는 프로그램들이다. 윈도우에서는 명령 프롬프트(cmd.exe) 또는 파워쉘이 터미널 에뮬레이터이고, 우분투 등 리눅스 운영체제에서는 터미널 이라는 프로그램이 터미널 에뮬레이터이다. 이 프로그램들은 이 프로그램들 자신이 실행되는 컴퓨터에 대한 터미널을 제공한다.

또 다른 터미널 에뮬레이터로서, TeraTerm 이나 putty 가 있다. 이런 프로그램들은 주로 다른 컴퓨터에 대한 입출력 터미널을 그래픽 인터페이스 상에서 모방해 준다. 이 프로그램들은 이 프로그램들 자신이 실행되는 컴퓨터와 RS232 케이블, 이더넷 케이블 등으로 연결된 다른 컴퓨터에 명령을 보내고 출력을 받는 통로를 제공해 준다. Serial 통신 방식을 쓸 수도 있고, TCP/IP 통신 방식을 쓸 수도 있다. 임베디드 장치의 컴퓨터는 주로 Serial 통신 방식으로 입출력을 수행하기 때문에, 시리얼 통신 에뮬레이터라고도 많이 부른다.



4. 쉘


터미널, 콘솔은 컴퓨터에 사용자가 명령을 보내고 출력을 받을 수 있는 통로를 지칭한다. 근데 명령을 컴퓨터에 전송하면 컴퓨터는 그 명령을 잘 처리해야 한다. 그 명령을 처리하는 프로그램이 쉘이다. 예를 들어, $ ls 라는 명령을 입력하고 컴퓨터에 보내는 장치나 프로그램은 터미널, 또는 콘솔이고, ls 라는 명령어가 컴퓨터에 보내졌을 때 이에 대한 적절한 처리를 수행하여 결과를 다시 터미널 또는 콘솔에 보내주는 것이 쉘 이라고 할 수 있다. 왜 쉘이라는 이름이 붙었는가? 쉘에 대해서도 아까 첨부했던 아래의 링크에서 잘 설명해 주고 있다.
difference-between-terminal-console-and-shell

ChatGPT 한테 물어본 게 꽤나 잘 나와서 이를 참고하기 바람..
운영체제에서 쉘과 커널의 개념을 처음으로 만든 것은 누구야? 어디에서 나왔어?
ChatGPT의 말:
ChatGPT
운영체제에서 쉘(Shell)커널(Kernel)이라는 개념은 유닉스(Unix) 운영체제의 발전 과정에서 처음으로 명확히 정의되고 구체화되었습니다. 유닉스는 1960년대 후반에서 1970년대 초반에 걸쳐 개발되었으며, 이 시기에 쉘과 커널의 구분이 중요한 개념으로 자리 잡게 되었습니다.

쉘과 커널 개념의 기원: 유닉스
유닉스(Unix)는 1969년에 켄 톰슨(Ken Thompson), 데니스 리치(Dennis Ritchie) 등 AT&T 벨 연구소(Bell Labs)에서 개발하기 시작했습니다. 유닉스는 처음에는 멀티태스킹을 지원하는 운영체제의 초기 버전으로 개발되었고, 그 후 많은 발전을 이루었습니다.
1. 커널(Kernel)
커널은 운영체제의 핵심 부분으로, 시스템의 하드웨어 자원을 직접 관리하고, 다른 소프트웨어가 하드웨어와 상호작용할 수 있도록 하는 역할을 합니다. 커널은 운영체제의 저수준(낮은 수준) 부분으로, 프로세스 관리, 메모리 관리, 하드웨어 드라이버, 파일 시스템 등 핵심적인 기능을 처리합니다.

유닉스의 초기 버전에서 커널은 시스템 자원을 관리하는 핵심 모듈이었고, 유닉스의 발전과 함께 모듈화 및 다중 작업 처리(multitasking) 기능을 제공하는 중요한 역할을 하게 되었습니다.

  1. 쉘(Shell)
    쉘은 사용자와 커널 사이의 중간 인터페이스로, 사용자가 커널에 명령을 전달하고, 그 결과를 출력받을 수 있도록 해주는 프로그램입니다. 즉, 쉘은 사용자 인터페이스(UI)로서 명령어 해석기 역할을 하며, 커널과 상호작용합니다. 사용자는 쉘을 통해 명령어를 입력하고, 쉘은 이를 커널에 전달하여 실행한 후 결과를 사용자에게 보여줍니다.

유닉스에서 쉘은 처음에는 단순한 명령어 인터프리터로 등장했으나, 나중에는 스크립트 언어 기능을 갖춘 강력한 도구로 발전했습니다.

유닉스에서 쉘과 커널의 개념화
유닉스가 등장했을 당시, 켄 톰슨과 데니스 리치는 시스템을 커널과 쉘로 분리하여 설계했습니다. 이는 운영체제를 모듈화하여 더 효율적이고 유연한 시스템을 만들기 위한 중요한 설계 원칙이었습니다.
커널은 하드웨어 자원 관리와 프로세스 실행을 담당하는 핵심 시스템이었고, 쉘은 사용자가 시스템과 상호작용할 수 있는 명령줄 인터페이스를 제공하는 역할을 했습니다.
쉘의 발전
유닉스의 쉘은 초기에는 Bourne Shell(sh)로 시작했으며, 이후 C Shell, Korn Shell, Bash 등 다양한 쉘들이 등장했습니다. 이들 쉘은 커널의 기능을 확장하는 다양한 기능들을 제공하고, 스크립팅, 파이프라인, 조건문 등 고급 기능을 지원하게 되었습니다.
핵심 기여자와 출처
켄 톰슨(Ken Thompson)데니스 리치(Dennis Ritchie)가 유닉스를 개발하면서, 커널과 쉘의 개념을 처음으로 명확히 구분하여 설계했습니다. 이 개념은 나중에 리눅스(Linux)와 같은 현대적인 운영체제에도 영향을 미쳤습니다.
결론:
쉘과 커널 개념은 유닉스 운영체제에서 처음으로 명확하게 구분되었으며, 켄 톰슨과 데니스 리치가 그 개념을 만든 주요 인물들입니다. 유닉스는 1969년부터 개발되었고, 쉘과 커널은 그 당시부터 운영체제 설계에서 중요한 개념으로 자리잡게 되었습니다. 이 개념들은 현재 리눅스와 다른 현대 운영체제에서 여전히 사용되고 있습니다.



참고


Teleprinter 영어 위키
전신타자기 한국 위키
typewriter 영어 위키
computer terminal 영어 위키

profile
Linux, Yocto Project, Embedded System, OS

0개의 댓글