Node.js 프로젝트는 npm 혹은 yarn 패키지 매니저를 통해 생성할 수 있다.
해당 포스팅에서는 yarn 패키지 매니저를 통해 Node.js 프로젝트를 생성할 것이다.
dependency와 devDependency
프로젝트 생성 전 dependency와 devDependency의 개념과 둘의 차이점에 대해 먼저 알아보도록 한다. dependency와 devDependency는 프로젝트에 필요한 패키지를 정의하는 데 사용되는 개념으로, package.json 파일에 존재한다.
dependency
프로젝트가 실행되는 데 필요한 패키지를 의미한다. 이러한 패키지들은 프로덕션 환경에서 필수적으로 설치되어야 하며, 주로 프로젝트의 기능 구현에 사용된다. dependency에는 애플리케이션 동작과 직접적으로 연관된 라이브러리를 설치한다. (예: Express)
devDependency
개발에 필요한 패키지를 의미한다. 이러한 패키지들은 주로 프로젝트를 개발하고 테스트하는 데 사용된다. devDependencies에는 개발할 때만 필요한 라이브러리를 설치한다. (예: typescript)
dependency와 devDependency를 구분하는 이유는 다음과 같다.
1. 프로젝트에서 필요한 패키지들을 명확하게 분리하기 위해서.
2. 빌드 시간을 줄이기 위해서.(devDependencies에 포함된 라이브러리는 실제 배포할 때 포함되지 않기 때문에 빌드 시간을 줄일 수 있다)
Node.js 프로젝트 생성
이제 yarn 패키지 매니저를 통해 Node.js 프로젝트를 생성하는 방법을 알아볼 차례이다.
1. 우선 디렉토리를 하나 만들고 해당 디렉토리로 이동한다.
mkdir [폴더명]
2. yarn init
node.js 프로젝트를 시작할 때 패키지 매니저인 yarn을 사용하여 프로젝트를 초기화하는 명령어이다. package.json 파일이 생성된다.
yarn init
3. yarn add –D typescript
프로젝트에 TypeScript를 추가하는 명령어이다. -D 옵션을 통해 devDependencies에 TypeScript 패키지를 추가할 수 있다.
yarn add –D typescript
4. yarn add –D @types/node
@types/node는 TypeScript를 사용하여 Node.js 프로젝트를 개발할 때, Node.js에서 제공하는 타입 선언 파일(type declaration files)이 포함된 패키지이다. 이 패키지를 설치하면 Node.js에서 사용되는 기본 내장 모듈들의 타입 정보를 TypeScript가 인식할 수 있게 된다.
해당 명령어는 Node.js 프로젝트에서 TypeScript를 사용하기 위한 타입 정보를 설치하는 명령어이다. -D 옵션을 통해 devDependencies에 추가할 수 있다.
yarn add –D @types/node
5. tsconfig.json 수정(typescript 세팅)
필자는 typescript를 사용할 것이기 때문에 tsconfig.json을 수정해서 typescript 세팅을 할 것이다.
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "Node",
"target": "ESNext",
"noImplicitAny": true,
"removeComments": true,
"outDir": "dist",
"esModuleInterop": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
tsconfig.json
하나하나 뜯어보겠다.
● "module": TypeScript에서 사용하는 모듈 시스템을 지정한다. "commonjs"는 Node.js의 기본 모듈 시스템인 CommonJS를 사용한다. CommonJS는 Node.js에서 모듈을 정의하고 사용하기 위한 방법으로, require() 함수를 통해 모듈을 불러오고 module.exports 또는 exports 객체로 내보내는 것을 통해 작동한다.
● "moduleResolution": 모듈을 해석하는 방법을 지정한다. "Node"는 Node.js의 모듈 해석 전략을 사용한다. Node.js의 모듈 해석 전략은 다음과 같다.
1. 절대 경로 모듈: 모듈 이름이 '/'로 시작하면 루트 디렉토리부터 모듈을 탐색한다.
2. 상대 경로 모듈: 모듈 이름이 './' 또는 '../'로 시작하면 상대 경로를 사용하여 모듈을 탐색한다.
3. 패키지 모듈: 모듈 이름이 './' 또는 '../'로 시작하지 않으면 모듈 이름을 패키지 이름으로 간주하고, node_modules 디렉토리에서 해당 패키지를 찾는다. 만약 패키지를 찾을 수 없으면 상위 디렉토리에 대해서 같은 과정을 반복한다.
● "target": 컴파일된 JavaScript 코드의 버전을 지정한다. ESNext는 최신 ECMAScript 버전을 사용한다.
● "noImplicitAny": 암시적으로 any 타입을 사용하는 것을 금지한다. true로 설정하면 명시적으로 타입을 지정해야 한다.
● "removeComments": true로 설정하면 컴파일된 JavaScript 코드에서 주석을 제거한다.
● "outDir": 컴파일된 JavaScript 코드가 저장될 경로를 지정한다. "dist"로 하면 컴파일된 JavaScript 코드는 dist 폴더에 저장된다.
● "esModuleInterop": import 문을 컴파일할 때 CommonJS 모듈을 ES 모듈로 변환할 때 사용된다. ES 모듈은 모듈 시스템으로, import/export 구문을 사용하여 모듈을 정의하고 가져올 수 있다.
● "include"와 "exclude" 배열은 TypeScript 컴파일러가 소스 코드 파일을 찾는 방법을 지정한다. "include" 배열은 컴파일 대상에 포함될 파일의 패턴을 지정한다. "exclude" 배열은 컴파일 대상에서 제외될 파일의 패턴을 지정한다.
위의 tsconfig.json에서는 node_modules 폴더와 *.spec.ts 파일을 제외하고 src 폴더 아래의 모든 파일을 컴파일 대상으로 지정한다.
tsconfig.json까지 전부 완료하면 Node.js 프로젝트를 생성이 완료되었다.
필자는 typescript 파일을 컴파일하고 실행까지 해 보겠다.
1. yarn tsc
tsc는 TypeScript 컴파일러로, 이 명령어를 실행하면, TypeScript 소스 코드 파일들이 컴파일되어 .js 확장자로 변환되고, 해당 파일들의 타입을 체크한다. 현재 src 폴더 아래에 index.ts 라는 typescript 파일이 만들어져 있는 상태라고 가정한다.
yarn tsc
위의 tsconfig.json에서 "outDir"을 "dist"로 했기 때문에, 컴파일 시 javascript 파일이 dist 폴더 밑에 생성된다.
2. node dist/index.js
index.js 파일을 node.js에서 실행한다.
node dist/index.js
'Node.js' 카테고리의 다른 글
웹 FrameWork와 Node.js (0) | 2023.04.15 |
---|