노드는 자바스크립트를 서버에서 사용할 목적으로 만들어졌고, 보통 다른 언어에 맡겨지던 작업을 자바스크립트로 가능하게 만들었다는 의미가 있다.
웹 개발자에게는 언어의 선택 이상의 의미가 있다.

서버에서 자바스크립트를 쓸 수 있게 된 것은, 사고방식을 바꿀 필요 없이 일관된 언어를 쓸 수 있다는 의미이고, 다른 전문가에게 의존할 필요가 줄어든다는 의미이며, 아마 가장 중요한 것이겠지만 서버와 클라이언트에서 같은 코드를 쓸 수 있다는 의미이다.

노드의 기초

자바스크립트로 프로그램을 만들 수 있다면 노드 애플리케이션도 만들 수 있다. 브라우저 기반 자바스크립트는 브라우저에만 해당하는 API를 사용한다.
가장 명확한 특징은, 노드에는 DOM이 없다는 것이다. 마찬가지로 노드에만 해당되고 브라우저에는 존재하지 않는 API도 있다. 운영체제와 파일시스템 지원 같은 일부 기능은 보안상의 이유로 브라우저에서는 사용할 수 없다.

무엇이 자바스크립트이고 무엇이 API의 일부인지 구분할 수 있어야 하며, 브라우저 기반 코드만 작성하던 개발자라면 windowdocument가 자바스크립트의 일부라고 생각할 수 있지만, 브라우저 환경에서 제공하는 API이다.

모듈

module은 패키지를 만들고 코드를 네임스페이스로 구분하는 매커니즘으로, 이름 충돌을 방지하는 방법이다.

tyler.js

function calculate(r) {
    return 4/3*Math.PI.Math.pow(r,3);
}

module.exports = calculate;

Module은 노드에서 모듈을 구현하기 위해 만든 특별한 객체이다.
export 프로퍼티에 무엇을 할당하든, 모듈은 그것을 내보낸다.
모듈을 사용해보자.

app.js

const tyler_calulate = require('./tyler.js');

console.log(tyler_calulate(2)); // 33.510321638291124

tyler_calulate 라는 이름을 사용했지만 어떤 이름을 쓰든 상관이 없고, 그저 변수이다. 각 변수에 할당되는 값은 노드가 require 함수를 호출한 결과이다.

모듈은 어떤 타입의 값이든 내보낼 수 있으며, 보통은 모듈 하나에 여러 함수를 저장하고, 함수를 메서드로 포함하는 객체를 내보내는 것이 일반적이다.

코어 모듈, 파일 모듈, npm 모듈

모듈은 세 가지로 나뉜다.

코어 모듈은 fs나 os처럼 노드 자체에서 제공하는 모듈이다.

408p