http module 사용하여 API 만들어보기 / response / request / on method

yunny·2023년 1월 22일
0

westudy

목록 보기
3/15

1. HTTP server 객체 생성

// app.js

const http = require('http'); //(1)

// HTTP 서버 객체 생성
const server = http.createServer(); //(2)

// HTTP 요청(이벤트)이 발생하면 실행되는 Listener(함수) 정의
const httpRequestListener = function (request, response) { 
	//(3)
  response.writeHead(200, { "Content-Type": "application/json" }); //(4)
  response.end(JSON.stringify({ message: "Hello World!" }));
}; //(5)

// http request가 발생하면 httpRequestListener가 실행될 수 있도록 
// request 이벤트에 httpRequestListener(함수) 등록
server.on("request", httpRequestListener); // (6)

(1) http 모듈을 require()로 불러오기

(2) createServer는 두가지 파라미터를 선택적으로 받는다

createServer([options], requestListener)

options : 클라이언트와 얼만큼 연결을 유지할 것인가 결정하는 keepAliveTimeout 옵션 등
requestListener : http request가 들어왔을 때, 실행되어야 함
두가지 파라미터를 모두 선택적으로 받을 수 있고, 받지 않을 수도 있다

(3)번 코드

request와 response를 파라미터로 가짐 -> Hello World 메시지 반환
req & res 는 함수를 호출하는 곳에서 인자(arguments)로 넣어주는 값을 의미

(1) ~ (5) 까지만 작성하면 함수를 실행할 수 없음

(6)번 코드

서버가 http 요청을 이벤트(event)로 인식해서
http 이벤트가 발생할 때마다 httpRequestListener 함수를 실행할 수 있도록 이벤트 등록
= on method
server 객체에 'request" 이름으로 이벤트 등록

클라이언트의 요청에 대한 정보가 담긴 request 객체와
응답에 대한 정보가 담긴 response 객체 넘겨주면서 내부 로직 실행

2. response 객체

웹브라우저나 또느느 앱으로부터 어떤 요청이 있을 때
요청한 사용자 측으로 값을 반환해줄 때 사용하는 객체

(4)번 코드

response.writeHead()라는 메소드에서 첫번쨰는 200 이라는 숫자값을,
두번째는 중괄호 안에 { '키' : '값' } 형태의 값을 넣어서 호출

response.writeHead(200, { "Content-Type": "application/json" })

숫자값 - http status code
{ '키' : '값' } - response message의 body에 담기는 컨텐츠의 타입이 applicatiton/json 형식이라는 것을 정의
여기서는 Content-Type이라는 키 값이 담김 (Authorization, Cookie)가 담기기도 함

(5)번 코드

reponse.end() 라는 함수에 객체를 담아서 response message의 body에 담아서 반환

response.end(JSON.stringify({ message: "Hello World!" }));

json 형태로 화면에 출력

3. request 객체

요청을 보낸 클라이언트와 관련된 데이터가 담겨 있는 객체

  • 클라이언트의 IP
  • 요청에서 사용한 URL
  • HTTP Method(GET, POST, DELETE, PATCH)등

// app.js

const httpRequestListener = function (request, response) {
  console.log(`request object : ${request}`)
  response.writeHead(200, { "Content-Type": "application/json" });
  response.end(JSON.stringify({ message: "Hello World!" }));
};

console.log에 찍어보기

4. HTTP server 실행

// app.js

const http = require('http'); // (1)

// HTTP 서버 객체 생성
const server = http.createServer(); // (2)

// HTTP 요청(이벤트)이 발생하면 실행되는 listener(함수) 정의
const httpRequestListener = function (request, response) { // (3)
  response.writeHead(200, { "Content-Type": "application/json" }); // (4)
  response.end(JSON.stringify({ message: "Hello World!" })); // (5)
};

// http request가 발생하면 httpRequestListener가 실행될 수 있도록 
// request 이벤트에 httpRequestListener(함수) 등록
server.on("request", httpRequestListener); // (6)

server.listen(8000, '127.0.0.1', function() { // (7)
    console.log('Listening to requests on port 8000');
});

(7)번 코드

생성된 서버가 8000 포트를 수신 포트로 보고 수신대기
= listen() 함수를 호출해야만 server가 해당 포트를 listening 수신 대기
listen() 메소드는 시간이 걸릴 수 있는 작업이라서 callback(비동기)로 실행하여
'Listening to requests on port 8000' 출력

5. 터미널에서 node.js로 app.js파일 실행

node app.js
Listening to requests on port 8000

'Listening to requests on port 8000' 메시지가 출력되면 정상적으로 서버 실행

profile
기록하지 않으면 잊어버려요 !

0개의 댓글

관련 채용 정보