Skip to Content
WebJavaScriptECMAScript01. Node.js 실행 환경과 프로젝트 시작

이번 편의 결과물: 빈 폴더에서 npm init으로 todo-cli 프로젝트를 만들고 node src/index.js를 실행하면 “todo-cli 준비 완료”가 출력됩니다. · 다루는 개념: ECMAScript·JavaScript·Node.js·npm의 관계, package.json, "type": "module", node 실행 명령

이 편에서 만드는 파일

todo-cli/ ├── package.json (+) └── src/ └── index.js (+)

개념 정리

이 과목 전체에서 todo-cli라는 할 일 관리 CLI(명령행 프로그램)를 편마다 조금씩 완성합니다. 시작하기 전에 지금 다루는 언어와 실행 환경의 이름부터 정리합니다.

용어정체역할
ECMAScript언어 문법 명세(TC39가 관리)let, class, Promise 같은 문법과 내장 객체를 정의
JavaScriptECMAScript를 구현한 실제 언어브라우저·서버에서 실행되는 코드 자체
Node.jsJavaScript 실행 런타임V8 엔진 + 파일시스템·네트워크 같은 시스템 API를 붙여 브라우저 밖에서 실행
npmNode.js의 패키지 매니저라이브러리 설치, package.json 스크립트 실행

브라우저용 JavaScript에는 document, window 같은 DOM API가 있지만 Node.js에는 없습니다. 대신 Node.js는 process, fs 같은 시스템 API를 제공합니다. 이 과목은 Node.js 22(2026년 기준 최신 LTS)를 기준으로 진행합니다. LTS(Long Term Support)는 장기간 보안 패치를 제공하는 안정 버전 계열을 뜻하며, 실무 서버·CLI 도구는 보통 LTS 버전을 기준으로 배포합니다.

npm 명령 정리

명령역할
npm init -y기본값으로 package.json 생성
npm run <스크립트 이름>scripts 필드에 등록된 명령 실행
npm install <패키지>의존 패키지 설치(이 과목은 외부 패키지 없이 Node.js 내장 기능만 사용)

todo-cli는 외부 패키지 없이 Node.js 내장 모듈(fs/promises, node:test 등)만으로 완성합니다. 그래서 package.jsondependencies 항목이 생기지 않습니다.

package.json 핵심 필드

필드의미
name, version패키지 이름과 버전
type"module"이면 import/export(ESM) 문법 사용, 없으면 require(CommonJS)
mainimport로 이 패키지를 불러올 때 진입점
bin터미널 명령으로 등록할 실행 파일 매핑
scriptsnpm run 이름으로 실행할 명령 모음

"type": "module"을 지정하지 않으면 Node.js는 .js 파일을 CommonJS(require/module.exports)로 해석합니다. 이 과목은 처음부터 끝까지 ESM만 사용하므로 반드시 지정합니다.

실습

1. 폴더 만들고 npm init 실행

mkdir todo-cli cd todo-cli npm init -y

npm init -y는 질문 없이 기본값으로 package.json을 생성합니다.

2. package.json 수정

생성된 파일을 열어 아래 내용으로 바꿉니다.

// package.json { "name": "todo-cli", "version": "0.1.0", "description": "터미널에서 쓰는 할 일 관리 CLI", "type": "module", "main": "src/index.js", "bin": { "todo": "./src/index.js" }, "scripts": { "start": "node src/index.js", "test": "node --test" } }

bin 필드는 이 패키지를 전역 설치했을 때 todo라는 명령으로 src/index.js를 실행하게 합니다. 지금은 전역 설치를 하지 않으므로 이 과목 내내 node src/index.js로 직접 실행합니다.

3. 진입점 파일 작성

// src/index.js console.log('todo-cli 준비 완료');

4. 실행

node src/index.js

확인

  • 터미널에 아래처럼 출력되면 성공입니다.
todo-cli 준비 완료
  • npm run start로 실행해도 같은 결과가 나오는지 확인합니다(scripts.startnode src/index.js를 대신 실행).
  • node -v 실행 결과가 v22 이상인지 확인합니다.

직접 해보기

  1. package.jsondescription 필드를 원하는 문장으로 바꿔봅니다.
  2. src/index.jsconsole.log(process.version)을 한 줄 추가해 현재 Node.js 버전을 함께 출력해봅니다.

정답 보기

// src/index.js console.log('todo-cli 준비 완료'); console.log('Node 버전:', process.version);

자주 하는 실수

증상원인고치는 법
SyntaxError: Cannot use import statement outside a modulepackage.json"type": "module"이 없음"type": "module" 추가 후 다시 실행
npm init -y 실행 후 파일이 안 보임다른 폴더에서 실행함pwd(또는 cd)로 현재 위치가 todo-cli/인지 확인
Cannot find module './index.js'파일 경로나 이름 오타src/index.js 경로와 대소문자를 정확히 확인

확인 문제

문제 14지선다
ECMAScript와 JavaScript의 관계로 옳은 것은?
문제 24지선다
package.json에서 type 값을 module로 지정할 때 달라지는 점은?
문제 34지선다
package.json의 bin 필드가 하는 역할은?
문제 44지선다
type이 module로 설정된 상태에서 import 없이 require를 사용하면 어떻게 되는가?

참고 자료

Last updated on