본문 바로가기

개발 환경 설정

Node.js와 패키지 관리 도구, TypeScript 컴파일러, VS Code를 준비하고 tsconfig가 있는 첫 프로젝트를 구성합니다.

타입스크립트 학습에서 의외로 많은 시간이 소모되는 구간이 바로 개발 환경 설정입니다.

명령어는 맞게 입력했는데 컴파일이 안 되거나, 에디터에서는 정상인데 터미널에서만 오류가 나는 상황이 자주 발생하기 때문입니다.

초보 단계에서는 이 문제를 내 코드가 틀렸다고 오해해 불필요한 디버깅에 빠지기 쉽습니다.

이 절은 단순 설치 절차를 나열하는 대신, 왜 이 단계가 필요한지와 어디서 어긋나기 쉬운지를 함께 설명합니다.

특히 전역 설치와 프로젝트 로컬 설치의 차이, 컴파일 설정 파일의 역할을 명확히 이해하면 이후 학습 속도가 훨씬 안정됩니다.

지금 환경을 정확하게 잡아두면, 다음 절부터는 문법 학습과 실습에 집중할 수 있습니다.

로컬 TypeScript 버전과 lockfile, workspace 에디터 버전, tsconfig 프로젝트를 맞춘다. noEmit 검사와 noEmitOnError를 적용한 출력을 나누고 실제 선택한 런타임에서 결과를 확인한다. 본문 명령 실습의 전역 tsc와 이 협업 정책은 구분한다.

TYPE / RUNTIME / CONTRACT

컴파일러 버전과 설정을 함께 고정한다

본문의 입문 실습은 전역 tsc를 사용합니다. 협업용 흐름에서는 프로젝트의 TypeScript와 lockfile을 보관하고, 에디터·터미널이 같은 버전과 설정을 사용하도록 맞춥니다.

버전·설정·검사·출력·실행의 협업 조건프로젝트TypeScript→workspace에디터→tsconfig프로젝트→noEmit정적검사→noEmitOnError출력정책→실제런타임6노드5간선이다. 본문의전역설치실습과추가협업정책을구분한다. 검사와출력명령은목적이다르며기존출력파일삭제를의미하지않는다.
프로젝트 TypeScriptlockfile로 버전 고정
연결 관계프로젝트 TypeScript · lockfile로 버전 고정 → workspace 에디터 · 같은 컴파일러 버전
workspace 에디터같은 컴파일러 버전
연결 관계workspace 에디터 · 같은 컴파일러 버전 → tsconfig 프로젝트 · 같은 대상 · 옵션
tsconfig 프로젝트같은 대상 · 옵션
연결 관계tsconfig 프로젝트 · 같은 대상 · 옵션 → 정적 검사 · --noEmit
정적 검사--noEmit
연결 관계정적 검사 · --noEmit → 출력 정책 · --noEmitOnError
출력 정책--noEmitOnError
연결 관계출력 정책 · --noEmitOnError → 실제 런타임 · 출력 경로 · 모듈 확인
실제 런타임출력 경로 · 모듈 확인
버전·설정·검사·출력·실행의 협업 조건 · 모바일프로젝트TypeScript→workspace에디터→tsconfig프로젝트→noEmit정적검사→noEmitOnError출력정책→실제런타임6노드5간선이다. 본문의전역설치실습과추가협업정책을구분한다. 검사와출력명령은목적이다르며기존출력파일삭제를의미하지않는다. 모바일에서도 노드와 연결 방향·독립 경로가 같다.
프로젝트 TypeScriptlockfile로 버전 고정
연결 관계프로젝트 TypeScript · lockfile로 버전 고정 → workspace 에디터 · 같은 컴파일러 버전
workspace 에디터같은 컴파일러 버전
연결 관계workspace 에디터 · 같은 컴파일러 버전 → tsconfig 프로젝트 · 같은 대상 · 옵션
tsconfig 프로젝트같은 대상 · 옵션
연결 관계tsconfig 프로젝트 · 같은 대상 · 옵션 → 정적 검사 · --noEmit
정적 검사--noEmit
연결 관계정적 검사 · --noEmit → 출력 정책 · --noEmitOnError
출력 정책--noEmitOnError
연결 관계출력 정책 · --noEmitOnError → 실제 런타임 · 출력 경로 · 모듈 확인
실제 런타임출력 경로 · 모듈 확인

ACTUAL LESSON COMMANDS

전역 설치 → tsc → node index.js

본문은 node/npm 버전 확인, 전역 TypeScript 설치, tsc --init, greet 코드와 tsc/node 실행을 보여줍니다. 로컬 설치와 lockfile 정책은 추가 협업용 설명입니다.

WORKSPACE / COMPILER

로컬 버전과 에디터 버전을 맞춘다

프로젝트 개발 의존성의 typescript와 lockfile을 보관합니다. VS Code도 workspace 버전을 선택하고, 설치된 로컬 컴파일러를 사용합니다.

PROJECT / OPTIONS

프로젝트 검사와 출력 정책을 구분

npx tsc -p . --noEmit은 tsconfig의 대상을 검사합니다. npx tsc -p . --noEmitOnError는 오류가 없을 때 산출물을 생성합니다. 두 명령은 서로 다른 목적입니다.

OUTPUT / EXECUTION

출력 경로와 모듈 규칙도 확인한다

target·module·모듈 판정과 컴파일러 버전에 따라 출력 구문이 달라질 수 있습니다. 설정한 출력 경로와 Node 또는 브라우저의 모듈 규칙에 맞춰 실행 결과를 확인합니다.

로컬 TypeScript 버전과 lockfile, workspace 에디터 버전, tsconfig 프로젝트를 맞춘다. noEmit 검사와 noEmitOnError를 적용한 출력을 나누고 실제 선택한 런타임에서 결과를 확인한다. 본문 명령 실습의 전역 tsc와 이 협업 정책은 구분한다.


Node.js와 npm/yarn 설치하기

타입스크립트는 자바스크립트의 상위 집합이며, 결국 자바스크립트로 변환되어 실행됩니다.

이 절의 npm·tsc 명령을 실행하기 위해 Node.js 환경을 준비합니다. 타입스크립트 학습 자체가 반드시 개인 PC의 전역 설치를 요구하는 것은 아니며, 제공된 클라우드 환경에 도구가 있으면 그 도구를 먼저 확인합니다.

Node.js는 자바스크립트를 웹 브라우저 밖에서도 실행할 수 있게 해주는 런타임입니다.

Node.js 설치: 가장 먼저 Node.js 공식 웹사이트에 방문하여 여러분의 운영체제에 맞는 설치 파일을 다운로드하고 설치해주세요.

설치 페이지에는 보통 두 가지 버전이 있습니다.

  • LTS (Long Term Support) 버전: 장기적인 안정성을 보장하는 버전입니다. 특별한 이유가 없다면 LTS 버전을 설치하는 것을 권장합니다.
  • Current 버전: 최신 기능을 포함하지만, 안정성이 덜 검증된 버전입니다.

설치 과정은 대부분 다음(Next) 버튼만 누르면 되는 간단한 절차로 이루어져 있습니다.

설치 확인: 설치가 완료되면, 터미널(또는 명령 프롬프트)을 열고 다음 명령어를 입력하여 Node.js와 함께 설치되는 패키지 관리 도구인 npm (Node Package Manager)이 제대로 설치되었는지 확인합니다.

node -v
npm -v

각각 Node.js와 npm의 버전 정보가 출력된다면 성공적으로 설치된 것입니다.

yarn (선택 사항): npm 외에도 yarn이라는 패키지 관리 도구를 사용할 수도 있습니다.

yarn은 npm과 유사한 기능을 제공합니다.

이 절은 npm만으로 따라 할 수 있습니다. 기존 프로젝트가 Yarn을 사용한다면 그 프로젝트의 지정 버전·lockfile을 따르며, 실습 때문에 두 패키지 관리자를 섞지 않습니다.

npm install -g yarn
yarn -v

-g 옵션은 해당 패키지를 전역(Global)으로 설치한다는 의미입니다.

이렇게 설치하면 어떤 프로젝트 폴더에서든 yarn 명령어를 사용할 수 있습니다.


타입스크립트 컴파일러 설치하기

Node.js와 npm(또는 yarn)이 준비되었다면, 이제 타입스크립트 코드를 자바스크립트로 변환해 줄 타입스크립트 컴파일러를 설치할 차례입니다.

이 컴파일러는 tsc라는 명령어로 실행되며, 여러분이 작성한 .ts 파일을 .js 파일로 바꿔주는 역할을 합니다.

터미널에서 다음 명령어를 입력하여 타입스크립트 컴파일러를 전역으로 설치합니다.

npm install -g typescript
# 또는
# yarn global add typescript

설치가 완료되면 다음 명령어로 타입스크립트 컴파일러(tsc)의 버전을 확인해보세요.

tsc -v

버전 정보가 출력된다면 타입스크립트 컴파일러 설치도 성공적으로 완료된 것입니다.

입문 단계에서는 전역 설치가 이해하기 쉽지만, 실무에서는 프로젝트마다 타입스크립트 버전을 고정하기 위해 로컬 설치를 더 많이 사용합니다.

팀 프로젝트에서 버전 차이로 빌드 결과가 달라지는 일을 줄이려면 devDependencies에 typescript를 넣고 npx tsc로 실행하는 방식이 안전합니다.

이 절의 명령 실습은 전역 tsc를 사용합니다. 상단 그림의 협업용 흐름을 적용하려면 프로젝트에 typescript를 개발 의존성으로 설치하고 lockfile을 보관한 뒤, 에디터도 workspace 버전을 선택합니다. npx tsc -p . --noEmit으로 검사하고 npx tsc -p . --noEmitOnError로 오류가 없는 경우에만 산출물을 생성할 수 있습니다.


코드 에디터 준비하기: VS Code 추천

타입스크립트 개발을 위해 어떤 코드 에디터를 사용해야 할까요?

시중에는 다양한 코드 에디터가 있지만, 타입스크립트 개발에 있어서는 단연 Visual Studio Code (VS Code)를 강력히 추천합니다.

  • 타입스크립트 개발에 최적화: VS Code는 마이크로소프트에서 개발했으며, 타입스크립트와의 궁합이 매우 좋습니다. 별도의 설정 없이도 타입스크립트 코드를 작성할 때 강력한 자동 완성, 오류 검사, 리팩터링 기능을 기본으로 제공합니다.
  • 풍부한 확장 생태계: 다양한 확장(Extension)을 통해 기능을 확장할 수 있으며, 이는 개발 생산성을 크게 향상시킵니다.
  • 경량성과 강력함의 조화: 비교적 가볍게 동작하면서도, 필요한 모든 기능을 제공하는 강력한 에디터입니다.

VS Code 설치: Visual Studio Code 공식 웹사이트에 방문하여 여러분의 운영체제에 맞는 설치 파일을 다운로드하고 설치해주세요.

기본 설정 확인: VS Code를 설치하고 실행한 뒤 .ts 파일을 열면, 별다른 설정 없이도 타입스크립트 구문에 대한 문법 강조(Syntax Highlighting)와 기본적인 타입 검사 기능이 활성화되는 것을 확인할 수 있습니다.


첫 타입스크립트 프로젝트 시작하기

이제 타입스크립트 코드를 작성하고 실행할 개발 환경이 준비되었습니다.

첫 번째 타입스크립트 코드를 작성해보며 환경 설정을 마무리해봅시다.

새 프로젝트 폴더 생성: 원하는 위치에 새로운 폴더를 만들고, VS Code로 해당 폴더를 엽니다.

mkdir my-ts-project
cd my-ts-project
code . # 현재 폴더를 VS Code로 엽니다.

타입스크립트 설정 파일 (tsconfig.json) 생성: 타입스크립트 프로젝트의 루트 폴더에서 다음 명령어를 실행하여 tsconfig.json 파일을 생성합니다.

이 파일은 타입스크립트 컴파일러가 코드를 어떻게 컴파일할지에 대한 설정을 담고 있습니다.

tsc --init

이 명령어를 실행하면 tsconfig.json 파일이 생성되며, 내부에는 다양한 설정들이 주석 처리된 상태로 포함되어 있습니다.

생성되는 템플릿은 컴파일러 버전에 따라 다릅니다. 아래 기본 실습 뒤에는 출력 경로와 모듈 규칙을 명시한 별도 프로젝트 경로도 제시합니다. 기존 프로젝트의 설정을 교재 예제로 덮어쓰지 마세요.

첫 타입스크립트 파일 작성: my-ts-project 폴더 안에 index.ts라는 파일을 생성하고 다음 코드를 작성해보세요.

index.ts
function greet(name: string): string {
  return `Hello, ${name}! Welcome to TypeScript!`;
}

let userName: string = "TypeScript Learner";
console.log(greet(userName));

// 의도적으로 오류를 만들어봅시다.
// let age: number = "twenty"; // 오류: 'string' 형식은 'number' 형식에 할당될 수 없습니다.

age 선언의 주석을 해제하면 VS Code에서 문자열을 number에 할당하는 오류를 확인할 수 있습니다.

이것이 바로 타입스크립트의 강력한 타입 검사 기능입니다!

주석 처리된 age 변수 라인은 잠시 오류가 발생하는 것을 확인하기 위한 것이니, 학습 후에는 주석을 유지하거나 제거하셔도 좋습니다.

타입스크립트 코드 컴파일 및 실행: 이제 index.ts 파일을 자바스크립트로 컴파일해봅시다.

터미널에서 다음 명령어를 실행합니다.

tsc

이 명령어를 실행하면 tsconfig.json 파일의 설정에 따라 index.ts 파일이 index.js 파일로 컴파일됩니다.

my-ts-project 폴더 안에 index.js 파일이 새로 생성된 것을 확인해보세요.

index.js (컴파일된 결과)
function greet(name) {
  return `Hello, ${name}! Welcome to TypeScript!`;
}
let userName = "TypeScript Learner";
console.log(greet(userName));
// let age = "twenty"; // 타입스크립트의 타입 정보는 사라지고 자바스크립트로 변환됩니다.

위 코드는 타입 표기가 제거되는 부분을 보여 주는 JavaScript 예시입니다. 실제 산출물에는 컴파일러 버전·target·module·모듈 판정 설정에 따라 추가 구문이 들어갈 수 있습니다.

타입 정보는 컴파일 시점에만 사용되고 런타임에는 필요 없기 때문입니다.

이제 이 자바스크립트 파일을 Node.js를 이용해 실행해봅시다.

node index.js

터미널에 Hello, TypeScript Learner! Welcome to TypeScript! 메시지가 출력된다면 설정이 정상적으로 완료된 것입니다.

이제 타입스크립트 개발 환경을 준비했습니다.

다음 절부터는 기본 타입, 함수, 객체 타입, 컴파일 흐름을 순서대로 다룹니다.

명시적인 작은 프로젝트로 다시 확인하기 기존 my-ts-project와 구별되는 새 폴더를 사용하면 다른 실습 파일이나 이전 출력과 혼동하지 않습니다. 이미 Node.js와 컴파일러가 있는 학습 환경에서는 설치를 반복하지 말고 먼저 node -v, tsc -v를 확인하세요.

새 폴더 ts-first-isolated에 다음 두 설정 파일과 앞의 index.ts만 둡니다. 여기서는 Node에서 CommonJS로 실행하고 결과를 dist 폴더로 출력하는 경로를 선택합니다.

package.json
{
    "private": true,
    "type": "commonjs"
}
tsconfig.json
{
    "compilerOptions": {
        "target": "ES2022",
        "module": "NodeNext",
        "moduleResolution": "NodeNext",
        "strict": true,
        "noEmitOnError": true,
        "outDir": "dist"
    },
    "include": ["index.ts"]
}

target은 출력 JavaScript의 문법 기준, module과 package.json의 type은 모듈 해석, strict는 검사 강도, outDir은 출력 위치입니다. include가 이번에 검사할 파일을 지정하므로 다른 실습 파일의 오류가 섞이지 않습니다.

# ts-first-isolated 폴더에서 실행합니다.
tsc -p . --noEmit
tsc -p .
node dist/index.js

검사에 성공하면 보통 진단 문구가 없고, 두 번째 명령 뒤 dist/index.js가 생깁니다. 마지막 실행은 앞의 Hello, TypeScript Learner! Welcome to TypeScript! 한 줄입니다. node index.js는 다른 위치의 옛 파일을 실행할 수 있으므로 이번 경로에서는 dist/index.js를 지정합니다.

협업용으로 이 새 프로젝트에 컴파일러를 로컬 설치하려면 npm install --save-dev --save-exact typescript로 설치 버전을 기록하고 package-lock.json도 보관합니다. 설치한 뒤에는 위 명령의 tsc를 npx tsc로 바꾸고 npx tsc -v로 선택된 버전을 확인합니다. 재현할 때는 보관한 의존성·lockfile에 맞춰 npm ci를 사용합니다. npx라는 이름만으로 설치 버전이 고정되는 것은 아닙니다.

스스로 확인하기 이 새 폴더의 index.ts에서 원문의 age 오류 주석을 해제하고 tsc -p . --noEmit, tsc -p .을 차례로 실행하면 진단과 출력은 어떻게 되나요? 이미 성공한 dist/index.js가 있다면 그것을 실행해도 수정본의 성공 증거가 되나요?

풀이 확인

문자열을 number에 대입한 진단을 받습니다. 첫 명령은 원래 출력하지 않고, 두 번째도 noEmitOnError 때문에 오류가 있는 새 산출물을 만들지 않습니다. 이전 dist/index.js가 남을 수 있으므로 그 실행은 수정된 TypeScript가 검사를 통과했다는 증거가 아닙니다. 진단을 해결하고 다시 출력한 파일을 실행해야 합니다.

파일 지정과 프로젝트 지정의 차이는 공식 tsconfig 안내, 출력 위치는 공식 outDir 설명에서 확인할 수 있습니다. VS Code에서는 공식 컴파일 안내의 workspace TypeScript 선택을 참고하세요.