본문 바로가기

Node

[드림코딩 앨리 강좌] 노드로 배우는 백엔드 A-Z

본 글은 드림코딩 앨리님의 노드로 배우는 백엔드 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 흐름 요약

  1. TCP connection
      • 클라: 너 살아있니?
      • 서버: 응 나 살아있어!
  2. 클라: 나 이거 좀 보내줘 (GET,URL,headers...)
  3. 서버: response (index.html, status:200) - 한 파일뿐 아니라 style.css,main.js 여러 파일을 동시에 보낼 수 있음
  4. 서버에서 더이상 보낼 데이터가 없다면, 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