Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Express.js res.send()와 res.json()의 차이점 완벽 정리

Express.js 애플리케이션 서버는 HTTP 요청을 수신할 때마다 개발자에게 요청과 응답을 다룰 수 있는 객체를 제공합니다. 그중 res 객체는 해당 API 호출의 결과로 클라이언트에게 전송될 응답(response)을 담당하는 핵심 객체입니다.

기본 예제

app.get('/test', (req, res) => {
    // 여기서 req와 res 객체를 활용합니다
})

위 코드처럼 라우트 핸들러 안에서 req(요청)와 res(응답) 객체를 자유롭게 사용할 수 있으며, 이 중 res 객체의 메서드를 통해 클라이언트로 응답을 보내게 됩니다.

res.send()의 동작 방식

res.send() 함수는 기본적으로 Content-Type을 text/html로 설정합니다. 즉, 클라이언트는 서버가 반환한 데이터를 일반 텍스트(HTML)로 해석하게 됩니다. 설정이 완료되면 해당 내용을 응답 본문에 담아 클라이언트에게 전송합니다.

참고로 최신 버전의 Express에서는 res.send()에 전달되는 인자의 타입에 따라 Content-Type이 자동으로 조정되기도 하지만, 문자열을 전달할 경우 기본적으로 text/html로 처리된다는 점을 기억해 두는 것이 좋습니다.

res.json()의 동작 방식

반면 res.json() 함수는 Content-Type 헤더를 application/json으로 명시적으로 설정합니다. 이렇게 하면 클라이언트는 응답으로 받은 문자열을 단순한 텍스트가 아닌, 유효한 JSON 객체로 인식하고 파싱하게 됩니다. 마찬가지로 직렬화된 JSON 데이터를 응답 본문에 담아 클라이언트에게 반환합니다.

어떤 것을 사용해야 할까?

두 메서드 모두 결국 클라이언트에게 응답을 전송한다는 공통점이 있지만, 가장 큰 차이는 Content-Type 헤더의 설정에 있습니다.

  • res.send(): HTML이나 일반 텍스트 형태의 응답에 적합하며, Content-Type이 text/html로 설정됩니다.
  • res.json(): RESTful API에서 JSON 데이터를 반환할 때 적합하며, Content-Type이 application/json으로 설정됩니다.

따라서 웹 페이지나 HTML 조각을 반환하는 경우에는 res.send()를, 프론트엔드 애플리케이션이나 모바일 클라이언트와 데이터를 주고받는 API 서버를 구축하는 경우에는 res.json()을 사용하는 것이 올바른 선택입니다.