node-js (서버이해)

박경현·2022년 5월 18일
0

node js로 express를 안 쓰고 간단하게 서버를 구현해 봤다.

서버가 어떻게 작동하는지 다시 한번 상기할 수 있는 시간이었다

서버의 작동 순서

  1. 유저가 브라우저에서 url을 입력하거나 요청을 보낸다.
  2. 이 url과 연결된 서버가 등장!! (인터넷에서 실행 중인 컴퓨터 해당 도메인과 관련된 ip를 가지고 있으며 자동으로 할당!!)
  3. 서버에서 들어오는 요청에 따라 응답을 주는 코드를 실행!!(이거 node에서 자동으로 해준다)
  4. 내가 적기만 하면 되는 부분

Node JS의 라이프 사이클(?)

무조건 내가 이해해야하는게 먼저여서 가볍게 이해를 했다

내가 서버를 App.js를 만들었다고 가정해보자

  1. App.js를 실행하고 이 안에 스크립트를 전부 읽는다
  2. 읽은 뒤 변수와 상수를 만들어 버림!! -> 그리고 이벤트 루프 준비!
  3. 이벤트가 일어나면 필요한 코드를 실행한다!

서버 생성 및 실행 코드

서버 생성

const http = require('http');

const routes = require('./routes');

const server = http.createServer(routes.handler)
// 서버를 가동만한다!!ㄴㄷ
// 여기서 routes.~~ 적는건 안된다!! 외부에서 바굴수없게 만들었다!!
server.listen(3000);

NodeJS의 내장 모듈인 http를 가져와서 서버를 생성했다

https는 아직 안배워서 배우면 그걸로 서버 생성하는 법을 적겠다!!

우리가 상호 작용할 서버코드 경로를 routes에 연결해줬다.
listen으로 계속 서버가 돌게 만들었다 -> 따로 죽이는 코드 없으면 안 죽는다!!

서버 실행

const fs = require("fs")

const requestHandler_practice = (req,res) => {
    // 몇번 서버에서 받아서 내용을 줄지!
    const url = req.url;
    const method = req.method;

    if('/' === url) {
        res.setHeader('Content-Type', 'text/html');
        res.write("<html>");

        res.write('<head><title>Practice</title> </head>');
        res.write('<body>');

        res.write('<form method="POST" action="/mess"><input type="text" name="mess"><button type="submit">SEND!!!!</button></form>')

        res.write('</body>');
        res.write('</html>');
        return res.end();

    }

    if('/mess' === url && method === 'POST') {
        //즉 내가 무언가 눌렀을때 그에 반응해서 나오면 됨

        const body = []

        req.on('data', (chunk) => {
            body.push(chunk)
        })
        req.on('end', ()=> {
            console.log(Buffer.concat(body))
            const bodyParser = Buffer.concat(body).toString();

            const message = bodyParser.split('=')[1]
            fs.writeFile('mess.txt', message, (err) => {
                res.statusCode = 302
                res.setHeader('Location', '/');// 디볼트 경로
                return res.end();
            })
        })

    }

}

module.exports = {
    handler: requestHandler_practice,
    someText: "Hard Coding!!"
}

경로 '/'를 요청하면 간단하게 form형태를 내보내주고 그 form을 작성하고
Send버튼을 누르면 '/mess'로 이동하게 된다

그리고 form에서 적은 데이터를 mess.txt에 따로 저장했다!!

적을때 req.on('data'~`)로 chunk를 전부 body라는 배열에 저장하고
req.on('end',~~)로 Buffer.concat.toString()으로 데이터를
우리가 인식할 수 있게 만들었다

피드백

Node JS는 고정관념없이 자유롭게 수용할 수 있어야겠다,,,이벤트 루프를 공부하면서 깨닫게 되었다

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글