Node.js란?

2023. 11. 27. 03:28Node.js

728x90
반응형

현재 참여 중인 프로그래머스 데브코스 수업에서 Node.js를 사용하여 간단한 서버를 구동시켜보았다.

//index.js
let server = require('./server');
let router = require('./router');
let requestHandler = require('./requestHandler');

const mariadb = require('./database/connect/mariadb')
mariadb.connect();

server.start(router.route, requestHandler.handle);
//server.js
let http = require('http');
let url = require('url');

function start(route, handle) {
    function onRequest(request, response) {
        let pathname = url.parse(request.url).pathname;
        let queryData = url.parse(request.url, true).query;

        route(pathname, handle, response);
    }

    http.createServer(onRequest).listen(8888);
}

exports.start = start;
//route.js
function route(pathname, handle, response) {
    if (typeof handle[pathname] == 'function') {
        handle[pathname](response, productId);
    }
    else {
        response.writeHead(404, {'Content-Type' : 'text/html'});
        response.write('Not Found');
        response.end();
    }
}

exports.route = route;
//requestHandler.js
const fs = require('fs');
const main_view = fs.readFileSync('./main.html', 'utf-8');

const mariadb = require('./database/connect/mariadb');

function main(response) {
    console.log('main');

    mariadb.query("select * from product", function(err, rows) {
        console.log(rows);
    });

    response.writeHead(200, {'Content-Type' : 'text/html'});
    response.write(main_view);
    response.end();
}

let handle = {};
handle['/'] = main;


exports.handle = handle;
//mariadb.js
const mariadb = require('mysql');

const conn = mariadb.createConnection(
    {
        host: 'localhost',
        prot: 3306,
        user: 'root',
        password: 'root',
        database: 'tennis'
    }
);

module.exports = conn;

Javascript 파일 5개로

server.js 의 코드 몇 줄이면 된다

서버가 구동하는 것이 매우 충격적이었다.

 

위의 코드들로 서버를 만들어보았지만 수업 코드를 단순히 따라친 것에 불과해 nodejs의 기본 개념과 원리를 더 공부해보았다.

 

Node.js란?

Javascript Runtime 플랫폼이다. 쉽게 Javascript 실행기라고 생각하면 좋다.

nodejs 이전에 Javascript는 브라우저에서만 실행이 가능했었다. 하지만 nodejs가 나오면서 브라우저를 벗어나 단독으로 실행이 가능해졌다. 이로 인해 Backend 개발이 가능해진 것이다.

특징

  • Chrome V8 JavaScript 엔진 기반
  • 단일 쓰레드(Single Thread)와 이벤트 기반
  • 비동기 I/O 처리 (Non-Blocking I/O)
  • 고성능 네트워크 서버
  • 개발 생산성 향상
  • 방대한 모듈 제공 (NPM)

모듈

  • Node.js의 모듈은 CommonJS 방식을 따름
  • Node.js는 모듈 단위로 기능을 분할
  • 모듈은 파일과 1대1 대응
  • 하나의 모듈은 자신만의 독립적 스코프를 가짐

 

exports, module.exports

  • 모듈은 독립적인 파일 스코프를 갖음
  • 때문에 모듈 안에 선언한 모든 것들은 해당 모듈 내부에서만 참조 가능
  • 만약 모듈 안에 선언한 항목을 외부에 공개하여 다른 모듈들이 사용할 수 있게 하고 싶다면 exports 객체를 사용
  • 공개된 모듈은 require 함수를 사용해 임포트
  • exports는 module.exports의 alias

 

require

  • 전역함수인 require로 다른 모듈을 임포트
  • 임포트 후 exports 객체를 통해 공개된 부분 사용

 

코어 모듈

nodejs에 기본적으로 포함되어 있는 모듈을 코어 모듈이라고 한다. 코어 모듈은 경로 없이 바로 사용가능하다.

const http = require('http');

 

외부 모듈 (npm)

nodejs는 npm을 통하여 외부 모듈을 사용할 수 있다. 마찬가지로 경로 없이 사용가능하다. (설치 했다면)
외부 모듈들은 npmjs.com에서 검색 가능하다.

//npm install mysql 명령어로 설치한다.
const mariadb = require('mysql');
728x90
반응형

'Node.js' 카테고리의 다른 글

express.js의 Middleware  (0) 2023.12.15