[TIL] HTTP

신재욱·2023년 9월 26일
post-thumbnail
  • 웹에서 데이터를 주고받을 때 사용되는 프로토콜
  • HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다.

✅ 특징

클라이언트-서버 모델

HTTP는 클라이언트(웹 브라우저)와 서버(웹 서버) 간의 통신을 기반으로 한다. 클라이언트는 웹 페이지를 요청하고, 서버는 요청된 페이지를 전송하여 응답한다.

요청과 응답

HTTP 통신은 요청(request)응답(response) 의 두 부분으로 구성됩니다. 클라이언트가 서버에게 요청을 보내면, 서버는 그에 대한 응답을 반환한다. 요청과 응답은 텍스트 형식으로 구성되며, 주로 HTML, CSS, JavaScript, 이미지, 동영상 등의 웹 리소스를 주고받을 때 사용된다.

상태 코드

서버가 클라이언트에 응답할 때, 상태 코드를 함께 보낸다. 상태 코드는 요청의 성공 여부나 실패 원인을 나타내며, 가장 잘 알려진 상태 코드 중 하나는 200(OK)이다. 다른 상태 코드로는 404(Not Found), 500(Internal Server Error) 등이 있다.

메서드(Method)

HTTP 요청은 다양한 메서드를 사용하여 원하는 작업을 지정한다. 가장 일반적인 메서드로는 GET(데이터를 가져옴), POST(데이터를 전송), PUT(데이터를 업데이트), DELETE(데이터를 삭제) 가 있다.

URL(Uniform Resource Locator)

HTTP 요청은 URL을 사용하여 요청 대상을 지정한다. URL은 프로토콜(예: "http://"), 호스트(웹 서버의 주소), 포트 번호, 경로 등의 정보를 포함한다.

보안

HTTP는 기본적으로 보안성이 낮으며, 데이터의 암호화가 이루어지지 않는다. 이로 인해 중요한 정보를 주고받을 때 보안 문제가 발생할 수 있으므로, HTTPS(HTTP Secure)라는 보안 버전이 사용된다. HTTPS는 데이터를 암호화하여 더 안전한 통신을 제공한다.

비-연결 지향 (Connectionless)

클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징이다. 연결을 유지하게 되면 서버에 많은 부담을 줄 수 있기 때문에 상당히 많은 클라이언트에게 요청을 받는 웹 서버의 경우 응답을 처리했으면 연결을 끊는다. 이로 인해 서버의 부담을 줄일 수 있지만, 리소스를 요청할 때마다 연결해야 하는 오버헤드 비용이 발생한다. 이를 해결하기 위해선, 요청 헤더의 Connection: keep-alive 속성으로 지속적 연결 상태(Persistent connection)를 유지할 수 있다. 즉, 요청을 할 때마다 연결하지 않고 기존의 연결을 재사용하는 방식이다. HTTP 1.1 부턴 지속적 연결 상태가 기본이며 이를 해제하기 위해선 명시적으로 요청 헤더를 수정해야 한다.

무상태성 (Stateless)

각각의 요청이 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않는다. 즉, 각 클라이언트에 맞게 리소스를 응답하는 것은 불가능하다. 이를 해결하기 위해, 쿠키세션 또는 토큰 방식의 OAuthJWT가 사용된다.

  • 쿠키 : 클라이언트 측에서 저장되는 작은 데이터 조각으로, 상태 정보를 유지하거나 인증 등에 사용
  • 세션 : 서버 측에서 클라이언트의 상태를 유지하는 방법으로, 세션 ID를 사용하여 클라이언트를 식별
  • OAuth(Open Authorization) : 제3자 애플리케이션에서 사용자 데이터에 접근하기 위한 표준 인증 프로토콜
  • JWT(JSON Web Tokens) : 클레임(claim) 정보를 포함하는 토큰으로, 인증 및 정보 교환에 사용

✅ Method

  • GET : 서버에게 조회할 리소스를 요청한다. (READ, 조회)
  • POST : 서버에게 본문(body)에 생성할 데이터를 삽입하여 전송한다. (CREATE, 생성)
  • PUT : 서버에게 본문에 수정할 데이터를 삽입하여 전송한다. (UPDATE, 수정)
  • DELETE : 서버에게 삭제할 리소스를 요청한다. (DELETE, 삭제)
  • PATCH : PUT과 비슷하지만 일부만 수정한다는 점에서 다르다.

✅ 응답 상태코드

  • 1xx (요청에 대한 정보) : 요청을 받았으면 작업을 계속한다.
  • 2xx (성공) : 요청을 성공적으로 수행했다.
    200(성공), 201(새 리소스 작성), 202(요청 접수, 아직 처리는 안함)
  • 3xx (리다이렉션) : 클라이언트가 요청을 마지기 위해 추가적인 동작을 취해야 한다.
    300(여러개의 응답, 선택해야 함), 301(영구이동, 요청한 페이지가 영구적으로 이동됨), 302(임시이동, 현재 응답잉 다른 페이지이긴 하지만 임시적임)
  • 4xx (클라이언트 오류) : 클라이언트에 오류가 있다.
    401(권한 없음), 403(금지됨, 리소스에 대한 권한 없음), 404(찾을 수 없음, 서버에 없는 페이지)
  • 5xx (서버 오류) : 서버에 오류가 있다.
    500(내부 서버오류), 501(요청수행 기능없음, 메서드 인식불가), 503(서비스 사용불가)

참고

profile
3년차 개발자

0개의 댓글