[JS] 모듈(Module)과 Express

J.A.Y·2024년 1월 31일
0

javaScript

목록 보기
9/21
post-thumbnail

모듈?

모든 기능을 전부 자신이 처음부터 만들어 사용한다면 좋겠지만 현실적으로 힘듭니다. 이럴 때 누군가가 이미 만들어 놓은 모듈을 제공해준다면 빠르게 원하는 기능을 구현해낼 수 있지 않을까요?

모듈을 사용하는 이유

모듈의 장점:

모듈은 코드를 간소화시켜주고, 코드를 관계 있는 것끼리 묶어서 관리하기 편리합니다.

또한, 재사용이 가능하다는 측면에서 유용하죠.

예를 들면 a.js파일에서 a와 b를 더하는 변수를 하나 만들었다고 가정했을 때,
module.exports로 해당 파일을 외부로 보내면 b.js에서도 a.js모듈을 사용할 수 있게 되는 것입니다.

모듈 내보내기 : export

모듈을 내보낼 때는 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
*/

모듈 가져오기 : require / import ~ from ~

모듈을 가져오는 방법은 두 가지입니다.
보통 node.js에선 require(), 타입스크립트에선 improt ~ from ~을 많이 이용한다고 합니다.

require()함수는 자바스크립트 파일을 읽고, 해당 파일을 실행시킨 뒤 객체로 반환해줍니다.

const module = require("module_name"); //const는 구조를 분해해 가져오기에 이름이 동일해야합니다.

이 글은 node.js에 관한 내용만 다룰 것이므로 impot ~ from ~는 간단히 예시만 보도록 하곘습니다.

import {a, b} from './var.js'; // 하나만 내보낸 모듈은 다른 이름이어도 불러올 수 있다.

모듈 종류 3가지

1. Core Module

다음은 Node.js에서 기본적으로 제공하는 모듈들입니다.

1. http: Node.js http서버를 생성하기 위한 클래스, 메소드, 이벤트를 포함합니다.
2. url: url 모듈에는 URL 확인 및 구문 분석을 위한 메소드가 포함되어 있습니다.
3. querystring: 여기에는 쿼리 문자열을 처리하는 메서드가 포함되어 있습니다.
4. path: path 모듈에는 파일 경로를 처리하는 메서드가 포함되어 있습니다.
5. fs: 파일 I/O 작업을 위한 클래스, 메서드 및 이벤트가 포함되어 있습니다.
6. util: 프로그래머에게 유용한 유틸리티 기능이 포함되어 있습니다.

2. Local Module

Local Module이란? 개발을 할 때 필요한 모듈을 직접 만들어서 사용한 것으로, 애플리케이션에서 로컬로 생성된 모듈입니다.

모듈을 만들고 해당 모듈 파일을 다른 곳에 가져오면(=export) 이용할 수 있습니다.
(패키지로 만들어 NPM을 통해 배포할 수도 있습니다.)

3. Third Party Module

NPM을 이용해서 온라인에서 사용할 수 있는 모듈입니다.
이런 모듈은 프로젝트 폴더에 설치하거나 전역적으로 설치할 수 있습니다.
대표적인 예시로는 mongoose와 express입니다.

서버 만들기

(1) http 모듈

http 모듈로 서버를 만드는 방법은 매우 간단합니다. 하지만 간단한 만큼 구현되는 기능이 많지 않으므로 현업에서 서버를 만들 때 http 모듈은 그렇게 많이 사용되는 편은 아닙니다.


http 모듈 객체

http 응답 코드는 주로 아래처럼 사용합니다.

  1. 1## : 처리중
    100 : continue, 102 : Processing
  2. 2## : 성공
    100 : continue, 102 : Processing
  3. 3## : 리다이렉트 (다른 페이지로 이동)
  4. 4## : 요청 오류
    400 : 잘못된 요청, 401 : 권한 없음, 403 : 금지됨, 404 : 찾을 수 없음 Page not found
  5. 5## : 서버 오류

개발자들 사이에서 약속한 응답 코드들 외에는 자유롭게 변경해 사용할 수 있습니다.

(단, 해당 코드가 무슨 의미인지 이해할 수 있어야겠죠?)


간단하게 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번 포트 실행");
});

(2) Express 모듈

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 모듈로 서버 만들기

    1. express폴더를 만들고, 해당 폴더로 이동합니다 (cd 폴더명)

    2. express를 이용해서 서버를 만들려면 우선 express모듈 설치를 해줘야합나다
      터미널에서 express 모듈 설치 코드 입력 > npm init으로 package.json도 설치 > touch server.js로 파일 생성

    3. 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}`);
    profile
    Done is better than perfect🏃‍♀️

    0개의 댓글