[JAVA] Console vs Terminal vs Shell
이번 블로그에서는 몇몇분들이 Eclipse에서 자바를 개발할 경우 또는 웹에서 디버깅을 할 경우 아래와 같이 Console이라는 화면을 자주 만나게 되는데요. 이 콘솔이 왜 콘솔로 불리게 되었는지 또는 콘솔이 왜 콘솔인지에 대하여 컴퓨터의 역사와 함께 잠시 살펴보겠습니다.
아마도 자바 또는 웹 개발자들에겐 참 친숙한 그리고 친해져야 하는 화면 중 하나죠? 우리 개발자들에겐 없어서는 안될 화면입니다. ^^
자 이 콘솔이 왜 콘솔이라고 불리게 되었느냐면 아주 오래전 그것도 호랑이 담배피던 시절 아마도 제가 태어나기도 전 일 꺼라 예상합니다. 그 시절에는 그림과 같이 컴퓨터가 어마어마하게 고가였고 크기도 어마어마 했다고 합니다. 전해지는 이야기로는 현재 가치로 따지면 몇억씩 했다고 합니다. 그것도 현재 가장 느린 스마트 폰보다도 수십배 또는 수천배(?) 느린 컴퓨터 였는데도 말입니다.
아마도 100여년(?)도 안된 역사가 십만배 천만배 더 좋은 스마트 폰을 만들어내고 이제는 이걸 넘어서 스마트 워치니 스마트 글라스니 ~~ 세상의 발전 속도가 날이 갈수록 어마어마해 지네요..
제가 또 서론이 길어졌습니다.
요약하자면 아래 그림과 같이 예전엔 콘솔이라는 장치 지금의 입출력 장치만을 가진 콘솔장치를 통해 조금 멀리 떨어진 학교내의 컴퓨터(지금의 서버라고 생각해도 될 거 같네요)실 또는 직장내의 컴퓨터실에 본체를 연결하여 텍스트를 통해 입력하고 결과를 출력 받는 식의 장치를 사용했던 거죠.
이렇게 연결한 장치를 콘솔(Console)이라고 불렀습니다. 그리고 이처럼 서버 컴퓨터와 연결된 장치를 터미널(예전엔 Dummy Terminal 라고도 불렸답니다) 이라고 부릅니다. 우리말로는 단말장치 또는 단말기 라고 부르죠.좀더 의미를 구체화 하자면 콘솔이라는 말은 명확하게 입출력 장치라는 물리적인 의미를 갖고 있다면, 터미널이라는 의미는 물리적 장치를 뿐아니라 서버와 연결되어 데이터를 주고 받고 일을 처리할 수 있는 환경 또는 장치라는 좀 더 광범위한 개념을 포함하고 있습니다.
그래서 이쯤에서 콘솔과 터미널을 간단히 정리해 보자면 콘솔은 입출력 장치를 의미하고, 터미널은 콘솔을 포함해 서버와 연결된 상태라는 개념을 포함하고 있습니다.
그런데 현대 시대에는 저와 같은 콘솔장치를 사용하지 않죠? 본적도 없고, 아마도 박물관엔 있을지 모르겠네요. ^^.
그래서 프로그래밍 또는 컴퓨터 전공 쪽에서는 위의 역사를 바탕으로 현재의 콘솔이라는 말이 계속 전해져 Eclipse or Chrome 개발도구 등에서 개발자들 사이에 콘솔이라는 말이 더 친숙하므로 사용하게 된 거 같습니다. 즉, 물리적 콘솔 장치를 소프트웨어 적으로 표현/구현하여 사용하게 된 것이죠.
이러한 콘솔 화면은 아시다시피 이클립스에서도 디버깅 결과를 출력할 뿐만 아니라 사용자의 입력을 받기도 하죠? 그래서 여기서도 콘솔은 입출력 장치로서 입출력을 위한 화면으로 사용됩니다.
자~! 이제 명확하게 구분이 가시죠? 그래서 결론으로 정리해 보면
콘솔 : 사용자의 입출력 정보를 표시하는 물리적 장치였지만 현대에는 소프트웨어로 구현해 사용한다.
터미널 : 콘솔을 포함한 물리적 개념과 서버와 연결하는 상태의 개념을 포함한 개념이다. 현대에는 물리적 개념은 사려졌으며, 소프트웨어로 구현되어 서버와 연결한 화면을 말하기도 한다.
콘솔은 위 그림에서 Eclipse에서 사용되는 화면을 보여드렸고, 이제 현대시대에 사용되는 터미널 화면은 보신 분들도 있겠지만 아직 못 보신 분들을 위해 보여드리면 아래와 같은 화면입니다.
이와 같이 보통은 검정색 바탕에 흰색 글자로 구성된 화면을 통해 원격의 서버에 연결하여 서버관리, 서버 프로그램 설치, 패치, 상태 관리 등 주로 원격의 서버를 연결하여 작업하는 화면으로 이용됩니다. 저는 주로 PUTTY라는 터미널 프로그램을 이용하여 위와 같은 작업을 합니다. 요즘은 더 보기 좋고 편리하게 구성된 터미널 화면도 있을 거라 생각은 합니다.
여기까지 Console와 Terminal에 대하여 알아봤습니다. 그리고 마지막으로 Shell에 대하여 알아보겠습니다.
Shell은 Console와 Terminal 과 비교되는 개념은 아니지만 관련이 있는 단어라 잠시 소개해드리겠습니다.
Shell은 위의 콘솔과 터미널에서 명령을 내리고 명령을 처리하여 결과를 보여주고 등등 주로 개발자 또는 서버 관리자가 터미널 화면을 이용해 내리는 명령들을 의미합니다.
혹시 사용해 보셨을지 모르겠으나 아래와 같이 Windows에서 Cmd라는 화면을 통해 dir이라는 명령을 내리면 아래와 같은 결과를 보여주죠? 이것 또한 Shell(쉘) 명령어 중 하나입니다.
실제로 명령어를 전달하고 결과를 전달받는 프로그램
The shell is the program which actually processes commands and returns output. Most shells also manage foreground and background processes, command history and command line editing. These features (and many more) are standard in bash, the most common shell in modern linux systems.
사용자가 명령어를 입력하면 쉘은 사용자가 입력한 명령어를 OS로 전달하는 명령어 해석기라고 볼 수 있다. 쉘은 여러 종류가 있다. 상단에 첨부한 이미지 최상단에 bash 라고 쓰여있는데 맥에서 지정되어 있는 기본쉘이 bash이다. 쉘의 종류로는 bash, sh, csh 등이 있다.
즉, 쉘은 장치가 명확히 소프트웨어로 특히 명령어들의 집합이다. 이 명령어 들을 통해 컴퓨터에게 명령을 내리고 결과를 전달 받는다.
이상으로 간단히(?) 콘솔과 터미널과 쉘에 대하여 살펴봤습니다. 여기까지 읽어주신 여러분 감사드립니다. 그럼 오늘도 즐거운 하루가 되시길 바랍니다.^^
댓글
댓글 쓰기