[JavaScript] TWIL : CommonJS와 Node.js의 기본 내장 module (20/11.16~11.17)

정빈·2020년 11월 25일
0

Server 스프린트를 하면서 학습했던 CommonJS와 Node.js의 기본 내장 module에 대해 짚고 넘어가려 한다.
JavaScript 표준을 위한 움직임: CommonJS와 AMD를 많이 참고하여 블로깅 한다.


module이 무엇인가?

module은 사전적 의미로 '구성 단위'를 뜻한다.
그렇다면 IT 용어로서의 module의 뜻은 무엇일까?
사전적 의미를 그대로 따라, 프로그램을 구성하며 하나의 동작을 수행하는 독립적인 클래스나 함수라고 할 수 있겠다.

현재 JavaScript 언어는 각각의 파일에 각각의 모듈들을 독립적으로 생성하여 서로를 내보내고, 끌어다 쓸 수 있도록 모듈화를 지원하고 있다.


CommonJS의 탄생과 현재

그러나, JS가 처음부터 이를 지원한 것은 아니다. 초기 JS는 브라우저에서의 사용을 위해 탄생했다. JS를 브라우저 밖에서도 사용하려는 프로젝트들이 계속됐지만, 큰 성공을 이루지 못했다.

2005년, Ajax가 부상하면서 JS의 중요성이 많이 커졌고, Google에서 강력한 V8 JS 엔진을 내놓았다. 그렇게 JS를 브라우저 밖에서 사용하려는 움직임이 큰 힘을 얻었다.

그렇게 CommonJS 프로젝트가 시작되었고, JS의 범용적 사용을 위해 표준을 정립하기로 했다.
JS의 문제는 결국 모듈화였다. 그렇게 CommonJS는 모듈을 어떻게 정의하고 사용할 것인가에 대한 주요 명세(표준)을 발표했다.

모듈화는 이와같이 세 부분으로 이루어진다.

  • 스코프(Scope): 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 한다.
  • 정의(Definition): 모듈 정의는 exports 객체를 이용한다.
  • 사용(Usage): 모듈 사용은 require 함수를 이용한다.

그렇게 CommonJS는 module.exports 전역 객체와 require 함수를 이용해 모듈화 문제를 해결하면서, JS의 common화에 큰 기여를 하게 되었다.

// module 사용방법

// fileA.js
let c = 3;
let d = 4;
function sum(a,b) {
  return a + b + c + d;
}

module.exports = sum;

// fileB.js
const sum = require("./fileA");

console.log(sum(1, 2)); // node fileB.js를 실행시키면 10(1 + 2 + 3 + 4) 찍힘

Node.js의 기본 내장 module(fs, http)

JS의 런타임인 Node.js에서는 기본 내장 module함수를 많이 제공하고 있다.
내장 module함수 역시 이를 사용할 파일 안에서 require 함수로 불러오면 된다.

const http = require('http');

그 중에서도, 이번 Server 스프린트를 진행하면서 중요도가 높은 FileSystem(fs)모듈과 http 모듈을 사용해보았다.

fs module

fs 모듈은 파일 처리(CRUD)와 관련된 작업을 하는 모듈로, 대부분의 메소드가 동기식과 비동기식으로 나뉘어있다. sync라는 단어가 붙어있으면 동기식으로 작동된다고 생각하면 된다.

  • fs.mkdir(path[, options], callback) : 비동기식으로 파일 만들기
  • fs.readFile(path[, options], callback) : 비동기식으로 파일 읽기
  • fs.writeFile(filename, data, [options], callback) : 비동기식으로 파일에 data 쓰기
  • fs.unlink(Path, callback) : 비동기식으로 파일 삭제

http module

http 모듈은 Server를 만들고, 통신하게 할 수 있는 class 모듈이다.
이번 스프린트를 진행하면서 http 모듈로 request와 response를 처리하는 Server를 구축했다. 엄청나게 많은 메서드들이 있으나, 직접 사용했던 메서드 중심으로 포스팅 해본다.

  • let server = http.createServer() : 서버 객체 생성
  • server.listen(port, callback) : 서버 띄우기
  • server.close(callback) : 서버 종료

Server는 client로부터 받는 request객체와 response객체를 처리해야 한다.
이는 callback(req, res)로 핸들링 할 수 있다.

  • request.on(event, callback) : request 객체로부터의 이벤트 처리(계속 이어붙여 처리 가능, 'end'이벤트로 종료)
  • response.writeHead(statusCode, statusMessage, headers) : response의 Head작성
  • response.end(data, encoding, callback) : reponse 작성(처리) 후 응답 보냄


이 외에도 정말 많은 Node.js의 기본 내장 모듈들과 그 메서드들이 존재한다.
전부 다 외울 수 없는 노릇이니, 필요시 공식 문서를 참조해야한다. 공식 문서를 잘 읽어내는 법을 연습해야하는 이유이다.
언제까지나 블로그 포스팅들을 참고할 수 없고, 한글판 번역이 나올 때까지 기다릴 수 없다.
영어 문서에 대한 두려움을 떨치는 것은 IM코스를 수료하기까지 꼭 이뤄내야하는 부분이다.
개발자로 살아남기 위해서는! 꼭 필요한 능력이다. 제 3 외국어가 아닌게 어디냐. 영어인 것에 감사하자.

profile
Back-end. You'll Never Walk Alone.

0개의 댓글