로드맵 : 인터넷 - 인터넷, HTTP

solee·2022년 6월 6일
0

TIL

목록 보기
16/20

로드맵 따라잡기!
https://roadmap.sh/backend


인터넷이란 무엇인가?

인터넷이란 TCP/IP 통신 프로토콜을 사용하여 컴퓨터끼리 연결해 정보를 주고받는 네트워크를 말한다.

  • 통신하기 위해서는 라우터를 통해 여러 컴퓨터를 연결하는데, 이 라우터와 다른 라우터를 연결해 무한히 확장할 수 있다.

  • 전화 통화를 위해 깔려 있는 케이블을 통해 전기 신호를 전송하기 위해서 모뎀을 통해 데이터를 전기 신호로 변환하고 전송한다.

  • 데이터는 ISP(Internet Service Provider)인 인터넷 서비스 제공 업체, 즉 보다폰이나 SK, KT, LG같은 제공자의 네트워크를 통해 대상 네트워크와 연결된다.

  • 대상 네트워크(ISP)가 전달해준 전기 신호를 모뎀을 통해 데이터로 변환하고 송신한 후 라우터가 다시 송신, 각자의 컴퓨터로 전송한다.


TCP/IP

TCP(Transmission Control Protocol)/IP(Internet Protocol)는 컴퓨터들이 정보를 주고받을 때 사용되는 통신 프로토콜의 모음Suite이다.

여러 컴퓨터를 인터넷을 통해 연결하지만, 각 컴퓨터는 회사, 운영체제, 프로그램 등 다양한 환경의 차이를 가지고 있다. 그러므로 다른 환경에서도 원활하게 통신할 수 있도록 하기 위해 표준 규약을 설정해 따른다.
프로토콜의 기본요소는 구문(Syntax), 의미(Semantic), 타이밍(Timing)이 있다.


  • 프로토콜의 3요소
  1. 구문(Syntax) : 데이터 형식 규정(신호 레벨, 부호화 등)
  2. 의미(Semantic) : 데이터 처리 방법에 대한 정보(전송 조정 및 오류 처리 등)
  3. 타이밍(Timing) : 통신 속도 일치 및 순서 제어

이미지 출처: https://dev.opera.com/articles/http-basic-introduction/
  • IP : 비연결형 인터넷 프로토콜. 패킷 통신 방식으로 대상 IP 주소로 패킷을 전송한다. 패킷을 제대로 전달했는지 보증하지 않고 보내는 패킷의 순서가 달라질 수 있다.

  • TCP : 연결형 전송 제어 프로토콜. IP 위에서 동작하며 데이터의 전달을 보증, 데이터를 전송한 순서대로 송신받을 수 있게 한다.


OSI 7계층과도 연관이 있지만, 해당 부분을 정리할 때 같이 정리하겠다.




HTTP란 무엇인가?

HTTP(HyperText Transfer Protocol)는 웹상에서 정보를 주고받을 수 있는 프로토콜이다. 하이퍼 텍스트 문서를 교환하고 서버와 클라이언트 사이에 요청과 응답이 오가게 한다.

HTTP는 응용 계층의 프로토콜로 확장성이 좋다. 또 Stateless한 성질을 가지고 있는데, 이것은 상태를 저장하지 않는다는 뜻으로 달리 말하면 동일한 연결에서 요청을 두 번 보내더라도 연결고리가 존재하지 않는다. 예를 들어 상담원에게 문제를 설명한 후 다른 상담원에게 전화가 돌아간다면, 문제를 처음부터 설명해야 하는 것과 비슷하다. 그러나 State한 상황이 필요할 수 있기 때문에 세션이나 쿠키, OAuth 등을 이용해 서버가 상태를 기억하도록 하기도 한다.

Connectionless한 성질이란 최소한의 자원 소모를 위해 클라이언트의 요청에 서버가 응답한 후 연결을 끊는 성질이다. 이렇게 되면 클라이언트가 아주 많더라도 매분 매초 수많은 요청을 처리하지 않을 수 있다. 그러나 연결할 때마다 새로 연결을 시도하고 마친 후 해제해야 하기 때문에 그만큼의 시간과 자원이 더 들고, 웹 페이지에 필요한 여러 리소스를 받아와야 해 계속해서 연결해야 하기도 한다. HTTP Persistent Connection(지속연결)으로 같은 서버의 웹 객체들이 한 연결로 데이터를 전송하도록 TCP 연결을 유지하고 일정 시간 동안 사용하지 않으면 해제하도록 하는 방식으로 한계점을 극복하였다.

클라이언트가 서버에게 요청을 보내고 응답을 받기 위해서는 연결이 되어 있어야 하는데, HTTP는 응용 계층의 프로토콜이고 연결은 전송 계층에서 제어되므로 직접적으로 연결하는 것이 아니라 그 신뢰성을 따진다. TCP와 UDP를 사용할 수 있는데, 그 중 연결을 보증하는 프로토콜인 TCP를 주로 사용한다.


HTTP의 특징

  • 클라이언트와 서버 구조를 가지고 있다.

  • Stateless 프로토콜이다.

  • Connectionless 프로토콜이다.

  • HTTP메시지를 사용해 통신한다.

  • 단순하고, 확장성이 좋다.


HTTP의 흐름과 Message

클라이언트가 요청 내용, 헤더, 기타 메시지 로 이루어진 HTTP Request Message를 생성해 서버로 전송한다.

서버로부터 상태표시 행(Status Line), 헤더필드, 기타 메시지로 이루어진 HTTP Response Message를 응답받는다.


HTTP Method

클라이언트가 보내는 HTTP 요청 메시지에서 정의하며, 어떤 요청을 보내는지를 표기한다.

메서드기능CRUD
GET특정한 리소스를 조회하고 정보를 요청한다.R
POST서버에 데이터를 생성한다.C
PUT리소스를 전체 수정한다. 존재하지 않는 경우 데이터를 생성한다.C, U
DELETE리소스를 제거한다. 존재하지 않아도 동일하게 동작한다.D
PATCH리소스를 일부분 수정한다.U

HTTP Status Code

서버가 보내는 HTTP 응답 메시지에서 표기하며, 요청에 대한 응답의 상태를 표기한다. 3자리 숫자로 되어있으며 백의 자리 수를 기준으로 크게 분류할 수 있다. 익숙한 것도 있고 아닌 것도 있는데, 에러 코드라면 영원히 안 보고 싶다...

코드대분류
100Informational : 요청 수신 중
200Success : 성공적으로 수신되었음
300Redirection : 요청을 완료하기 위해 추가 조치가 필요함
400Client Error : 요청에 잘못된 구문이 포함되어 있거나 이해할 수 없음
500Server Error : 서버가 유효한 요청을 수행하지 못했음

코드 종류는 엄청나게 많지만, 내가 본 것들 위주로 간단하게 정리해 보겠다.

100번대

100 Continue : 현재까지의 상태는 괜찮음. 계속해서 요청해도 되고 무시해도 된다.

200번대

200 OK : 요청이 성공적으로 처리되었음을 고지한다.

201 Created : 요청에 따른 생성 작업을 완료하였음을 고지한다. HTTP Method가 POST일 때에, 즉 POST 요청일 때에 응답이 돌아온다. 가끔은 PUT일 수 있다.

206 Partial Content : 클라이언트가 분할 다운로드를 위한 범위 헤더를 전송했을 때 응답한다.

300번대

308 Permanent Redirect : 리소스가 다른 URI에 영원히 위치함을 고지한다. 헤더에 담긴 Location:에 이동된 URI를 제공한다. 이후에 다시 요청할 때에도 같은 HTTP Method를 사용해야 한다.


가장 많이 본(슬프게도) 코드들은 아래에 있다.

400번대

400 Bad Request : 문법상의 오류 등 잘못된 요청을 보내 서버가 이해할 수 없다.

401 Unauthorized : 인증받지 않은 사용자. 인증이 잘못되었을 때 응답된다.

403 Forbidden : 권한이 없는 사용자. 올바르게 인증된 사용자여도 요청하는 리소스에 대한 권한이 없으면 접근할 수 없다.

404 Not Found : 요청받은 리소스를 찾을 수 없다. 잘못된 리소스를 요정할 때에 발생한다.

405 Method Not Allowed : 해당 API가 해당 Method를 받아들이지 않는다. GET 요청은 거부할 수 없으므로 항상 작동한다.

408 Request Timeout : 요청한 시간에서부터 오래 지나면 서버가 사용되지 않는 연결을 끊는다. 내가 할 때에는 보통 서버가 켜져 있지만 문제가 있어서 연결이 잘 안 되면 끊임없이 기다리다가 타임아웃 에러가 발생했다.

500번대

500 Internal Server Error : 서버가 처리 방법을 모른다.

501 Not Implemented : 요청하는 Method를 서버가 지원하지 않는다. 고의적으로 지원하지 않는다면 405 에러가 발생한다.

502 Bad Gateway : 서버가 게이트웨이 역할을 하다가 유효하지 않은 응답을 받았다.

505 HTTP Version Not Supported : 요청하는 HTTP 버전이 서버에서 지원되지 않는다.


profile
DA DA DA

0개의 댓글