[NodeJS] HTTP REQUEST & RESPONSE

솔방울·2022년 9월 10일
0
post-thumbnail

이전의 코드를 가져와서 설명을 더 해보겠다.

const http = require('http');

const server = http.createServer((req,res) => {
	console.log(req);
})

server.listen(3000);

createServer는 콜백 함수로 req(요청)과 res(응답)을 인자로 가진다. 그러므로 요청이 무엇인지에 대해 확인해보려면 다음과 같이 req에 대해 콘솔을 찍어보면 된다.

req를 console.log 찍어보면 정말 많은 객체들이 존재하는데, host가 누군지, accept에는 응답 형태를 정의한 것도 나오고(content-type : application/Json 이런거), 쿠키도 함께 나온다. 이중 중요한 필드에 대해 알아보도록 하겠다.

REQUEST

  1. req.url

url은 서버의 호스트 다음으로 붙는 주소인데, 그러므로 홈페이지에 접속해서 다른 url로 옮겨다닐 때마다 해당 홈페이지의 url에 대해 요청하게 된다. 예를 들어 네이버 블로그에 들어간다고 했을 때, www.naver.com 까지가 서버 호스트이고, 이후 /BlogHome 이렇게 url이 달라질 때 요청값에 따른 url이 달라질 것이다.

  1. req.method

어떠한 HTTP 메소드로 요청을 했는지에 대해 묻는 것이다. 홈페이지에 접속하는 것이라면 해당 홈페이지에 대한 리소스를 요청하는 것이므로 GET 요청이고, 이외에 정보를 추가하고 작성하는 것은 POST, 갱신하는 것은 PUT, 삭제하는 것은 DELETE이다. 그러므로 백엔드에서는 프론트에서 어떤 요청에 따라 어떤 메소드를 사용해야 할지를 정의해야 할 것이다.

RESPONSE

응답값은 console.log로 찍어주기 전에 정의를 해주는 것이 맞을 것이다. 그러므로 res를 정의하는 여러 메소드들이 있다.

  1. res.setHeader()

응답값에 있는 header 부분을 정의할 수 있다. 위와 같이 어떤 형식으로 데이터를 보낼 것인지

res.setHeader('Content-Type','text/html')

이렇게 정의할 수 있다. 하지만 이렇게 귀찮게 다 정의해야 하는 것은 아니고 나중에 이를 쉽게 정리할 수 있게 하는 패키지가 있다고 한다.

  1. res.write()

직접 응답값으로 보낼 내용을 정의할 수 있다. 서버는 요청에 따라 응답을 보내주는 것이므로, 해당 내용에 HTML 코드를 직접 정의해서 주게 된다면 실제로 웹 페이지가 반환되는 것을 볼 수 있다.

~~~

const server = http.createServer((req,res) => {
	res.write('<html>')
    res.write('<head><title>First Page</title></head>')
    res.write('<body><h1>Hello world!</h1></body>')
    res.write('</html>')
    res.end(); // 응답 작성을 끝내고 반환한다는 의미이다.
    // 이 이상 추가적으로 정의할 경우 에러가 반환된다. 
})

출력결과

이후 개발자 도구를 켜서 Network 부분을 보면 localhost에서 요청한 request 와 response가 정의되어 있으며, response에는 화면에 출력한 것과 동일한 코드가 정의되어 있다. 이는 이후 Node.js 프레임워크인 Express.js 를 통해 더 간단히 정의할 수 있다고 한다.

profile
당신이 본 큰 소나무도 원래 작은 솔방울에 불과했다.

0개의 댓글