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


노드에서 모듈을 활용하는 방법은 크게 세 가지가 있습니다. 노드에서 자체적으로 제공하는 코어모듈을 사용하는 방법과, 사용자가 직접 모듈을 작성해서 사용하는 방법, 그리고 npm 패키지 저장소에서 다른 사람이 만들어 놓은 모듈을 다운로드 받아서 사용하는 방법이 있습니다.

이는 편의에 의한 분류일 뿐이며, 특별한 차이점이 있는 것은 아닙니다. 이러한 모듈들은 require 해서 사용하게 되며, 각각의 모듈은 node.js가 require 함수의 매개변수를 보고 어떤 타입인지 판단하게 됩니다.

노드 앱이 실행되어 코드의 여러군데에서 모듈들을 로드하더라도 동일한 모듈은 단 한번만 임포트되어 사용되므로 메모리를 절약할 수 있습니다.

코어 모듈

노드는 웹 브라우저 이외의 환경에서도 사용할 목적으로 만들어 졌기에 기존의 웹 브라우저 기반의 자바스크립트와는 다른 API를 제공합니다. DOM, BOM 등의 웹 문서를 조작하는 API가 존재하지 않는 대신, 운영체제 정보나 파일 정보에 접근하거나 http 서버로 사용하는 등의 기능을 제공합니다.

이러한 기능은 노드가 자체적으로 제공하는 모듈을 로드하여 사용할 수 있습니다. 아래에 유용한 노드 모듈들의 목록을 정리해 놓았습니다. 몇몇 모듈들에 대한 사용방법은 추후 파트에서 확인해 볼 것입니다.

/* 코어 모듈 */
require('assert')         // 테스트 목적
require('child_process')  // 외부 프로그램을 실행할 때 필요
require('cluster')        // 다중 프로세스를 이용해 성능을 올릴 수 있게 한다.
require('crypto')         // 내장된 암호화 라이브러리
require('dns')            // 네트워크 이름 해석에 쓰이는 DNS 함수
require('domain')         // 에러를 고립시키기 위해 IO 비동기 작업을 묶는다.
require('events')         // 비동기 이벤트 지원
require('fs')             // 파일 시스템 작업
require('http')           // http 서버 및 관련 유틸
require('https')          // https 서버 및 관련 유틸
require('net')            // 비동기 소켓 기반 네트워크 API
require('os')             // 운영체제 유틸리티
require('path')           // 파일 시스템 경로 유틸
require('punycode')       // 유니코드 인코딩
require('querystring')    // URL 쿼리스트링 해석 및 생성
require('readline')       // 대화형 IO 유틸. CLI 프로그램에 사용
require('smalloc')        // 버퍼에 메모리를 명시적으로 할당
require('string_decoder') // 버퍼를 문자열로 변환
require('tls')            // 보안 전송 계층 통신 유틸
require('tty')            // 저수준 TTY 함수
require('dgram')          // 사용자 데이터그램 프로토콜(UDP) 네트워크 유틸
require('url')            // URL 파싱 유틸
require('util')           // 내부 노드 유틸
require('vm')             // 가상머신. 컨텍스트 생성에 사용.
require('zlib')           // 압축 유틸

이러한 모듈들에 대한 정보는 노드의 버전이 업데이트 되면서 추가, 수정, 삭제될 수 있습니다. 따라서 기본적인 사용법을 숙지하고 자세한 내용은 노드가 제공하는 API 문서를 직접 확인해 나가면서 프로그래밍 해 나가야 합니다.

노드 api 문서는 홈페이지에서 찾을 수 있으며, 아래는 10 버전의 최신 문서의 경로입니다.

https://nodejs.org/dist/latest-v10.x/docs/api/

파일 모듈

사용자가 직접 작성한 모듈은 파일의 상대 경로를 따라 (./ ../ 등으로 시작) 로드해서 사용하게 됩니다.

require('./path/modules.js')
require('../a.js')

npm 모듈

npm은 노드 개발자들이 만든 다양한 모듈(패키지) 들을 공유하고 사용할 수 있도록 해주는 패키지 저장소이며, 커뮤니티 입니다. npm에는 방대한 양의 패키지가 존재하며 노드 개발을 위한 유용한 패키지가 많으며 이러한 패키지를 이용해 실제 개발을 진행하게 됩니다.

npm에서 패키지를 다운로드 받아 설치할 경우 프로젝트 루트 폴더 아래 node_modules 라는 폴더에 저장되며 여기에 저장된 모듈들은 내장 모듈과 같이 모듈 이름만으로 불러와 사용할 수 있습니다.

require('express')
require('q')