TIL_210224

jeyoon·2021년 2월 24일
1
post-custom-banner

Today I Learned

  • node.js
  • package.json
  • 화살표 함수
  • Spread/Rest 문법
  • 구조분해
  • 모듈화, Common JS

Node.js

  • Node.js는 구글 크롬의 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임
    • V8엔진을 이용해 브라우저에서 JavaScript를 해석하듯, 서버에서 JavaScript를 동작할 수 있도록 하는 환경
    • 서버란? 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템
  • 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적
    • 논 블로킹 I/O 모델
      ➡️ I/O(input/output) 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않는 방식
  • Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈소스 라이브러리 생태계이기도 함

npm (Node Package Manager)

필요한 모듈을 다운받을 수 있는 일종의 모듈 스토어

package.json

  • package.json은 프로젝트 정보와 의존성(dependencis)을 관리하는 문서
  • 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있다.
  • package.json에는 어떤 모듈들인지 적혀만 있고, 실제 모듈들은 node_modules라는 폴더에 저장
{
  "name": "project-name",
  "version": "1.0.0",
  "keywords": [],
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "HEROPY",
  "license": "MIT",
  "dependencies": {},
  "devDependencies": {}
}
  • name

    • 프로젝트(패키지) 이름. 214자 이하의 소문자, 이름에 node나 js가 들어가면 안됨
  • version

    • 프로젝트 버전
  • dependencies

    • 패키지의 배포 시 포함될 의존성 모듈을 지정
    • 프로그램이 실행되기 위해 반드시 필요한 모듈들
    • npm install시 여기에 포함된 모든 확장 모듈 설치
  • devDependencies

    • 패키지를 개발할 때만 의존하는 모듈
    • 배포 시 포함 ㄴㄴ
  • peerDependencies

    • 패키지의 호환성 모듈을 지정
    • npm@3 이후로 배포 시 포함ㄴㄴ, 대신 호환성 모듈이 없으면 경고 메시지가 표시
  • --save

    • 프로젝트(패키지)가 배포 시 사용될 의존성 모듈을 정의하고 설치
    • --save 플래그(Flag)를 사용하거나 생략
    • --save 옵션과 함께 install 실행 시 자동으로 "dependencies"에 추가됨
  • --save-dev / -D

    • 개발 단계에서만 사용하는 의존성 모듈을 정의하고 설치
    • -D(--save-dev) 플래그를 사용
    • --save-dev 옵션과 함께 install 실행 시 자동으로 "devDependencies"에 추가됨
  • scripts

    • CLI에서 사용가능한 명령을 기술
    • npm run <스크립트 이름> 으로 실행

화살표 함수

함수 표현식을 화살표 함수로 나타내보자.

const adder = function(x) {
  return function(y) {
    return x + y
  }
}

화살표 함수

const adder = x => y => x + y
  • return 생략시에는 중괄호를 사용하지 않는다.
  • 객체를 return하는 경우 소괄호로 감싸주어야 한다.
const obj = (x, y) => ({x, y})

구조 분해 (Destructing)

Spread 문법을 이용하여 값을 해체한 후, 개별 값을 변수에 새로 할당

[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
console.log(a); // 10
console.log(b); // 20
console.log(rest); // {c: 30, d: 40}

모듈화와 Common JS

  • 모듈은 쉽게 말해 기능별로 나누어지는 프로그램 덩어리
  • 각각의 모듈(기능)은 자신만의 독립적인 실행 영역이 있어야 함
    ➡️ 독립적인 파일로 나누어 놓은 것을 모듈화라고 함
  • 모듈화의 효과
    • 자주 사용되는 코드를 별도의 파일로 만들어서 필요할 때마다 재활용할 수 있다
    • 코드 수정 시에 필요한 로직을 빠르게 찾을 수 있다
    • 필요한 로직들만 로드해서 메모리의 낭비를 줄일 수 있다
    • 한번 다운로드 된 모듈은 웹브라우저에 의해 저장되기 때문에 동일한 로직을 로드할 때 시간과 네트워크 트래픽을 절약할 수 있다 (브라우저에서만 해당)
  • Common JS는 모듈을 사용하기 위한 문법으로, Node.js의 표준이다.
    • 모듈을 정의하기 위한 문법 - 모듈 포맷 - 에는 대표적으로 AMD, CommonJS, ES6 등이 있다

적용 예시를 간단히 알아보자.

script1.js

const abc = require('./script2.js')
console.log(abc) // 'this is abc'

const abc = require('./script3.js')
console.log(abc) // 'this is abc'

script2.js

module.exports = 'this is abc'

script3.js

exports = 'this is abc'
  • require()는 module.exports를 리턴한다.
  • exports는 module.exports를 단순히 참조하고 있으며, shortcut에 불과하다.
  • exports 에 property를 명시하는 위와 같은 방법은 정상 작동하지만, 신규 객체를 할당하면 모듈이 작동하지 않으므로 되도록 module.exports를 사용하는 것이 권장된다.
  • require를 통해 불러온 모듈은 require.cache라는 객체에 저장된다. 이 캐시는 원본 모듈보다 먼저 확인되며 원본 모듈과 일치하는 이름이 캐시에 추가되면 더 이상 원본 모듈 수신 ㄴㄴ

✍️

oh my zsh 설치한 이후로 brew와 npm 명령어가 작동되지 않아서 한참동안 구글링을 하고 페어분이랑도 같이 해보다가 zsh를 지워버렸다^^ 기본 bash부터 좀 익숙해지고 나면 다시 해봐야지...

post-custom-banner

0개의 댓글