본문 바로가기
Web

Node.js로 초간단 서버 만들어보기

by 클레어몬트 2024. 6. 24.

Node.js를 이용해서 아주 간단한 서버를 만들어보자

// server.js 파일
let http = require('http'); // http 기능을 사용할 수 있도록 모듈을 받아온다

function onRequest(request, response) { // onRequest: client에게 요청이 온다면
    // http의 head + body 구조 템플릿을 생각하자
    response.writeHead(200, {'Content-Type' : 'text/html'}); // 200(정상)
    response.write('Hello Node.js'); // write = writeBody
    response.end();
}

http.createServer(onRequest).listen(8888);
// http 기능을 이용해서 서버를 생성했는데 onRequest 함수를 이용해서 통신을 할 거고 
// client와 통신할 때 주파수(포트 넘버)를 8888로 맞춰야 한다
// localhost:8888
// localhost는 내 컴퓨터 주소를 의미한다

 

 

 

 

<server.js 파일을 다른 파일에서도 사용할 수 있게 모듈화 시켜주기>

index.js에서 server.js를 호출

 

Node.js가 미리 만들어 둔 모듈을 우리가 require('모듈 이름'); 이렇게 사용한 것처럼, 우리가 만든 server도 모듈처럼 다른 javascript 파일에서 사용할 수가 있다

// index.js 파일
let server = require('./server.js');

server.start();
// server.js 파일
let http = require('http');

function start() {
    function onRequest(request, response) {
        response.writeHead(200, {'Content-Type' : 'text/html'});
        response.write('Hello Node.js');
        response.end();
    }

    http.createServer(onRequest).listen(8888);
    // localhost:8888
}

// 이 start 함수를 다른 파일에서도 start 함수로 사용할 수 있게 export 해주겠다
exports.start = start;

 

 

 

<URL 모듈 사용하기>

*URL(Uniform Resource Locator): 인터넷상에서 웹 페이지가 어디 있는지 "위치"를 알려주는 주소

쉽게 말해서 웹 페이지 주소이다

서버(server): client의 request를 받는다

라우터(router): client의 request URL에 따라 루트(route)를 정해준다(어디로 갈지 길만 정해준다)

 

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

server.start(router.route);
// server.js 파일
let http = require('http');
let url = require('url');

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

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

    http.createServer(onRequest).listen(8888);
    // localhost:8888
}

exports.start = start;
// router.js 파일
function route(pathname) {
    console.log('pathname: ' + pathname);
}

exports.route = route;

 

 

 

 

<URL에 따라 다른 콘솔 찍기> (백엔드만 구현)

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

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;
        route(pathname, handle);

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

    http.createServer(onRequest).listen(8888);
    // localhost:8888
}

exports.start = start;
// router.js 파일
function route(pathname, handle) {
    console.log('pathname: ' + pathname);

    handle[pathname]();
}

exports.route = route;
// requestHandler.js 파일
function main() {
    console.log('main');
}

function login() {
    console.log('login');
}

let handle = {}; // key:value 쌍으로 이루어진 변수 상자
handle['/'] = main;
handle['/login'] = login;

exports.handle = handle;

 

 

 

<URL에 따라 프론트엔드에 다른 response 보내기> 

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

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;
        route(pathname, handle, response);
    }

    http.createServer(onRequest).listen(8888);
    // localhost:8888
}

exports.start = start;
// router.js 파일
function route(pathname, handle, response) {
    console.log('pathname: ' + pathname);

    if (typeof handle[pathname] == 'function') {
        handle[pathname](response);
    } else { // 예외처리
        response.writeHead(404, {'Content-Type' : 'text/html'});
        response.write('404 Not Found - CLAREMONT');
        response.end();
    }

}

exports.route = route;
// requestHandler.js 파일
function main(response) { // 메인 페이지
    console.log('main');

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

function login(response) { // 로그인 페이지
    console.log('login');

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

let handle = {};
handle['/'] = main; // main 함수 호출
handle['/login'] = login; // login 함수 호출

exports.handle = handle;

 

 

 

 

 

 

 

 

 

참고 및 출처: 프로그래머스 웹 서비스 개발의 이해(김송아)

'Web' 카테고리의 다른 글

MariaDB 설치 + 사용 방법  (0) 2024.06.25
도커(docker)란?  (0) 2024.06.25
웹 기본지식  (0) 2024.06.20