NodeJS

NodeJS?

  • Chrome V8 JavaScript 엔진으로 빌드된 JavaScript Runtime

NVM

설치

NVM 설치 주소 에 들어가서 아래의 화면으로 이동합니다.
Pasted image 20231213144718.png

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

윈도우 사용자

윈도우 사용자들 아래의 링크를 들어가면 된다.
nvm-window
그 후에 Download Now! 를 찾아서 눌러주면 됩니다.
Pasted image 20231213145338.png
해당 URL로 이동 한 뒤에 아래의 zip 파일을 받으면 됩니다.
Pasted image 20231213145435.png

사용법

# NVM 으로 설치한 Node 버전 목록
nvm ls

# NVM으로 특정 버전의 node 설치
nvm install 12.14.1

# NVM으로 특정 버전의 node를 사용
nvm use 12.14.1

NPM

NPM?

  • NodePackageManager는 전 세계의 개발자들이 만든 다양한 기능 들을 관리

Pasted image 20231213151702.png

테스트 환경 구축

# NodeJS 초기화
npm init -y
# parcel-bundler 설치 devDependance
npm install parcel-bundler -D

npm install lodash

개발용 의존성 패키지 vs 일반 의존성 패키지

  • 개발용 의존성 패키지 : 개발할 때만 필요하고 실제 빌드 후 운영에서는 사용하지 않는 경우를 의미한다.
  • 일반 의존성 패키지 : 개발 + 운영시 모두 필요한 패키지를 의미한다.

개발 서버 실행과 빌드

dev

{
	// ...
	"main" : "index.js",
	"script" : {
		"dev" : "parcel index.html" 
	}
	// ...
}

package.json

npm run dev
import _ from 'lodash'

console.log(_.camelCase('hello world'));

Build

{
	// ...
	"main" : "index.js",
	"script" : {
		"dev" : "parcel index.html" ,
		"build" : "parcel build index.html"
	}
	// ...
}

package.json

npm run build

위 명령어를 입력시에는 Build가 되서, dist 파일 안에 build된 결과물이 보이게 됩니다
해당 빌드 결과물은 난독화를 진행하여 build 결과물을 추출합니다.

난독화?

  • 작성된 코드를 읽기 어렵게 만드는 작업을 말합니다.
  • 빌드된 결과(제품)는 브라우저에서 해석되는 용도로, 용량을 축소하고 읽기 어렵게 만드는 등의 최적화를 거치는 것이 좋습니다.

Bundle?

  • 프로젝트 개발에 사용한 여러 모듈을 하나로 묶어내는 작업

유의적 버전(SemVer)

npm info lodash

Pasted image 20231218085332.png

특정 패키지 버전 설치

# 특정 패키지 버전 설치
npm install lodash@4.17.20

# 패키지 버전 업그레이드
npm update lodash

^ 이 없다면, 해당 버전으로 Fix 된 상태이기에, 업데이트를 진행할 수가 없다.

ECMA Script

ECMA?

  • Java Script를 표준화 해주는 국제 표준 기구

실습

초기화

npm init -y

npm i parcel-bundler -D

package.json

{
	...
	 "scripts": {
		  "dev" : "parcel index.html",
		 "build" : "parcel build index.html"
  },
  ...
}

index.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<script src="./main.js"></script>
	</head>
	<body>
		<h1>Hello World!</h1>
	</body>
</html>

main.js

console.log(typeof 'Hello World');
console.log(typeof 123);
console.log(typeof true);
console.log(typeof undefined);
console.log(typeof null);
console.log(typeof {});
console.log(typeof []);

! 300

function getType(data){
	return Object.prototyle.toString.call(data)
}

console.log(getType(123))
console.log(getType(false))

! 300

function getType(data){
	return Object.prototyle.toString.call(data).slice(8,-1)
}

console.log(getType(123))
console.log(getType(false))
console.log(getType(null))
console.log(getType({}))
console.log(getType([]))

! 300

getType.js

export default function getType(data){
	return Object.prototyle.toString.call(data).slice(8,-1)
}

main.js


import getType from './getType.js'
...

JS 유효 범위

// 변수 유효 범위(Variable Scope)
// var, let, const

function scope(){
	if(true){
		const a = 123
		console.log(a)
	}
}

scope()
function scope(){
	console.log(a) // 2번
	if(true){
		console.log(a) // 1번
		const a = 123
	}
}
unction scope(){
	console.log(a) // 2번
	if(true){
		console.log(a) // 1번
		var a = 123
	}
}

JS 형 변환

// Truthy (참 같은 값)
// true, { }, [], 1, 2, 'false', -12, '3.14'

// Falsy(거짓 같은 값)
// false , '', null, undefined, 0, -0, NaN

함수

화살표 함수

const double = function(x){
	return x * 2
}
console.log('double: ', double(7))

const doubleArrow = (x) =>{
	return x * 2
}
// 위 함수와 같은 결과로 출력된다.
const doubleArrow = x => x * 2
console.log('doubleArrow', double)

const doubleArrow = x => { x * 2 }
// 위와 같은 형태로는 반환 할 수 없다.

const doubleArrow = x => false
//와 같이 대부분의 자료형을 위와 같이 넣을 수 있다.
// 하지만, 예외적으로 { } 같은 경우에는 아래와 같이 작성해야합니다.

const doubleArrow = x => ({
	name : 'Kim'
})

IIFE

IIFE?

  • Immediately-Invoked Function Experession
  • 즉시 실행 함수

const a = 7
function double(){
	console.log(a * 2)
}

double( );
/**

보통의 경우에는
위와 같이 함수 선언 -> 함수 호출 이런식으로 되어있지만, 
즉시 호출 함수를 사용하면 아래와 같은 형태로 생성 된 즉시 호출이 가능합니다.

*/ 

(function(){
	console.log(a * 2)
})();

Hosting

Hosting?

  • 함수 선언부가 유효범위 최상단으로 끌어올려지는 현상

const a = 7

double() // 1번

const double = function() {
	console.log(a * 2);
}
const a = 7

double()

function double(){
	console.log(a * 2)
}

타이머 함수


#FrontEnd #JavaScript #NodeJS