July 02, 2023
Node.js는 Chrome V8 JavaScript 엔진 기반의 서버 사이드 JavaScript 런타임
Node.js는 이벤트 기반, 비동기식, 싱글 스레드 모델을 사용하여 경량화되고 빠르게 동작합니다. 이는 Node.js가 동시에 많은 연결을 처리하면서도 일정한 성능을 유지할 수 있게 합니다. Node.js는 네트워크 애플리케이션 개발과 같이 I/O 작업이 주로 발생하는 상황에서 뛰어난 성능을 보여줍니다.
⇒ 성능
또한 Node.js는 npm(Node Package Manager)이라는 패키지 관리자를 통해 다양한 외부 모듈과 라이브러리를 사용할 수 있습니다. 이러한 모듈과 라이브러리는 개발자들이 애플리케이션을 개발하거나 서버를 구축하는 데 도움이 되는 많은 기능을 제공합니다.
⇒ 패키지 관리
Node.js는 JavaScript를 사용하여 서버 측 애플리케이션을 개발하고 실행할 수 있게 해주는 강력한 도구입니다. 이를 통해 개발자들은 JavaScript의 유연성과 풍부한 생태계를 활용하여 효율적이고 확장 가능한 서버 애플리케이션을 구축할 수 있습니다.
⇒ 서버 개발 가능 (확장성)
요약하자면, Node.js를 알고 있는 프론트엔드 개발자는 서버 사이드 렌더링, 빌드 도구와 자동화, 패키지 관리, API 개발 및 전체 스택 개발 등 다양한 측면에서 유리한 경험과 기술을 갖출 수 있습니다.
개발 프로젝트는 외부 라이브러리를 다운로드 받고 빌드하는 등 일련의 명령어를 자동화하여 프로젝트를 관리하는 도구가 존재한다.
같은 툴이 그러한 프로그램이다. NPM은 자바스크립트 기반 프로젝트의 빌드 도구인 셈이다. NPM을 이용해 프론트엔드 개발 프로젝트를 세팅해 보자.
// 프로젝트 초기 생성 명령어
npm init
// package.json
{
"name": "sample",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
// name: 프로젝트 이름
// version: 프로젝트 버전 정보
// description: 프로젝트 설명
// main: 노드 어플리케이션일 경우 진입점 경로. 프론트엔드 프로젝트일 경우 사용하지 않는다.
// scripts: 프로젝트 명령어를 등록할 수 있다.초기화시 test 명령어가 샘플로 등록되어 있다
// author: 프로그램 작성자
// license: 라이센스
//*echo : echo 명령어는 주로 컴퓨터의 터미널이나 명령 프롬프트에서 사용되는 명령어
❯ npm -help
Usage: npm <command>
where <command> is one of:
access, adduser, audit, bin, bugs, c, cache, ci, cit,
clean-install, clean-install-test, completion, config,
create, ddp, dedupe, deprecate, dist-tag, docs, doctor,
edit, explore, fund, get, help, help-search, hook, i, init,
install, install-ci-test, install-test, it, link, list, ln,
login, logout, ls, org, outdated, owner, pack, ping, prefix,
profile, prune, publish, rb, rebuild, repo, restart, root,
run, run-script, s, se, search, set, shrinkwrap, star,
stars, start, stop, t, team, test, token, tst, un,
uninstall, unpublish, unstar, up, update, v, version, view,
whoami
CDN
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
직접 다운로드
NPM
npm install react
// package.json
"dependencies": {
"react": "18.2.0"
}
유의적버전(Sementic Version)
유의적 버전은 주(Major), 부(Minor), 수(Patch) 세 가지 숫자를 조합해서 버전을 관리한다. 위에 설치한 react의 버전은 v18.2.0인데 주 버전이 18, 부 버전이 2, 수 버전이 0인 셈이다.
각 버전을 변경하는 기준은 다음과 같다
버전의 범위
1.2.3
`>1.2.3
=1.2.3 <1.2.3 <=1.2.3`
~1.2.3 ^1.2.3
틸트(~) 는 마이너 버전이 명시되어 있으면 패치버전만 변경한다. 예를 들어 ~1.2.3 표기는 1.2.3 부터 1.3.0 미만 까지를 포함한다. 마이너 버전이 없으면 마이너 버전을 갱신한다. ~0 표기는 0.0.0부터 1.0.0 미만 까지를 포함한다.
캐럿(^) 은 정식버전에서 마이너와 패치 버전을 변경한다. 예를 들어 ^1.2.3 표기는 1.2.3부터 2.0.0 미만 까지를 포함한다. 정식버전 미만인 0.x 버전은 패치만 갱신한다. ^0 표기는 0.0.0부터 0.1.0 미만 까지를 포함한다.
보통 라이브러리 정식 릴리즈 전에는 패키지 버전이 수시로 변한다. 0.1에서 0.2로 부버전이 변하더라도 하위 호환성을 지키지 않고 배포하는 경우가 빈번하다. ~0로 버전 범위를 표기한다면 0.0.0부터 1.0.0미만까지 사용하기 때문에 하위 호완성을 지키지 못하는 0.2로도 업데이트 되어버리는 문제가 생길수 있다.
반면 캐럿을 사용해 ^0.0으로 표기한다면 0.0.0부터 0.1.0 미만 내에서만 버전을 사용하도록 제한한다. 따라서 하위 호완성을 유지할 수 있다. (자세한 내용은 여기를 참고)
NPM으로 패키지를 설치하면 package.json에 설치한 버전을 기록하는데 캐럿 방식을 이용한다. 초기에는 버전 범위에 틸트를 사용하다가 캐럿을 도입해서 기본 동작으로 사용했다. 그래서 우리가 설치한 react는 ^16.12.0 표기로 버전 범위를 기록한 것이다.