IM-Course 3일차. 오늘 배운 내용에서 가장 중요하다고 느낀 부분은 node.js와 CommonJS다. 브라우저 환경과 node.js는 사용법이 크게 다르지 않지만 브라우저는 window객체와 document객체가 있는 node.js는 대신 global 객체가 이를 대체한다. 다만 완전히 같지는 않다. 대부분 스코프 규칙이 모듈과 연관된 경우가 많고 이는 CommonJS의 한 부분이다.
CommonJS에서 사용하는 require 함수나 exports 객체에 대한 부분이 어렵게 느껴졌고 이에 대한 질문을 많이 했다. 어느 정도는 이해가 갔지만 명확하게 이해를 하지 못한것 같아 정리를 해보기로 했다.
node.js의 사이트를 방문해보면 이런 문구가 있다.
'node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.'
처음엔 이게 무슨 말인지 몰랐지만 검색해서 찾아보았는데 쉽게 말해 이런 뜻이다.
JavaScript를 '서버에서 동작할 수 있도록 하는 환경(런타임)'이다.
node.js의 가장 큰 특징과 장점은 다음과 같다.
하나의 쓰레드가 request를 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다.
동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.
나는 이중에서 npm이 가장 큰 장점이라고 생각한다.
자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 개발속도와 효율성이 클 것이라고 생각하기 때문이다.
개발자들에게는 이런 명언이 있다. '바퀴를 다시 발명하지 마라.'
무슨 뜻이냐 하면 이미 만들어진 걸 또 만들려고 고생하지 말라는 말이다.
npm은 사용자가 바퀴를 다시 발명하지 않게 해준다.
CommomJS는 하나의 개념이다. 자바스크립트의 모듈화를 위한 하나의 프로젝트 중 하나다.
CommonJS 포맷은 Node.js의 표준이다.
CommonJS에서는 내보내기를 'exports 및 module.exports'를 이용하고 가져오기의 경우 'require' 를 사용한다.
const Grub = require('./Grub'); // 가져오기 class Bee extends Grub{ // TODO.. constructor(age=5,color='yellow',food,job='Keep on growing'){ super(age,color,food); this.job = job; } eat(){ super.eat(); } } module.exports = Bee; // 내보내기
위와 같이 사용할 수 있다.
요즘은 ES6 방식도 많이 사용하고 있는데 'require' 대신 'import-from' 을 사용하게 된다.