TIL_20.05.22(금) - express, Event Loop

nRecode·2020년 5월 22일
0

TodayILearned

목록 보기
47/95
post-thumbnail

express

오늘은 어제 구현했던 server->client를 http의 내장 모듈로 구현을 했다면, 그 구현한 내용을 express 라이브러리를 이용하여 구현하는 시간을 가졌다.

어제와 구성은 비슷했고,
메소드들이 조금 다른데 제공하는 npm문서가 잘 되어있어서 금 방 찾아서 바꿀 수 있었던 것 같다.


if(request.method === 'POST' && request.url === "/classes/messages"){
  let save = [];
  
  request.on('data',(chuck)=>{
    save.push(chuck);
  });
  request.on('end',()=>{
    save = Buffer.concat(save).toString();
    data.results.push(JSON.parse(save));
    response.writeHead(201, headers);
    response.end(JSON.stringify(data));
  });
}

http 모듈을 사용하면서 라우팅을 할 때에는,
(data라는 객체의 key는 results로 value는 빈배열인 상황이다.)
1. 위와 같은 조건을 걸고
2. chuck라는 버퍼 데이터를 받아서 save에 다 push하고
3. (data는 잘게 나누어서 전달되기 때문에(?) 데이터가 송신이 다 끝나면)end에서 버퍼들이 들어있는 배열을 concat한 다음 문자열로 바꾸고
4. JSON으로 파싱한 것을 results에 넣어주고
5. writeHead()메소드로 상태코드와 미리 설정해준 header를 먼저 보내고
6.end()메소드로 파싱된 data를 전송한다...


그러나 express를 사용하면
express, cors, body-parser 설치하고,

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();

//생략

app.use(bodyParser.json());
app.use(cors());


app.post('/classes/messages',(req,res)=>{
  data.results.push(req.body);
  res.status(201).send(JSON.stringify(data));
})

위와 같은 코드로 작동하였다.

  1. 설치한 것을 require해주고
  2. app.use()로 미들웨어를 설정해준다.
    • 들어온 body는 미들웨어를 거치지 않으면 undefined이기 때문에 JSON형식으로 body를 가져올 수 있게 하였다.
    • cors를 허용하게 해주었다. 없으면 오류.
  3. app.post()로 url과 json형식으로 바로 배열에 push하여 statuscode와 send한다.

똑같은 기능을 하지만, 코드의 가독성이나 편의성 부분에서 확실히 차이가 느껴졌던 부분이다.


EventLoop

자바 스크립트는 단일 쓰레드를 가지고 있음...

console.log("A");

setTimeout(function() {
  console.log("B");
}, 1000);

superLongComputation();

setTimeout(function() {
  console.log("C");
}, 500);

console.log("D);

위와 같은 코드는
1. A 콘솔이 찍히고
2. B 는 콜스택에 들어가고 webs API에 들어가고
3. superLongComputation();로 인해 5초 동안 대기하면서(C는 실행도 되지 않은 상태)
4. 드디어 C가 콜스택, webs API에 들어가고, D콘솔이 찍힌다.
5. 이때 webs API에 1초동안 있던 B는 callback queue에서 대기하고 있다가 B가 출력되고 0.5후에 C가 찍힌다.

A-> D-> B-> C

어렵다...
주말에 확실히 해야할 것
이번주 스프린트, TIL 돌아보기, 북마크 보기, 재귀 더 공부하기!

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글