-
[개념 정리] HTTP의 개념과 특징django 2022. 2. 20. 18:52
인터넷 주소를 보면 http://, https://를 한번쯤 봤을 것이다. 오늘은 백엔드 개발자도 기본적으로 알고 있어야 된다고 하는 HTTP개념에 대해서 정리해보았다.
# HTTP? HTTPS?
: HyperText Transfer Protocol의 약자로, 텍스트 기반의 통신 규약, 즉 인터넷에서 데이터를 웹 브라우저와 웹 서버간에 주고받을 수 있는 프로토콜 (규칙)을 말한다. HTTP는 정보를 텍스트로 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 원하지 않는 데이터 유출이 발생할 수 있다. 이러한 보안 취약점을 해결하기 위한 프로토콜이 HTTP에 S(Secure Socket)가 추가된 HTTPS이다. HTTPS는 기본 골격이나 사용 목적 등은 HTTP와 거의 동일하지만, 데이터를 주고 받는 과정에 ‘보안’ 요소가 추가되었다는 것이 가장 큰 차이점이다. HTTPS를 사용하면 서버와 클라이언트 사이의 모든 통신 내용이 암호화된다.
# HTTP의 특징
1. 요청/응답(Request/Response) 방식으로 동작한다.
# Request, Response
: 사용자가 브라우저에 URL을 입력하면 HTTP 표준에 따라 URL을 요청 메시지로 변환하고 TCP/IP를 사용하여 인터넷을 통해 요청 (request)을 보낸다. 웹 서버는 요청을 수신하고 클라이언트가 요청한 웹 페이지를 응답(response)한다.
HTTP를 통해 HTML 문서뿐만 아니라 Plain Text, JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있으며, 보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많다.
Json과 XML에 대해서는 추후에 상세히 다뤄보도록 하겠다.
2. 연결 상태를 유지하지 않는 비연결성 프로토콜이다.# 비연결성 (Connectless)
: 비연결성은 클라이언트와 서버가 한번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말한다. 연결을 끊는 이유는, 만약 서버에서 불특정 다수의 클라이언트와 연결을 계속 유지해야 한다면, 이에 따른 많은 리소스가 발생하게 되는데, 연결을 유지하기 위한 리소스를 줄여 더 많은 연결을 하기 위해 비연결성 특징을 갖는다.
# KeepAlive
: 비연결성으로 인해 서버는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 매번 새로운 연결을 시도/해제하는 과정을 거쳐야하므로 이에 대한 오버헤드가 발생한다. 따라서 이에 대한 해결책으로 오버헤드를 줄이기 위해 HTTP의 KeepAlive 속성을 사용할 수 있다. KeepAlive는 지정된 시간동안 서버와 클라이언트 사이에서 패킷 교환이 없을 경우, 상대방의 안부를 묻기위해 패킷을 주기적으로 보내는 것을 말한다. 이 때 패킷에 반응이 없으면 접속을 끊게 된다.
*오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말한다.
# 무상태 (Stateless)
: Connectless로 인해 서버는 클라이언트를 식별할 수가 없는데, 이를 무상태 (Stateless)라고 한다.
클라이언트의 상태를 모르면, 해당 사용자의 인증 여부를 확인할 수 없으므로 사용자 입장에서 굉장히 귀찮은 상황이 발생한다. 예를 들어 쇼핑몰을 이용할 때, 페이지를 넘길때마다 사이트에서 로그인을 요구한다고 생각해보자.이에 대한 해결책으로 쿠키/세션/JWT가 있는데 자세한 내용은 이전 포스트를 참고해보자.
[개념 정리] 쿠키/세션, 그리고 JWT
# Cookie와 Session은 언제 쓰이는가? : 기본적으로 웹 브라우저와 서버가 HTTP 프로토콜을 통해서 하는 모든 커뮤니케이션은 stateless 한 특징이 있다. stateless란 통신이 끝나면 상태를 유지하지 않는
mysnu.tistory.com
3. TCP/IP를 이용하는 응용 프로토콜(application protocol)이다.
# TCP/IP 란?
- TCP : Transmission Control Protocol의 약자로 서버와 클라이언트 간에 데이터를 신뢰성있게 전달하기 위해 만들어진 프로토콜이다.
- IP : Internet Protocol의 약자로 컴퓨터들의 네트워크 상에서 서로를 구별하기 위한 주소 (실생활에서 우편주소 같은)이다.
쉽게 말하면 IP는 데이터가 찾아갈 주소, TCP는 찾아온 데이터가 형식에 맞게 왔는지 확인하는 필터라고 한다.
# HTTP Method
: 클라이언트가 서버에 보내는 요청 (request)에도 종류가 있다. 대표적인 4가지 종류는 아래와 같다. 다른 메서드들이나, 메서드 간의 차이는 다음에 자세히 알아보도록 하자.
- GET : 자료를 요청할 때 사용
- POST : 자료의 생성을 요청할 때 사용
- PUT : 자료의 수정을 요청할 때 사용
- DELETE : 자료의 삭제를 요청할 때 사용# HTTP Status code
: 클라이언트의 요청에 대해 서버는 해당 요청이 어떻게 처리되었는지 (Status code)를 응답 (response)에 담아 보낸다.
아래에서 간단하게 살펴보고, 자세한 내용은 다음에 다뤄보도록 하겠다.
- 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
- 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
- 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
- 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
- 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
참고
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
https://victorydntmd.tistory.com/286https://codinghero.tistory.com/25
https://codinghero.tistory.com/25
https://seunghyun90.tistory.com/41
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'django' 카테고리의 다른 글
[개념 정리] Django 페이지네이션의 종류와 차이 (0) 2022.02.23 [개념 정리] HTTP 메서드 종류와 속성, 차이 (0) 2022.02.22 [개념 정리] Custom Manager vs Custom Queryset (0) 2022.02.19 [개념 정리] Django의 ORM과 Lazy-Loading, N+1 Problems, Eager-Loading (0) 2022.02.18 [개념 정리] 쿠키/세션, 그리고 JWT (0) 2022.02.15