프론트엔드 개발에 있어 Node.js가 필요한 이유와 NPM(Node Package Manager)에 대해 알아보자.
프론트엔드 개발에 Node.js가 필요한 이유
최신 스펙으로 개발할 수 있다
자바스크립트 스펙의 빠른 발전에 비해 브라우저의 지원 속도는 느리다. 편리한 스펙이 나와도 이것을 구현해 주는 Babel 같은 도구의 도움이 필수적이다. 웹팩, NPM 같은 노드 기술로 만들어진 환경에서 사용할 때 비로소 자동화된 프론트엔드 개발환경을 갖출 수 있다.
Typescript, SASS 같은 고수준 프로그래밍 언어를 사용하려면 전용 트랜스파일러가 필요한데, 이를 Node.js 환경에서 제공한다.
빌드 자동화
예전처럼 코딩 결과물을 브라우저에 바로 올리는 경우는 거의 없다. 파일을 압축하고, 코드를 난독화하고, 폴리필을 추가하는 등 개발 이외의 작업을 거친 후 배포한다. Node.js는 이러한 일련의 빌드 과정을 이해하는데 도움을 준다. 뿐만 아니라 라이브러리 설치 후 관리도 가능하고, 각종 테스트를 자동화하는데도 사용된다.
개발 환경 커스터마이징
각 프레임워크에서 제공하는 도구를 사용하면 손쉽게 개발환경을 갖출수 있다. React.js의 CRA(create-react-app), Vuejs 의 vue-cli를 사용한다면 말이다. 그러나 개발 프로젝트는 각자의 형편이라는 것이 있어서 툴을 그대로 사용할 수 없는 경우도 빈번하다. 커스터마이징 하려면 Node.js 지식이 필요하다. 어쩌면 자동화된 도구를 사용할 수 없는 환경이라면 직접 환경을 구축해야 할 상황에 놓일 수도 있다.
이렇게 Node.js는 프론트엔드 개발에서 필수 기술로 자리 잡고 있다.
프로젝트 생성
npm init으로 프로젝트 생성한다. → package.json 파일 생성된다.
package.json 파일에는 프로젝트의 모든 메타 정보가 담겨져 있다.
- name: 프로젝트 이름
- version: 프로젝트 버전 정보
- description: 프로젝트 설명
- main: 노드 애플리케이션일 경우 진입점 경로, 프론트엔드 프로젝트일 경우 사용하지 않음
- scripts: 프로젝트 명령어를 등록할 수 있음, 초기화 시 "test" 명령어가 샘플로 등록되어 있음
- author: 프로그램 작성자
- license: 라이센스
터미널에 npm을 치면 npm 다음에 올 수 있는 command가 나온다. 보통 자주 사용하는 것은 start(애플리케이션 실행), test(테스트), install(패키지 설치), uninstall(패키지 삭제)이다.
package.json 파일 안에 scripts 내용은 npm으로 실행시킬 수 있다. 단, 위의 command가 아닌 새로 작성한 경우에는 npm run ~ 이렇게 해주어야 한다. ex) 기존 command "test": npm test vs 새로 만든 command "build": npm run build
프론트엔드 개발 환경 구축을 위해 추가할 scripts는 build(소스 코드 빌드), lint(소스 컨벤션 검사) 정도이다.
외부 패키지를 관리하는 방법
- CDN 이용
- CDN(컨텐츠 전송 네트워크)으로 제공하는 외부 라이브러리를 직접 가져오는 방식이다.
<script src="https://unpkg.com/react.dev.js"></script>
- 이처럼 가장 간단하지만, 만약 CDN 서버 장애가 생겨 라이브러리를 사용하지 못하면 웹 애플리케이션은 정상 동작하지 않을 것이다.
- CDN(컨텐츠 전송 네트워크)으로 제공하는 외부 라이브러리를 직접 가져오는 방식이다.
- 직접 다운로드
- 라이브러리 코드를 직접 다운 받아 프로젝트 폴더에 담아두면 CDN을 사용하지 않기 때문에 장애로 부터 자유롭다. 그러나, 라이브러리는 계속 업데이트 될 것이고 프로젝트에서도 최신 버전으로 교체해주어야 하기 때문에 매번 다운로드하는 것은 번거로울 것이다.
- NPM 이용
- NPM은 npm install 패키지명 명령어를 통해 외부 패키지를 프로젝트 폴더에 다운로드할 수 있다. 최신 버전의 패키지를 NPM 저장소에서 찾아 다운하고, 다음과 같이 package.json에 설치한 패키지 정보를 기록한다.
다음은 npm install react를 했을 때, package.json에 자동으로 추가된 내용이다.
{
"dependencies": {
"react": "^16.12.0"
}
}
여기서 ^16.12.0 는 무슨 표기일까? NPM은 버전 번호를 관리하기 위해 유의적 버전이라는 체계를 따른다. react의 버전이 16.12.0인데 주 버전이 16, 부 버전이 12, 수 버전이 0이라는 뜻이다.
각 버전을 변경하는 기준이 있다.
- 주 버전(Major Version): 기존 버전과 호환되지 않게 변경한 경우
- 부 버전(Minor Version): 기존 버전과 호환되면서 기능이 추가된 경우
- 수 버전(Patchv Version): 기존 버전과 호환되면서 버그를 수정한 경우캐럿을 사용하면 하위 호환성을 유지하기 용이하여 자주 사용된다.
그리고 ^(캐럿)의 의미는 정식버전에서 마이너와 패치 버전을 변경한다는 의미이다. 예를 들어, ^1.2.3은 1.2.3 부터 2.0.0 미만, 그러니까 1.9.9 까지를 포함하는 것이다. 정식버전 미만인 0.x 버전은 패치만 갱신한다. ^0은 0.0.0 부터 0.1.0 미만, 그러니까 0.0.9 까지를 포함한다. ^(캐럿)을 사용하면 하위 호환성을 유지하기 용이하여 자주 사용된다.
'웹 공부하기 > Frontend' 카테고리의 다른 글
[인프런] 프론트엔드 개발환경의 이해와 실습 (플러그인) (0) | 2021.10.12 |
---|---|
[인프런] 프론트엔드 개발환경의 이해와 실습 (자주 사용하는 로더) (0) | 2021.10.08 |
[인프런] 프론트엔드 개발환경의 이해와 실습 (로더) (0) | 2021.10.07 |
[인프런] 프론트엔드 개발환경의 이해와 실습 (웹팩 옵션 --entry, --output-path) (0) | 2021.10.07 |
[인프런] 프론트엔드 개발환경의 이해와 실습 (웹팩이 필요한 이유) (0) | 2021.10.05 |