본 글은 드림코딩 앨리님의 노드로 배우는 백엔드 A-Z 를 수강한 후, MDN Web Docs 를 바탕으로 재정리해본 글이다.
강의 기간: 2021.05~2021.05
회사를 이직하면서 기술스택이 Spring -> Node 로 바뀌었다.
드림코딩 앨리님의 유튜브를 평소에 즐겨봐서 이 분 강의를 믿고 선택하게 되었다.
결론적으로 매우 잘한 선택이었다. 전반적으로 노드를 입문하며 흐름을 파악하기에 좋은 강의였다.
Chap 8. Web 기초 지식 HTTP
HTTP v1,v2,v3
- HTTP v1
- HTTP,HTTPS 둘다 사용 가능
- text-based 로 주고받음
- uncompressed headers (size 도 큼)
- one file at a time
- inefficient
- HTTP v2
- HTTPS 만 사용 가능
- text 가 아닌, binary 형태로 (raw data) 주고받음. - binary based protocol
- efficient / secure
- header compression
- multiplexing - 여러 개의 파일을 동시에 주고받을 수 있음
- HTTP v3
- 기존에는 TCP based 였다면, v3 은 UDP 를 based 로 개선하고 있음.
HTTP 흐름 요약
- TCP connection
-
- 클라: 너 살아있니?
-
- 서버: 응 나 살아있어!
-
- 클라: 나 이거 좀 보내줘 (GET,URL,headers...)
- 서버: response (index.html, status:200) - 한 파일뿐 아니라 style.css,main.js 여러 파일을 동시에 보낼 수 있음
- 서버에서 더이상 보낼 데이터가 없다면, TCP connection closed
HTTP Status Codes
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
클라이언트에게 status code 를 적절하게 보내주는게 중요
- 1xx - informational
- 100 - Continue
- 102 - Processing
- 2xx - Successful
- 200 - OK
- 201 - Created
- 204 - No Content
- 3xx - Redirection
- 301 - Moved Permanently 다른 url 로 옮겨갔어.
- 302 - Found 임시적으로 다른 url 을 이용해
- 303 - See Other
- 307 - Temporary Redirect → POST 에 한해서만 임시적으로 다른 url 로 옮겨간 경우
- 308 - Permanent Redirect → POST 에 한해서만 영구적으로 다른 url 로 옮겨간 경우
- 4xx - Client error
- 400 - Bad Request → 쿼리가 잘못됐거나, api 를 잘못된 방식으로 사용한 경우
- 401 - Unauthorized → 특정한 키를 가지고 있는 클라만 요청 가능
- 403 - Forbidden → admin 권한 같이
- 404 - Not Found
- 405 - Method Not Allowed → 해당 url 에 대해서 생성,삭제가 허용되지 않을 때
- 409 - Conflict → 클라가 만들고자 하는 게 이미 존재할 때
- 5xx - Server error
- 500 - Internal Server Error
- 502 - Bad Gateway → 중간에 있는 서버가 요청을 어떻게 처리해야할 지 모르는 경우
- 503 - Service Unavailable → 해당 url 에 대해 서버가 아직 준비가 되지 않았을 때.
Request Methods
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
- POST - create
- 201(Created), 401,403,404,409
- PUT - replace
- DELETE
- 200, 204(No Content)
- PATCH - replace partially
- HEAD - get without body
- OPTIONS - all supported methods for URL
- TRACE - echoes the received request
서버 데이터에 영향을 주는 지에 따라
- GET,HEAD,OPTIONS,TRACE - 아무리 많은 request 가 와도, 서버 데이터는 변경되지 않음
- POST,PUT,DELETE,PATCH - 서버 데이터 변경하는 메소드
HTTP Methods 속성
Idempotent (멱등)
- 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
- GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
- PUT: 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
- DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
- POST: 멱등이 아니다. 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.
- 활용
- 자동 복구 메커니즘
- 서버가 TIMEOUT 등으로 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가? 판단 근거
Safe (안전)
- 호출해도 서버의 리소스를 변경하지 않는다.
HTTP 특징
1. Stateless Protocol
- 서버가 클라이언트의 상태를 보존 X
- 장점: 서버 확장성 높음 (스케일 아웃) - 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입 가능. 또한 응답서버를 쉽게 바꿀 수 있음 → 무한한 서버 증설 가능
- 단점: 클라이언트가 추가 데이터 전송
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지해야 하므로, 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지한다. (상태 유지는 최소한만 사용)
2. Connectionless
한계점
- TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
- html 요청/응답 후 끊기고, js 요청/응답 후 끊기고, img 요청/응답 후 끊기고...
http 지속 연결(Persistent Connections)로 문제 해결
- 웹 브라우저로 사이트를 요청하면 HTML 뿐 아니라 자바스크립트,css, 이미지 등 수 많은 자원이 함께 다운로드됨 (http v2, v3)
HTTP Headers
- Header 는 Standard 와 Custom 이 있다.
- 막무가내로 Custom 을 쓰는게 아니라, 일단 표준적으로 정의된 게 있는 지 확인한 후 없으면 Custom 으로 쓴다.
- Authorization - 로그인 정보
- Cache-Control
- 표준화된 Header 정보는 여기서 확인 가능 → https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
'Node' 카테고리의 다른 글
[드림코딩 앨리 강좌] 타입스크립트 + OOP 마스터 과정 - Chap 4. 객체지향 프로그래밍 (0) | 2022.03.29 |
---|---|
Node.js - Socket.IO 모듈을 이용한 채팅 프로그램 (0) | 2019.11.12 |
Passport 모듈로 회원가입 및 로그인 하기 - Passport 모듈화 적용 (0) | 2019.11.11 |
Passport 모듈로 회원가입 및 로그인 하기 (모듈화 적용 X) (1) | 2019.11.11 |
Node.js 에 View Template 적용하기 (1) - Semantic UI (미완) (0) | 2019.11.08 |