[로드맵 따라하기] HTTP

Yumin Jung·2022년 12월 27일
1
post-thumbnail

What is HTTP? - HTTP란 무엇인가?

HTTP 프로토콜

HTTP는 Hypertext Transfer Protocol이다. "전송하다"라는 의미를 가진 Transfer과 그 앞에 Hypertext가 붙어 하이퍼텍스트 기반으로 데이터를 전송하겠다는 의미이다.
웹을 개발하는 사람이라면 누구나 다 알아야 하는 통신 프로토콜이다.

웹에서의 HTTP 프로토콜은 브라우저와 서버 간(서버 - 클라이언트)에 데이터를 주고받기 위해 사용된다.

HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다. 인터넷상에서 흔히 볼 수 있는 HTML로 작성된 문서는 HTTP로 보낼 수 있는 데이터의 한 종류일 뿐이다. 이미지, 동영상, 오디오, 텍스트 문서들 등 종류를 가리지 않는다.

HTTP 프로토콜의 특징

1. 비연결성 (Connectionless)

클라이언트의 요청에 대해 서버가 응답을 마치고 나면 연결을 끊어버린다. 클라이언트가 추가적인 요청을 하면 새로운 연결을 통해서 응답을 하는 특징이 있다.

  • 단점
    매번 모든 요청에 대해 새로운 연결과 해체 과정을 거치므로 네트워크 비용 측면에서 비효율적이다.
    주식 프로그램과 같이 요청과 응답이 자주 발생되는 경우에 연결과 해체가 반복되면서 네트워크 오버헤드(네트워크 비용)부담이 발생한다.
  • 보완책
    HTTP/1.1부터 Keep-Alive를 통해 서버 - 클라이언트 간 통신이 없어도 지정된 시간동안 연결을 유지함.

2. 무상태 (Stateless)

비연결성 (Connectionless)의 특성에 파생된 특성이다. 서버와 클라이언트는 하나의 요청이 진행되는 동안만 서로 인지한다.

  • 단점
    클라이언트 인증(로그인)이 필요한 서비스에서 불편하다. 예를 들어 메일 전송을 할 때, 메일을 전송할 때 로그인, 메일을 읽을 때 로그인, 내게 쓰기 할 때 로그인, 전달하기 할 때 로그인 등 계속 번거롭게 로그인을 계속 해야하는 상황이 생긴다.
  • 보완책
    쿠키, 세션, 토큰으로 상태를 기억하기 위한 기능들이 있다.

URL

URL(Uniform Resource Locators)은 서버에 자원을 요청하기 위해 입력하는 영문 주소이다.

이 URL을 이용하여 서버에 특정 데이터를 요청할 수 있다.
아래의 HTTP request methods를 이용한다.

request Methods(클라이언트->서버) [자주 쓰는 메서드]

GET(select) : 요청

  • URL에 해당하는 자료의 전송 요청
  • 우리가 인터넷 주소에 URL을 작성하는 게 GET 방식
  • Get을 보내면 서버에서 그 주소에 해당하는 Response를 보내줌
  • 일반적으로 리소스 위치를 URL 쿼리로 표현하기 때문에 RequestBody(클라이언트가 API로 데이터를 보낼때 사용되는 데이터)가 없음
  • 데이터 조회 & 검색할 때 사용

GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.
HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다. 따라서 이런 이유로 사용하면 안전하다고 간주된다. 즉, 데이터의 변형의 위험없이 사용할 수 있다는 뜻이다. 게다가 GET 요청은 idempotent하다. 즉, 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다. 그러므로 GET을 데이터를 변경하는 등의 안전하지 않은 연산에 사용하면 안된다.


POST(insert) : 생성

  • 서버가 처리할 수 있는 자료 보냄
  • Form 데이터를 보내기 위해 사용
  • POST로 정보를 전송하면 URL에 파라미터가 나타나지 않으므로 각종 데이터 전송가능
  • 데이터 추가할 때 사용

POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다. POST 요청은 안전하지도 않고 idempotent하지도 않다. 다시 말해서 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다는 것이다. 그러므로 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.


PUT(update) : 변경

  • 해당 URL의 자료를 수정(자료 전체 수정)

DELETE(delete) : 삭제

  • 해당 URL의 자료를 삭제
  • 클라이언트에서 서버의 자원을 삭제 할 수 있도록 허가하는 것은 매우 위험
  • 현실적으로 사용될 일 없음
  • 대부분의 서버는 해당 메소드를 비활성화

참고로 때에 따라서는 POST 메서드로 PUT, DELETE의 동작도 수행할 수 있다.


그 이외의 메서드

HEAD
GET과 같은 요청이지만, 자료에 대한 정보(meta-information)만을 받음

PATCH
해당 URL의 자료를 수정(자료 일부 수정)

TRACE
이전에 요청한 내용 (루프백 메시지)을 호출하기 위해 테스트용으로 사용

OPTIONS
서버가 특정 URL에 대해 어떠한 HTTP Method를 지원하는지 물음

CONNECT
프록시가 사용하는 요청

OPTIONS
목정 리소스의 통신을 설정하는 데 사용

Status Code(서버 -> 클라이언트)

앞에서 살펴본 URL과 요청 메서드가 클라이언트에서 설정해야 할 정보라면 HTTP 상태 코드(HTTP Status Code)는 서버에서 설정해주는 응답(Response) 정보이다.

프론트엔드 개발자 입장에서는 더욱이 중요한 이유가 이 상태 코드로 에러 처리를 할 수 있기 때문이다. 간단한 예시를 들어 아래와 같이 사용자 목록을 받아오는 GET 메서드 요청을 날려보겠다.

http://domain.com/users

위 요청을 보내고 나면 서버에서 응답으로 오는 상태 코드가 크게 2개로 나뉜다, 200(성공)404(실패).
따라서, 이 HTTP 상태 코드로 추가적인 로직을 구현할 수 있다.

2xx - 성공

200번대의 상태 코드는 대부분 성공을 의미한다.

200 : GET 요청에 대한 성공
204 : No Content. 성공했으나 응답 본문에 데이터가 없음
205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환

3xx - 리다이렉션

300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우이다.

301 : Moved Permanently, 요청한 자원이 새 URL에 존재
303 : See Other, 요청한 자원이 임시 주소에 존재
304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인

4xx - 클라이언트 에러

400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생한다. 가장 익숙한 상태 코드는 404 코드이다. 요청한 자원이 서버에 없다는 의미이다.

400 : Bad Request, 잘못된 요청
401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
405 : Method Not Allowed, 허용되지 않은 요청 메서드
409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌

5xx - 서버 에러

500번대 상태 코드는 서버 쪽에서 오류가 난 경우이다.

501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우

profile
문과를 정말로 존중해

0개의 댓글