웹 개발 배우기 6편 - 자바스크립트의 새로운 무대, 셸과 Node.js 정복하기
지금까지 우리는 웹 브라우저라는 아주 안전하고 친절한 환경에서 자바스크립트를 다뤄왔는데요.
하지만 진짜 프로 개발의 세계로 나아가려면, 이 안락한 울타리를 벗어날 준비를 해야 합니다.
오늘은 자바스크립트의 활동 무대를 컴퓨터 전체로 넓혀주는 두 가지 핵심 도구, 바로 ‘셸(Shell)‘과 ‘Node.js’에 대해 알아볼 거거든요.
조금 낯설게 들릴 수 있지만, 현대 웹 개발에선 없어서는 안 될 필수 교양과목과도 같습니다.
텍스트로 컴퓨터와 대화하기 ‘셸’
우리가 보통 컴퓨터를 쓸 때 만나는 건 ‘그래픽 사용자 인터페이스(GUI)‘라고 하는데요.
아이콘을 마우스로 클릭하고, 창을 드래그하는 아주 직관적인 방식입니다.
반면에 ‘셸’은 ‘명령 줄 인터페이스(CLI, Command-Line Interface)‘의 한 종류로, 키보드로 명령어를 직접 입력해서 컴퓨터를 조작하는 방식이거든요.
마치 브라우저에 있는 개발자 콘솔이 자바스크립트와 대화하는 창구였다면, 셸은 운영체제(OS)와 직접 대화하는 창구라고 할 수 있습니다.
개발에 필요한 각종 도구들을 실행하고 파일을 관리하는 등, 개발자에게는 그래픽 환경보다 훨씬 더 빠르고 강력한 작업 환경을 제공해 줍니다.
이 셸을 사용하려면 ‘터미널’이라는 프로그램을 실행해야 하는데요.
윈도우에서는 ‘Terminal’, macOS에서는 ‘Terminal.app’, 리눅스에서는 ‘터미널’ 등의 이름으로 찾아볼 수 있습니다.
파일 시스템의 주소 ‘경로’
셸을 다루려면 먼저 파일 시스템의 ‘경로(path)’ 개념부터 확실히 잡고 가야 하는데요.
파일 경로는 컴퓨터 안에 있는 파일이나 폴더(디렉터리)의 ‘주소’라고 생각하면 아주 편합니다.
여기에는 ‘절대 경로’와 ‘상대 경로’, 두 가지 방식이 있습니다.
‘절대 경로’는 최상위 디렉터리부터 시작해서 목표 지점까지의 전체 주소를 모두 적어주는 방식인데요.
사람으로 치면 ‘대한민국 서울시 강남구 테헤란로…‘처럼 처음부터 끝까지 다 알려주는 것과 같습니다.
- 윈도우 예시:
C:\Users\robin\
- macOS 예시:
/Users/robin/
- 리눅스 예시:
/home/robin/
‘상대 경로’는 현재 내가 있는 위치를 기준으로 목표 지점까지의 경로를 알려주는 방식이거든요.
마치 “여기서 오른쪽으로 돌아서 두 번째 건물이야"라고 말하는 것과 같습니다.
-
.
(점 하나): 현재 디렉터리를 의미합니다. -
..
(점 두 개): 현재 디렉터리의 부모 디렉터리, 즉 상위 폴더를 의미합니다.
예를 들어, 현재 내가 /home/robin/files/
폴더에 있다면 아래와 같이 해석됩니다.
main.js
: 현재 폴더에 있는main.js
파일 (/home/robin/files/main.js
)../notes.txt
: 상위 폴더로 이동한 뒤, 거기 있는notes.txt
파일 (/home/robin/notes.txt
)
이 두 가지 경로 개념은 앞으로 정말 많이 쓰이니 꼭 기억해 두어야 합니다.
꼭 알아야 할 기본 셸 명령어
터미널을 열면 깜빡이는 커서와 함께 프롬프트(%
또는 >
)가 여러분을 맞이할 텐데요.
이제 명령어를 입력할 준비가 되었다는 뜻입니다.
겁먹지 말고 아래 명령어들을 하나씩 직접 쳐보면서 셸과 친해져 보세요.
-
pwd
: ‘P’rint ‘W’orking ‘D’irectory의 약자로, 현재 내가 있는 디렉터리의 절대 경로를 보여줍니다. -
ls
(macOS/Linux) 또는dir
(Windows): 현재 디렉터리에 있는 파일과 폴더 목록을 보여줍니다. -
cd [경로]
: ‘C’hange ‘D’irectory의 약자로, 지정한 경로로 현재 위치를 이동합니다.-
cd ..
: 상위 폴더로 이동합니다. -
cd /home/robin/
: 특정 절대 경로로 한 번에 이동합니다.
-
-
cat [파일명]
(macOS/Linux) 또는type [파일명]
(Windows): 텍스트 파일의 내용을 터미널에 출력해 줍니다. -
mkdir [폴더명]
: ‘M’a’k’e ‘Dir’ectory의 약자로, 새로운 폴더를 생성합니다. -
touch [파일명]
: 빈 파일을 생성합니다. (윈도우에서는 기본 명령어가 아니지만, Git Bash 등을 설치하면 사용 가능합니다. ) -
clear
(macOS/Linux) 또는cls
(Windows): 터미널 화면을 깨끗하게 지워줍니다.
꿀팁: 키보드의 위쪽 화살표(↑) 키를 누르면 이전에 입력했던 명령어를 다시 불러올 수 있으니, 반복적인 작업에 아주 유용합니다.
브라우저를 탈출한 자바스크립트 ‘Node.js’
바로 이 지점에서 ‘Node.js’라는 엄청난 친구가 등장하는데요.
Node.js는 크롬 브라우저에 쓰이는 V8 자바스크립트 엔진을 떼어내서, 브라우저 밖 어디서든 자바스크립트를 실행할 수 있게 만든 ‘자바스크립트 런타임 환경’입니다.
즉, 브라우저라는 제한된 공간을 벗어나 내 컴퓨터의 운영체제 위에서 자바스크립트 코드를 직접 실행할 수 있게 된 것이죠.
이것이 왜 그렇게 중요하냐면, Node.js 덕분에 자바스크립트로 할 수 있는 일의 범위가 폭발적으로 늘어났거든요.
-
웹 서버 제작: 자바스크립트만으로 웹 사이트의 뒷단(백엔드)을 만들 수 있습니다.
-
개발 도구: React, Vue 같은 최신 프레임워크를 사용하기 위한 개발 환경 구축, 코드 자동 테스트 등 수많은 개발 관련 도구들이 Node.js 기반으로 동작합니다.
-
명령 줄 애플리케이션: 셸에서 실행할 수 있는 나만의 도구를 만들 수도 있습니다.
Node.js가 진짜 강력한 이유
Node.js가 진짜 강력한 이유는 바로 거대한 ‘자바스크립트 생태계’의 문을 열어주기 때문인데요.
이 생태계의 중심에는 ’npm(Node Package Manager)‘이라는 보물창고가 있습니다.
npm은 전 세계 개발자들이 만들어 올린 수많은 자바스크립트 코드 조각(패키지 또는 라이브러리)들을 누구나 쉽게 가져다 쓸 수 있게 해주는 시스템이거든요.
복잡한 기능을 직접 다 만들 필요 없이, npm install [패키지이름]
명령어 한 줄이면 필요한 기능을 내 프로젝트에 바로 장착할 수 있습니다.
우리가 앞으로 다루게 될 대부분의 최신 웹 개발 기술은 바로 이 Node.js와 npm을 기반으로 하고 있습니다.
Node.js 설치와 첫 만남
아직 설치하지 않았다면, 지금 바로 Node.js 공식 웹사이트에 방문해서 설치 파일을 다운로드하고 설치해주세요.
버전은 ‘LTS(Long-Term Support)‘라고 적힌 것을 추천하는데요.
가장 안정적이고 오랫동안 지원이 보장되는 버전입니다.
설치가 완료되었다면, 터미널을 열고 아래 명령어를 입력해보세요.
node
이 명령어를 치면 >
프롬프트가 나타나면서 Node.js 콘솔 모드로 진입하는데요.
이곳을 ‘REPL’이라고 부릅니다.
REPL은 ‘Read(읽고)-Eval(평가하고)-Print(출력하고)-Loop(반복한다)‘의 약자로, 코드를 한 줄씩 입력하면 즉시 결과를 보여주는 대화형 환경입니다.
브라우저 개발자 콘솔과 거의 똑같이 작동하거든요.
한번 간단한 계산을 해볼까요?
> 16 * 16
256
REPL을 종료하고 싶을 땐 Ctrl + C
를 두 번 누르면 됩니다.
프로젝트 첫 Node.js 앱 실행하기
이제 Node.js를 이용해 자바스크립트 파일을 직접 실행해 볼 시간인데요.
hello-nodejs.js
라는 이름의 파일을 만들고 아래 코드를 작성해주세요.
console.log('Node.js가 "안녕"이라고 말합니다!');
이제 터미널에서 cd
명령어를 사용해 이 파일이 있는 디렉터리로 이동한 뒤, 아래 명령어를 실행합니다.
node hello-nodejs.js
터미널 화면에 아래와 같은 메시지가 출력된다면 성공입니다.
Node.js가 "안녕"이라고 말합니다!
축하합니다.
여러분은 방금 브라우저의 도움 없이, Node.js를 통해 첫 자바스크립트 애플리케이션을 실행한 것입니다.
마무리하며
오늘은 웹 개발의 지평을 넓혀줄 셸과 Node.js라는 두 거인을 만났는데요.
검은 화면에 글자만 나오는 터미널이 처음에는 어색하고 두려울 수 있습니다.
하지만 몇 가지 기본 명령어에 익숙해지는 순간, 여러분의 개발 효율은 이전과 비교할 수 없을 정도로 높아질 겁니다.
그리고 Node.js는 우리가 앞으로 배울 수많은 고급 웹 기술로 나아가는 단단한 디딤돌이 되어줄 거거든요.