REPL과 첫 스크립트 — node 명령으로 JS 실행하기
대화형 인터랙티브 모드와 파일 실행, 둘 다 손에 익히자.
2편에서 nvm 으로 Node 를 깔았다면 이제 진짜로 자바스크립트를 굴려본다. 도구는 단 하나 — node 명령. 이 명령은 두 가지 모드로 동작한다.
하나는 REPL — 한 줄씩 입력하고 즉시 결과를 보는 인터랙티브 모드 (계산기 같은 느낌). 다른 하나는 파일 실행 — node hello.js 처럼 미리 적어둔 파일을 통째로 돌리는 모드. 일상의 90% 는 후자지만, 둘 다 알아둬야 디버깅·실험이 편하다.
1. REPL — 한 줄씩 입력하고 즉시 보기
터미널에서 인자 없이 node 만 치면 REPL 이 뜬다.
> 가 입력 대기 프롬프트. 한 줄 입력 → Enter → 즉시 결과. const x = 10 같이 값이 없는 문장은 undefined 가 결과로 찍힌다 (선언 자체는 표현식 값이 없어서).
REPL 의 정체는 4단어 약자 — Read · Eval · Print · Loop. 입력을 읽고, 평가하고, 결과를 출력하고, 다시 입력 대기. 모든 인터프리터 언어가 비슷한 REPL 을 가진다 (Python 의 python3, Ruby 의 irb).
Ctrl+C 두 번 또는 .exit 입력으로 종료. .editor 명령으로 여러 줄 편집 모드. ↑ 화살표로 직전 입력 호출 (모든 셸과 같음).
2. 파일 실행 — node 파일명.js
실제 개발은 파일에 코드를 적고 한 번에 실행하는 방식이 표준이다. hello.js 를 만들자.
터미널에서 그 폴더로 이동 후:
딱 자바스크립트인데, 브라우저엔 없던 process 라는 객체가 보인다. process.version·process.cwd()·process.env 처럼 Node 가 추가한 것들이다. 파일 시스템·네트워크·OS 정보 — 브라우저가 막아둔 것들이 여기선 다 열려있다.
3. REPL vs 파일 실행 — 언제 무엇을
| 상황 | 도구 | 이유 |
|---|---|---|
| API 응답 모양 빨리 확인 | REPL | 한 줄씩 짚어가며 객체 구조 파악 |
| 정규식 패턴 실험 | REPL | 즉시 결과, 조정 빠름 |
| 라이브러리 한 함수 시험 | REPL | const fs = require('fs') 후 즉시 호출 |
| 10줄 넘는 로직 | 파일 | REPL 에서 잘못 치면 처음부터 다시 |
| 실제 프로그램 구동 | 파일 | 버전 관리·재실행·배포 가능 |
| 학습 초기 첫 실습 | REPL | 파일 만드는 거 자체가 부담일 때 |
요약: REPL 은 실험실, 파일은 작업장. 실험실에서 검증된 코드를 작업장으로 옮겨와 굴린다.
4. -e 한 줄 실행과 셔뱅 트릭
REPL 도 파일도 아닌 한 줄짜리 실행도 있다.
셸 스크립트 안에서 자바스크립트 한 줄만 끼워 쓸 때 유용. jq·awk 가 부족할 때 대체로 가능.
또 하나의 트릭 — 셔뱅으로 .js 파일을 실행 파일처럼 만든다.
파일 첫 줄에 #!/usr/bin/env node 를 넣고 chmod +x hello.js 로 권한을 주면 ./hello.js 만으로 실행된다. CLI 도구를 만들 때 표준 패턴.
node hello.js 가 정답. 셔뱅 줄이 있어도 무시되니까 크로스 플랫폼 패키지 만들 땐 package.json 의 bin 필드를 같이 쓴다 (5편 npm 챕터에서).
5. node --watch 와 디버거 — 살짝 맛보기
실전에서 자주 쓰는 두 가지 플래그.
--watch — 코드 저장하면 자동 재실행
파일을 수정하고 저장하면 즉시 다시 실행된다. nodemon 같은 외부 도구 없이 Node 19 부터 기본 내장. 짧은 스크립트 반복 테스트할 때 편하다.
--inspect — Chrome 으로 디버거 붙이기
크롬 브라우저에서 chrome://inspect 를 열면 그 프로세스를 잡고 브레이크포인트·콘솔을 쓸 수 있다. 어려운 디버깅 때 든든.
요약 — 3편 좌표
여기까지 정리. node 명령은 두 가지 모드 — 인터랙티브 REPL (실험실) 과 파일 실행 (작업장). 한 줄짜리 트릭으로 -e, 실행 파일화엔 셔뱅. 실전 보조로 --watch (자동 재실행) 와 --inspect (Chrome DevTools 디버거). 다음 편에서 진짜 큰 주제 — 모듈 시스템 CommonJS vs ESM 의 차이를 본다. 30년 묵은 자바스크립트 모듈 문제의 결말 편.
다음 편 예고 — 모듈 시스템 (CommonJS vs ESM)
require 와 import 의 차이, 언제 무엇을 쓰는가. 4편.