프로그래밍 / C++ / 언리얼

Programming/Node.js

[Node.js] HTTP 모듈의 이해

아트성 2022. 9. 14. 14:20

HTTP란?

하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종으로, 서버와 클라이언트의 사이에서 어떻게 메시지를 교환할지를 정해 놓은 규칙이다. 요청(Request)과 응답(Response)으로 구성되어 있으며, 일반적으로 80번 포트를 사용한다. 

 

HTTP 모듈

 

서버는 클라이언트가 있기에 동작을 한다. 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 그 내용을 처리하고 클라이언트에게 응답(response)을 보낸다. 요청과 응답은 이벤트 방식인데, 클라이언트로부터 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다.

 

 

createServer

요청이 들어올때마다 createServer내부에는 콜백함수가 실행된다.

여기서 콜백함수는 매개변수로 req (요청에 관한 정보)와 res(응답에 관한정보)를 사용한다. 또한 콜백함수 내에 홈페이지 접속(요청)시 사용할 기능(HTML, Media files) 들을 넣는다.  

 

listen

서버를 클라이언트 요청 대기 상태(listen)로 만든다.

 

 

http.createServer(콜백함수).listen(서비스할 포트번호);

const http = require('http');
http.createServer((req, res) =>
{
	// 함수 내부 구현
})
.listen(8080, ()=>{
	//서버 연결
    console.log('8080번 포트에서 서버 대기중입니다!.');
};

 

 

HTTP | Node.js v14.20.0 Documentation

HTTP# Source Code: lib/http.js To use the HTTP server and client one must require('http'). The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly c

nodejs.org

 

 

 

HTTP 요청 메서드


GET

서버 자원을 가져올때 사용한다. (GET메서드를 사용할 때, 서버에서 가져오는 것이 아니라 캐시에서 가져올 수 있다. / 캐싱이 되면 성능이 좋아짐.)


POST

서버에 자원을 새로 등록하고자 할 때 사용함. / 새로운 사용자를 등록PUT : 서버 자원 -> 요청에 들어있는 자원으로 치환할때 사용


PATCH

서버 자원을 일부만 수정하고자 할 때 사용


DELETE

서버의 자원을 삭제할때 사용


OPTIONS

요청을 하기 전에 통신옵션을 설명하기 위해 사용


 

 

HTTP 상태코드

브라우저는 서버에서 보내주는 상태코드를 보고 요청이 성공했는지 실패했는지를 판단한다. 클라이언트가 요청을 했을 때 서버는 반드시 응답을 해야한다. 요청이 성공했든 실패했든 요청이 마무리되었다는것을 전달해서 클라이언트가 전달받도록 알려주는 역할을 하기도한다.


2XX

성공을 알리는 상태코드.                           || 200(성공) / 201(작성됨)


3XX

다른페이지로 이동을 알리는 상태코드     || 301(영구이동) / 302(임시이동) / 304(수정되지 않음)


4XX

요청 오류를 알리는 상태코드                   || 400(잘못된 요청) / 401(권한 없음) / 403(금지됨) / 404(찾을 수 없음)


5XX

서보 오류를 알리는 상태코드                   || 500(내부 서버 오류) / 502(불량 게이트 웨이) / 503(서비스를 사용할 수 없음)


 

 

HTTP통신의 장점

클라이언트 누구든 상관없이 같은 방식으로 서버와 소통할 수 있다. / IOS, 안드로이드, 웹, 다른 서버가 모두 같은 주소로 요청을 보냄 / 즉 서버와 클라이언트가 분리되어있고, 서버를 확장할 때 클라이언트에 구애되지 않는다.

 

 

 

 

쿠키

쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징있다. 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.

 

 

HTTP 쿠키 - HTTP | MDN

HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이

developer.mozilla.org

 

 

세션

세션은 쿠키와 달리 세션은 서버 측에서 관리한다. 서버에서는 세션 ID라는것을 사용하며 브라우저를 종료할 때까지 인증상태를 유지한다.  쿠키보다 보안이 좋다. 그러나 사용자가 마나지면 서버메모리를 많이 차지하게 된다는 단점이 존재한다. 

 

A typical HTTP session - HTTP | MDN

HTTP와 같은 클라이언트-서버 프로토콜에서, 세션은 다음의 세 가지 과정으로 이루어집니다:

developer.mozilla.org

 

 

Cluster

클러스터 모듈은 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할수있게 해주는 모듈이다.

포트를 공유하는 노드 프로세스를 여러개 둘 수 있으므로, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할수 있다. 즉, 서버에 무리가 덜가게 된다는 장점이 있다.

 

HTTP | Node.js v14.20.0 Documentation

HTTP# Source Code: lib/http.js To use the HTTP server and client one must require('http'). The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly c

nodejs.org

 

반응형