[express] res.send() 와 res.end()
* 목적
- res.send() 나, res.end() 나 결국 응답 및 응답을 종료하는 거 같은데, 왜 각각 나뉘는지, 그리고 둘은 각각 어떨때 사용해야하는 지에 대해 궁금증이 생겨 정리를 해보려고 한다.
1. Response
- Express 가 HTTP의 요청(req)을 받을 때 보내는 HTTP 응답을 의미한다.
2. res.send([body])
- HTTP 응답을 보낸다. body에는 buffer object, String, object, Boolean, array 가 들어갈 수 있다.
- 사용예시
res.send(Buffer.from('whoop'))
res.send({ some: 'json' })
res.send('<p>some html</p>')
res.status(404).send('Sorry, we cannot find that!')
res.status(500).send({ error: 'something blew up' })
//buffer object
- buffer : Node.js에서 buffer는 raw 바이너리 데이터를 저장할 수 있는 특수한 유형의 객체이다. 버퍼는 일반적으로 컴퓨터에 할당된 메모리 청크, 일반적으로 RAM을 나타내며, 일단 버퍼크기를 설정하면 이후에는 변경이 불가하다.
그렇기에 버퍼는 바이트를 저장하는 단위라 볼 수 있다. 그리고 바이트는 8bit 순서로 이루어져 있고, 이 bit는 컴퓨터의 가장 기본적인 저장단위로 0 또는 1로 되어 있다.
이런 buffer는 왜 필요한 걸까? buffer가 도입되기 이전 Js에서는 이런 바이너리 데이터를 처리할 방법이 마땅히 없었다. 속도가 느리고, 바이너리를 처리할 전문적인 도구가 없었기에 기존에는 문자열(String)과 같은 원시 값들을 이용해야 했다. 버퍼는 비트와 바이트를 좀 더 쉽게, 그리고 성능에도 유리한 방법으로 조작할 수 있도록 제공되고 있다.
( Node.js 는 버퍼클래스를 전역 스코프에 expose 하므로 'import'나 'reqire'를 할 필요가 없다. )
3. res.end([data][,encoding])
- 응답프로세스(res)를 종료한다. 데이터 없이 빠르게 응답을 종료할 때 사용함! 데이터로 응답해야할 때는 res.send()와 res.json()과 같은 메서드를 사용하길.
// http.ServerResponse 의 response.end() 메서드 에서 가져온 것임
- 사용예시
res.end()
res.status(404).end()
4. 결론
HTTP 응답에 데이터가 있으면 res.send();
HTTP 응답에 데이터가 없으면 res.end();
를 쓰도록!
5. 참고자료
https://expressjs.com/en/api.html
Express 4.x - API Reference
Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex
expressjs.com
https://yohanpro.com/posts/nodejs/express-response
Express res.send() vs res.json() vs res.end() 비교 - Yohan's Developer Diary
express는 Nodejs를 쓰는 사람이라면 모두가 안다고 할 정도로 유명한 웹 프레임워크다. express를 사용해서 response, request를 통해 주고 받고 하게 되는데 이 때 특히 response를 보내줄 때 헷갈리는 부분
yohanpro.com
버퍼 관련
https://yceffort.kr/2021/10/understanding-of-nodejs-buffer
Home
yceffort
yceffort.kr