res.send와 res.json의 차이

이태규·2022년 3월 14일
0

express

목록 보기
25/28

res 객체

res.send : 다양한 유형의 응답을 전송합니다.

res.redirect : 브라우저를 리다이렉트 합니다.

res.render : 설정된 템플릿 엔진을 사용해서 views를 렌더링합니다.

res.json : JSON 응답을 전송합니다.

res.end : 응답 프로세스를 종료합니다.

  • 이 외에도 res.set, res.status, res.type, res.sendFile, res.links, res.cookie 등이 존재합니다.

1 res.send

res.send([body])의 body에는 Buffer, String, Object, Array가 올 수 있습니다. 그리고 response Header에는 Body의 Content-Type이 자동으로 정의됩니다. 아래의 예시를 살펴보겠습니다.

res.send({ name: 'Minsu' })

key는 name, value는 'Minsu'라는 object를 body에 넣어서 response 응답을 전달하면, response Header 내 Content-Type은 자동으로 json(JavaScript Object Notation)으로 정의됩니다. 참고로 이 response Header는 response 객체 내 set메소드로 제어가 가능합니다. 간단한 예로 res.set('Content-Type', 'text/html'); 같은 형태를 들 수 있습니다.

2 res.json

res.json은 JSON을 응답으로 보냅니다. 여기서 res.send도 Object를 응답으로 보낼 수 있으니까 res.json이 굳이 필요할까 라는 의문이 들 수 있는데, res.json은 JSON 정보를 전달하는데 더 특화된 기능을 가지고 있습니다. 일단 이를 이해하기 위해서는 Object와 JSON은 비슷하게 생기긴 했지만 확연한 차이점을 가지고 있다는 점을 알고계셔야 합니다.

JSON은 String, Number, Object, Array, Boolean, Null을 지원하지만, Function, Date, Undefined 등과 같은 타입은 지원하지 않습니다. 그렇기 때문에 우리가 { x: [10, undefined, function(){}, Symbol('')] } 같은 파라미터를 입력하면 undefined, function(){}, Symbol(") 는 JSON이 지원하지 않는 타입이기에 JSON이 지원하는 타입으로 바꾸는 작업이 요구됩니다. 이는 JSON.stringfy() 메소드를 통해 구현할 수 있습니다.

res.json을 사용하면 JSON.stringfy() 메소드를 호출하여 파라미터를 JSON string 형태로 먼저 변환 한 뒤, res.send()를 호출하여 응답을 내보냅니다. JSON.stringfy() 메소드는 replacer와 spaces라는 두 가지 파라미터를 가질 수 있는데 이를 Express에서는 아래와 같은 옵션을 통해 제어 가능합니다. (JSON.stringfy()에 대한 설명은 Mozilla에서 참고하시길 바랍니다.)

출처: https://uhou.tistory.com/102

profile
한 걸음씩 나아가자

0개의 댓글