모든 기능을 전부 자신이 처음부터 만들어 사용한다면 좋겠지만 현실적으로 힘듭니다. 이럴 때 누군가가 이미 만들어 놓은 모듈을 제공해준다면 빠르게 원하는 기능을 구현해낼 수 있지 않을까요?
모듈은 코드를 간소화시켜주고, 코드를 관계 있는 것끼리 묶어서 관리하기 편리합니다.
또한, 재사용이 가능하다는 측면에서 유용하죠.
예를 들면 a.js파일에서 a와 b를 더하는 변수를 하나 만들었다고 가정했을 때,
module.exports
로 해당 파일을 외부로 보내면 b.js에서도 a.js모듈을 사용할 수 있게 되는 것입니다.
모듈을 내보낼 때는 module.exports
또는 exports
를 사용합니다. 아래의 예시를 보면 이해하기 쉽습니다.
const a = 10;
const b = 20;
function add() {
return a + b;
}
module.exports = add; // 또는 export default add;
const a = "변수 a";
const b = "변수 b";
module.exports = {
a,
b
}
/* 하나의 모듈 파일에 여러 개 만들 때
module.exports.a = a 또는 epxorts.a = a
module.exports.b = b 또는 exports.b = b
*/
모듈을 가져오는 방법은 두 가지입니다.
보통 node.js
에선 require()
, 타입스크립트에선 improt ~ from ~
을 많이 이용한다고 합니다.
require()
함수는 자바스크립트 파일을 읽고, 해당 파일을 실행시킨 뒤 객체로 반환해줍니다.
const module = require("module_name"); //const는 구조를 분해해 가져오기에 이름이 동일해야합니다.
이 글은 node.js
에 관한 내용만 다룰 것이므로 impot ~ from ~
는 간단히 예시만 보도록 하곘습니다.
import {a, b} from './var.js'; // 하나만 내보낸 모듈은 다른 이름이어도 불러올 수 있다.
다음은 Node.js에서 기본적으로 제공하는 모듈들입니다.
1. http: Node.js http서버를 생성하기 위한 클래스, 메소드, 이벤트를 포함합니다.
2. url: url 모듈에는 URL 확인 및 구문 분석을 위한 메소드가 포함되어 있습니다.
3. querystring: 여기에는 쿼리 문자열을 처리하는 메서드가 포함되어 있습니다.
4. path: path 모듈에는 파일 경로를 처리하는 메서드가 포함되어 있습니다.
5. fs: 파일 I/O 작업을 위한 클래스, 메서드 및 이벤트가 포함되어 있습니다.
6. util: 프로그래머에게 유용한 유틸리티 기능이 포함되어 있습니다.
Local Module
이란? 개발을 할 때 필요한 모듈을 직접 만들어서 사용한 것으로, 애플리케이션에서 로컬로 생성된 모듈입니다.
모듈을 만들고 해당 모듈 파일을 다른 곳에 가져오면(=export) 이용할 수 있습니다.
(패키지로 만들어 NPM을 통해 배포할 수도 있습니다.)
NPM을 이용해서 온라인에서 사용할 수 있는 모듈입니다.
이런 모듈은 프로젝트 폴더에 설치하거나 전역적으로 설치할 수 있습니다.
대표적인 예시로는 mongoose와 express입니다.
http 모듈로 서버를 만드는 방법은 매우 간단합니다. 하지만 간단한 만큼 구현되는 기능이 많지 않으므로 현업에서 서버를 만들 때 http 모듈은 그렇게 많이 사용되는 편은 아닙니다.
http 모듈 객체
http 응답 코드는 주로 아래처럼 사용합니다.
개발자들 사이에서 약속한 응답 코드들 외에는 자유롭게 변경해 사용할 수 있습니다.
(단, 해당 코드가 무슨 의미인지 이해할 수 있어야겠죠?)
간단하게 http 모듈로 서버 만드는 예제를 보도록 하곘습니다.
const http = require("http"); // http변수에 http 모듈 가져옴
const fs = require("fs");
// createServer(): 서버를 만듬
const server = http.createServer(function (req, res) {
// 파일 전송
try {
const data = fs.readFileSync("./index.html");
res.writeHead(200);
res.end(data);
} catch (error) {
// 에러 발생 시 응답 내용
console.log(error);
res.writeHead(404);
res.end(error.message);
}
});
//요청할 때 발생하는 이벤트
server.on("request", function () {
console.log("요청 이벤트");
});
server.on("add", function () {
console.log("접속 이벤트");
});
//listen: 서버를 실행
server.listen(8080, function () {
console.log("8080번 포트 실행");
});
Express?
Express : 웹 및 모바일 애플리케이션 구축을 위한 광범위한 기능을 제공하는 노드 JS 웹 애플리케이션 프레임워크
서버와 경로를 관리하는 데 도움이 되는 Node js 상단에 구축된 레이어입니다.
Node.js의 API를 훨씬 더 단순하게 만들고, 유용한 기능들은 추가로 더해 Node.js를 더 편리하고 유영하게 사용할 수 있게 도와주는 프레임워크입니다.
ExpressJS를 기반으로 하는 다름 프레임워크들이 많이 만들어지고 있으므로, 이 프레임워크 하나만 배워도 다른 프레임 워크를 빠르게 배울 수 있습니다.
설치 코드 : `npm install express` / 뒤에 @버전을 덧붙여주면 원하는 버전의 express를 설치할 수 있습니다.
설치가 완료되면 express관련 폴더가 들어 있는 node_modules가 생성됩니다.
package.json의 dependencies > express에서 기록하면 됩니다.
보통 node_modules와 package-lock.json은 gitignore로 묶어서 git 버전 관리에 제외시킵니다.
.gitignore:
- `.txt` : 확장자가 txt로 끝나는 파일을 무시한다.
- `!text.txt` : text.txt는 무시되는 파일에서 제외한다.
- `test!` : test 폴더 내부의 모든 파일을 무시한다. (a.exe와 b.exe 모두 무시)
- `!test` : 현재 폴더 내에 존재하는 폴더 내부의 모든 파일을 무시한다.(a.exe만 무시)
Express 모듈로 서버 만들기
- express폴더를 만들고, 해당 폴더로 이동합니다 (cd 폴더명)
- express를 이용해서 서버를 만들려면 우선 express모듈 설치를 해줘야합나다
터미널에서 express 모듈 설치 코드 입력 > npm init으로 package.json도 설치 > touch server.js로 파일 생성
- server.js에서 아래처럼 입력하여 서버를 생성해주면 됩니다.
const express = require('express'); // express 모듈 불러오기
// Constants
const PORT = 8080; // Express 서버를 위한 포트 설정 *8080이 아니더라도 특정 번를 제외하고는 자유롭게 설정 가능
const HOST = '0.0.0.0'; // Express 서버를 위한 호스트 지정
// APP
const app = express(); // 새로운 Express 어플 생성
app.get('/', (req, res) => {
// "/"이 경로로 요청이 오면 Hello World를 결과값으로 전달
res.send('Hello, world');
});
// 해당 포트와 호스트에서 HTTP 서버를 시작
app.list(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);