본문 바로가기

BE/Node.js 교과서

4장 http 모듈로 서버 만들기

728x90

4.1 요청과 응답 이해하기

포트: 서버 내에서 프로세스를 구분하는 번호 80번 포트의 경우 주소에서 생략 가능

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
})
  .listen(8080, () => { // 서버 연결
    console.log('8080번 포트에서 서버 대기 중입니다!');
  });

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
})
  .listen(8080, () => { // 서버 연결
    console.log('8081번 포트에서 서버 대기 중입니다!');
  });

위 코드의 경우 HTML파일을 직접 적어서 text를 불러오지만 HTML파일을 fs모듈로 읽어서 버퍼로 전송하기도 함

HTTP 상태코드 2xx : 200(성공) , 201(작성됨) 3xx : 리다이렉션(다른 페이지로 이동), 301(영구 이동), 302(임시 이동), 304(수정되지 않음 - 요청의 응답으로 캐시를 사용) 4xx : 400 (잘못된 요청), 401(권한 없음), 404(찾을 수 없음) 5xx : 500(내부 서버 오류), 502(불량 게이트웨이), 503(서비스 사용 불가)

4.2 REST와 라우팅 사용하기

REST (Representational State Transfer) : 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법, 서버가 행할 수 있는 것들을 통틀어서 의미

REST API 규칙 (무슨 동작을 행하는지 알기 어려우므로 http 요청 메서드를 사용)

→ REST를 따르는 서버 = “RESTful 하다”

  • GET : 서버 자원을 가져올 때 사용, 요청의 본문(body)에 데이터를 넣지 않음
  • POST : 자원을 새로 등록 시 사용, 요청의 본문에 새로 등록할 데이터를 넣어 전송
  • PUT : 서버 자원을 요청에 있는 자원으로 치환할 때 사용, 요청의 본문에 치환할 데이터를 넣어 전송
  • PATCH : 서버 자원의 일부만 수정할 때 사용, 요청의 본문에 일부 수정할 데이터를 넣어 전송
  • DELETE : 서버 자원 삭제할 때 사용, 요청의 본문에 데이터를 넣지 않음
  • OPTIONS : 통신 옵션을 설명할 때 사용 (Ch.12 참고)

REST 사용 시 장점

  1. 주소와 메서드만 보고 내용을 알아볼 수 있음
  2. GET의 경우 캐싱(기억)할 수 있어 서버에서 가져오는 것이 아니라 캐시에서 가져올 수 있음
  3. ( 캐싱 사용으로 성능 ⬆️ )
  4. 누구든 상관없이 같은 방식으로 서버와 소통이 가능
    cf. PUT vs PATCH
  • name: 요청 주소
  • Method: 요청 메서드
  • Status: HTTP 응답코드
  • Protocol : 통신 프로토콜
  • Type : 요청 종류

4.3 쿠키와 세션 이해하기

  1. 서버는 요청에 대한 응답을 할 때 쿠키를 같이 보냄
  2. 서버로부터 쿠키가 오면 웹 브라우저는 쿠키를 저장했다가 다음에 요청할 때 마다 쿠키를 같이 보냄
  3. 서버는 요청에 있는 쿠키를 읽어서 누구인지 파악

( 브라우저는 쿠키가 있다면 자동으로 동봉해서 보냄 → 따로 처리할 필요가 없음 )

(서버에서 브라우저로 쿠키를 보낼 때만 코드를 작성해서 처리하면 됨)

쿠키: 요청의 헤더(Cookie)에 담겨 전송

브라우저: 응답의 헤더(Set-Cookie)에 따라 쿠키를 저장

4.4 https와 http2

HTTP 1.1 HTTP 2.0

  HTTP 1.1  HTTP 2.0
표준 승인 1997-01 2015-05
처리 방식 하나씩 처리 여러개 동시 처리
데이터 String Binary
헤더 정보 요청시 마다 쿠키를 포함하고중복된 헤더 값 전송 헤더 정보 HPACK 압축 전송
응답 우선순위 없음 우선순위를 정할 수 있음
리소스 요청 클라이언트에서 요청 서버가 요청없이 보낼 수 있음

 

4.5 cluster

cluster 모듈 : 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈

요청이 많이 들어왔을 때 병렬로 실행된 서버 수 만큼 요청을 분산시킴

예를들어 요청이 8개가 들어오면 노드는 보통 코어 하나만 사용하는데 cluster모듈은 코어 하나당 노드 프로세스 하나가 돌아가게함 But, 코어 별 메모리 공유 불가 (하지만 Redis로 커버가능)

728x90

'BE > Node.js 교과서' 카테고리의 다른 글

3장 노드 기능 알아보기  (1) 2023.11.03
2장 알아둬야 할 자바스크립트  (1) 2023.10.31
1장 노드 시작하기  (1) 2023.10.31