HTTP 란
HyperText Transfer Protocol 이라는 약어로 컴퓨터들의 통신 규약 중 하나입니다.
사람이 다른 사람과 소통을 하기 위해서는 정해진 소통방법 (예를 들어 언어, 수화 등) 이 있습니다. 컴퓨터도 마찬가지입니다. 하나의 컴퓨터가 다른 컴퓨터와 소통을 하고 싶을 때에 (파일을 받거나 전달하거나 등) 정해진 규칙과 틀을 준수해야 원활한 소통이 가능합니다. 이렇게 정해진 규칙들을 하나의 규약 (protocol) 이라고 부릅니다.
예시
예를 들어 이메일을 주고 받을 때에는 이메일 사이트로 로그인해서 받은 편지함을 보면 되지만 실제로 받아야 하는 메일을 받아야 하는 이메일 주소로 보낼 수 있도록 해주는 규약들이 있습니다. 어쩌면 들어보셨을 만한 POP3, SMTP, IMAP 등이 그러한 규약들이죠. 또 이러한 규약들을 사용해서 스스로 이메일 서버를 만들어 운영할 수도 있습니다!
언어도 아랍어, 러시아어, 한국어 등 여러 개가 있듯이 규약에도 상황에 따라 다양한 종류가 있습니다. 이 중에서 HTTP 는 웹에서 통신할 때에 사용되는 규약입니다. 이를테면 한국에 오면 보통 한국어로 소통을 하고 러시아에 가면 러시아로 소통하듯이 말이죠. 컴퓨터 또한 웹에서는 HTTP 를 사용합니다.
이처럼 웹 브라우저를 켰을 때에 사이트에 접속할 때에도 HTTP 라는 규약을 따르게 됩니다. POP3, SMTP, IMAP 을 사용하면 이메일과 관련된 작업을 하는 것처럼 HTTP 를 사용하게 된다면 웹과 관련된 작업을 한다는 것을 표현하는 것이기도 합니다.
소통을 간단하게 보자면 다음과 같습니다.

그림에서 나오듯이 HTTP 는 크게 요청 (HTTP Request)과 응답 (HTTP Response)으로 나뉘어져 있습니다.
HTTP Request
HTTP 요청이라 할 때에는 보통 한 컴퓨터가 다른 컴퓨터에 리소스 요청을 보낼 때 사용되는 말입니다. 보통 요청을 하는 컴퓨터는 클라이언트라 부르고 요청을 받는 컴퓨터는 서버라고 부릅니다.
요청이라는 단어를 처음 접할 때에는 별로 와닿지 않을 수 있습니다. 그러면 은행을 먼저 예시로 들어볼까요? 은행에 가게 되면 다양한 일을 할 수가 있습니다. 계좌를 새로 개설하거나 기존 계좌에 잔금을 조회하거나 돈은 입금하거나 계좌를 닫는 등 여러 일들을 할 수가 있습니다. 이 때 이러한 업무를 요청하러 은행에 방문하는 고객은 클라이언트이고 실제로 요청을 받아서 처리하는 은행원은 서버라고 볼 수 있습니다.
은행에서 업무의 종류에 따라 요청을 분류할 수 있듯이 HTTP 의 요청 또한 클라이언트의 목적에 따라 다르게 분류되기도 합니다.
웹에 대한 예시를 들어보면 네이버에 접속할 때 웹 페이지를 달라고 요청할 수도 있고 로그인 할 때에는 정보가 맞는지 확인을 해달라고 요청할 수도 있습니다.
CRUD 에 사용되는 HTTP 메소드
그렇다면 데이터를 다룰 수 있는 (CRUD) 몇가지 중요한 HTTP 메소드에 대해서 한번 살펴보겠습니다:
- GET : 특정 리소스를 달라고 할 때에 사용됩니다:
- 예시: 페이지 로딩할 때
- POST : 서버 측의 특정 리소스를 저장할 때 사용됩니다.
- 예시: 회원가입을 할 때에 특정 유저의 정보를 서버에 저장
- PUT/PATCH : 서버 측의 특정 리소스를 업데이트 할 때 사용됩니다. PUT 은 데이터 전부를 바꿀 때, PATCH 는 부분적으로 변경할 때 사용됩니다.
- 예시: 사용자 닉넴임 변경
- DELETE : 서버 측의 특정 리소스를 삭제할 때 사용됩니다.
- 예시: 유저 탈퇴
위에 나온 요청들 외에도 다양한 HTTP 요청 메소드들이 있습니다. MDN HTTP Request Methods 를 확인해 보세요!
또한 이러한 요청들을 특정 방법으로 사용하도록 정해진 것은 아닙니다. DELETE 메소드를 사용해 회원가입을 진행할 수 있고 GET 으로 업데이트도 할 수 있습니다. 이렇게 할 수 있는 이유는 클라이언트와 서버가 사전에 약속된 방법만 있다면 작동에는 문제가 없기 때문입니다.
물론 어느 HTTP 메소드인지에 따라 제한이 있습니다. GET 이나 DELETE 와 같은 경우에는 주소에만 데이터를 담아 넘길 수 있습니다. 복잡한 데이터 형태를 넘기기에는 제한이 많죠.
API 를 제작할 때에는 보통 REST 가이드라인을 따라 제작이 됩니다. 그리고 API 는 보통 해당 REST 가이드라인을 따라 HTTP 메소드들이 사용이 됩니다.
현재는 이러한 REST 구조를 대부분 따르고 있어서 알고 계시면 편합니다.
HTTP 메소드들을 다 아실 필요는 없지만 이번에 여러분들이 만들게 되실 API 는 4 가지 CRUD 기능을 모두 구현하셔야 하기 때문에 위에 있는 HTTP 메소드들은 필수로 알고 사용하실 수 있어야 합니다.
HTTP Response
요청을 보냈으면 응답을 받아야겠죠? HTTP 규약을 통해서 보낸 요청이기 때문에 응답 또한 HTTP 규약에 따른 응답을 받게 됩니다.
자세한 내용을 살펴보기 전에 일상생활에서의 예시로 살펴보겠습니다. 만약에 전화를 거는 행동이 HTTP 요청이라면 전화를 걸었을 때에 나올 수 있는 다양한 응답들이 HTTP Response 가 됩니다.
예를 들어 다음과 같은 응답들이 있을 수가 있습니다:
- 상대방이 전화를 받음
- 상대방이 전화를 끊음
- 없는 번호
- 번호 이동
- 전원이 꺼짐
- 잘못된 번호로 전화를 한 경우
전화 응답을 두고 봤을 때에 응답들을 상태에 따라 분류할 수 있습니다. 이와 마찬가지로 클라이언트 측에서 요청을 보내게 되는 경우 서버 측에서도 다양한 응답을 보내게 됩니다. 각 응답은 기본적으로 상태 코드 (Status Code) 라는 것을 가지고 있습니다. HTTP 요청에 대한 상태가 어떤지 알려주는 것이죠. 상태 코드는 총 5개의 종류로 나누게 됩니다.
100번대에서 500번대 까지 있는 HTTP 상태 코드들의 분류는 다음과 같습니다.
- 100 번대 : 정보 응답
- 200 번대 : 성공 응답
- 300 번대 : 리다이렉션 메시지
- 400 번대 : 클라이언트 에러 응답
- 500 번대 : 서버 에러 응답
응답을 보낼 때에는 상태 코드도 있지만 때에 따라 문자열이나 JSON 등을 이용해서 데이터를 함께 실어서 보내기도 합니다.
HTTP 예시
웹 페이지를 열어서 개발자 도구를 연 뒤에 네트워크 탭으로 들어가면 실제로 보내지는 HTTP 요청과 응답을 볼 수 있습니다.
크롬 브라우저에서 네트워크 탭을 여는 방법을 참고해 보세요
페이지를 열었을 때에, 로그인을 했을 때에, 회원가입을 했을 때에 각각 요청과 응답이 어떤가요?
간략한 예시를 같이 보겠습니다.

간단한 정보만 보여주는 'General' 만 봐도 다양한 정보가 보입니다. 이 중에서 몇가지만 살펴보겠습니다.
지금은 요청 메소드와 응답 코드 등을 알아보고 파악하는 능력이 중요합니다
- 'Request Method': 이전에 봤던 HTTP 요청 메소드 중 GET, 리소스를 가져온다는 뜻인 메소드를 사용하고 있습니다.
- 'Status Code' : 200 이라는 숫자 앞에 초록색 불이 들어왔습니다. 200 은 'OK', 성공했다는 뜻입니다. 여기에서는 GET 요청이 성공적이었다는 뜻이 됩니다.
- 'Request URL' : 누가 요청을 하고 있는지를 담고 있습니다.
- 'Remote Address' : 어느 리모트 서버에 요청을 하고 있는지 알려주고 있습니다. 현재는 157.245.183.96 의 443 포트에 요청을 보내고 있습니다.
- 'Referrer Policy' : 요청을 보내는 곳이 당사자인지, 타 웹사이트에서 연결된 건지 등 알려줍니다. 현재는 'no-referrer' 로 현 웹사이트에서 보내고 있습니다.
'데이터 분석 > Flask' 카테고리의 다른 글
| JSON (JavaScript Object Notation) (0) | 2021.03.30 |
|---|---|
| Flask - 패키지 구조화 (0) | 2021.03.27 |
| Flask - SQLAlchemy(ORM) (0) | 2021.03.27 |
| Flask - 2. Forms and User Input (0) | 2021.03.25 |
| Flask - 1. 기본설정, 템플릿, 부트스트랩 (0) | 2021.03.23 |