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 사용 시 장점
- 주소와 메서드만 보고 내용을 알아볼 수 있음
- GET의 경우 캐싱(기억)할 수 있어 서버에서 가져오는 것이 아니라 캐시에서 가져올 수 있음
- ( 캐싱 사용으로 성능 ⬆️ )
- 누구든 상관없이 같은 방식으로 서버와 소통이 가능
cf. PUT vs PATCH
- name: 요청 주소
- Method: 요청 메서드
- Status: HTTP 응답코드
- Protocol : 통신 프로토콜
- Type : 요청 종류
4.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로 커버가능)
'BE > Node.js 교과서' 카테고리의 다른 글
3장 노드 기능 알아보기 (1) | 2023.11.03 |
---|---|
2장 알아둬야 할 자바스크립트 (1) | 2023.10.31 |
1장 노드 시작하기 (1) | 2023.10.31 |