[NodeJS] Node.js 기초 모듈

node js의 편리하고 다양한 모듈을 사용하기 위해선 package.json을 설치해야합니다. 설치하는 방법은 프로젝트 경로에서 터미널을 열고

$ npm init

를 입력해줍니다. 그럼 아래와 같이 설정을 어떻게 할 것인지에 대해 질문하는 내용이 나오는데 별 다른 설정은 설치 이후에도 설정할 수 있기 때문에 전부 enter를 눌러 설치를 진행해 줍니다.

  • 위와 같은 설정이 귀찮다면 $ npm init -y 를 사용하여 바로 설치가 가능합니다. (-y는 전부 yes로 하겠다는 의미입니다.)

1. fs 모듈 (File System)

파일 처리와 관련된 모듈.
node.js 에서 가장 중요하고 기초적인 모듈.

  • 동기식과 비동기식
    1) 동기식 : 프로그램이 동작하는 상태에서 완전히 해당 내용을 끝내고 다음으로 넘기는 방식, 순차적.
    2) 비동기식 : 동작이 끝나지 않은 상태에서도 제어권을 넘긴 후에 프로그램을 계속 진행하는 방식.

  • fs 메소드(Method)
    readFile(): 파일을 비동기적으로 읽음
        ex) fs.readFile(filename, [options], callback)
    readFileSync() : 파일을 동기적으로 읽음
       ex) fs.readFileSync(filename, [options])
    writeFile() : 파일을 비동기적으로 씀
       ex) fs.writeFile(filename, data, [options], callback)
    writeFileSync() : 파일을 동기적으로 씀
       ex) fs.writeFileSync(filename, [options])

  • 사용 방법

    <script>
    const fs = require('fs');
    
    // readFile
    fs.readFile('./text1.txt', 'utf-8', (err, data) => {
        if(err) {
            console.log(err);
        } else {
            console.log('비동기식으로 파일 읽기 : ' + data);
        }
    });
    
    // readFileSync
    const text = fs.readFileSync('./text1.txt', 'utf-8');
    console.log('동기식으로 파일 읽기 : ' + text);
    
    // writeFile
    const data = "Hello Node.js!";
    fs.writeFile('./text2.txt', data, 'utf-8', (err) => {
        if(err) {
            console.log(err);
        } else {
            console.log('비동기식으로 파일 저장');
        }
    });
    
    // writeFileSync
    fs.writeFileSync('./text3.txt', data, 'utf-8');
    console.log('동기식으로 파일 저장');
    </script>

2. http 모듈

http 웹 서버를 생성하는 것과 관련된 모든 기능을 담당.

  • http 메소드(Method)
    createServer() : server 객체를 생성
    writeHead() : 응답 header를 구성
    end() : 응답 body를 작성
    listen() : 서버를 실행하고 클라이언트를 기다림

  • MIME 형식
    응답의 형식이 무엇인지를 Header에 포함된 MIME를 통해 브라우저에게 알려줍니다. 브라우저는 이것을 참고하여 응답을 어떻게 해석할지 알 수 있습니다.
    MDN 공식문서

    text/plain : 일반적인 text 파일
    text/html : html 형식 파일
    text/css : css 형식 파일
    text/xml : xml 형식 파일
    image/jpeg : jpeg 이미지 파일
    image/png : png 이미지 파일
    audio/mp3 : mp3 음악 파일
    video/mp4 : mp4 동영상 파일
    ...

  • 사용 방법

    <script>
    const http = require('http');
    
    // req : 사용자 요청에 대한 정보(request)
    // res : 사용자에게 응답을 하기 위한 정보(response)
    
    const server = http.createServer((req, res) => {
        res.writeHead(200, {'content-type':'text/html'});
        res.end(`<!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>HTTP 모듈 테스트</title>
        </head>
        <body>
            <h2>HTTP 모듈 테스트</h2>
            <p>Node.js http 서버</p>
        </body>
        </html>`);
    });
    
    server.listen(3000, () => {
        console.log('3000번 포트로 서버 실행 중...');
    });
    </script>
    
    터미널에서 해당 디렉토리에 경로를 두고
    $ node [js 파일명]
    실행 후 listen 메소드의 로그가 정상적으로 표시된걸 확인 후 
    브라우저에 localhost:3000 로 접속하면 요청한 HTML 문서가 뜨는걸 확인할 수 있습니다.

3. express 모듈

http 모듈만 사용해서 웹 서버를 구성하면 직접 많은 기능을 따로 개발해야하는 불편한 점이 있습니다.
때문에 간단한 코드로 웹 서버의 기능을 대부분 구현할 수 있는 express 모듈을 사용하며 미들웨어와 라우터를 이용해서 편리하게 웹 서버를 구성할 수 있습니다.

  • express 모듈 설치
$ npm install express
  • express 메소드(Method)
    use() : 미들웨어를 등록.
    res.redirect() : 웹 페이지의 경로를 강제로 이동.
    req.query.키값 : 클라이언트에서 GET 방식으로 전송한 요청 파라미터를 확인.
    req.body.키값 : 클라이언트에서 POST 방식으로 전송한 요청 파라미터를 확인. (단, POST 방식을 통한 요청 파라미터를 확인하려면 body-parser와 같은 모듈을 사용해야 한다.)

  • 사용 방법

    <script>
    const express = require('express');
    const app = express();
    
    app.use((req, res) => {
        res.writeHead(200, {'content-type': 'text/html; charset=utf-8'});
        res.end('<h2>익스프레스 서버에서 응답한 메세지입니다.</h2>');
    }).listen(3000, () => {
        console.log('3000번 포트로 서버 실행중...');
    });
    </script>

좋은 웹페이지 즐겨찾기