HTTP (HyperText Transfer Protocol)
HTTP는HyperText Transfer Protocold의 약자로 www(World Wide Web)에서 정보를 주고 받을 수 있는 프로토콜(규약)이다. 클라이언트(사용자/ 웹브라우저)와 서버(Server) 사이에 이루어지는 요청과 응답 프로토콜이라고 할 수 있으며 클라이언트에서 서버에 요청 후 서버에서 메세지를 보내는 클라이언트-서버 모델을 기반으로 동작한다.
클라이언트-서버 모델(client-server model)
클라이언트-서버 모델(client-server model)은 컴퓨터 네트워크 및 분산 컴퓨팅에 사용되는 개념이며 모델의 이름 그대로 서버와 클라이언트 간의 상호작용을 기반으로 한다.
* 자원(resource)를 사용하는 앱을 클라이언트(Client), 제공하는 쪽을 서버(Server)라고 한다.
클라이언트와 서버 간의 상호작용은 표준화된 프로토콜을 사용하여 이루어진다. 네트워크 환경에서 확장성과 유연성을 제공하며 서버는 데이터와 서비스 관리, 클라이언트는 필요한 기능 요청과 같은 역할 분담이 가능하다. 이를 통해 여러 클라이언트가 동시에 여러 서버를 사용하고 클라이언트 서버의 독립적인 개발과 유지보수가 가능하다.
HTTP 의 특징
HTTP 는 텍스트 기반의 프로토콜로, 클라이언트와 서버 간에 HTTP 메시지를 주고받아 웹 리소스를 요청하고 전송한다. 이 때 HTTP는 데이터를 안전하게 전송하기 위해 TCP/IP 프로토콜 스택 위에서 동작하며 주로 TCP포트 80을 사용한다.
HTTP는 웹 브라우저를 통해 웹 페이지, 이미지, 동영상 등을 요청하고 응답 받는 데에 주로 사용된다. HTTP요청은 HTTP메서드(GET, POST, PUT, DELETE)와 헤더, 본문으로 구성되며 요청 처리 후 적절한 응답을 클라이언트에게 반환한다.
- 요청 구조:
- 요청 라인(Request Line): HTTP 메서드, 요청 대상 URL, 사용된 HTTP 버전으로 구성
- 헤더(Headers): 요청에 대한 부가적인 정보를 포함한다. 헤더는 "헤더 이름: 값" 형태로 나열
- 본문(Body): 요청 시에 선택적으로 데이터를 전송할 수 있다. 주로 POST 메서드와 함께 사용되며, 데이터는 텍스트, JSON, 이미지 등의 형식일 수 있다.
- 응답 구조:
- 상태 라인(Status Line): HTTP 버전, 상태 코드와 상태 메시지로 구성 상태 코드는 요청 처리 결과를 나타낸다. 예를 들어, 200은 "성공", 404는 "찾을 수 없음"을 의미
- 헤더(Headers): 응답에 대한 부가적인 정보를 포함 헤더는 요청과 마찬가지로 "헤더 이름: 값" 형태로 나열됩니다.
- 본문(Body): 서버가 클라이언트로 전송하는 데이터가 담겨있다. 주로 HTML, JSON, 이미지 등의 형식일 수 있다.
URL (Uniform Resource Locator)
URL은 웹 상에서 특정 리소스의 위치를 나타내는 주소이다. 웹 브라우저를 통해 웹 페이지를 요청하거나 다른 웹 리소스에 접근하는 데 사용된다.
🔽 URL의 구성요소
- 프로토콜(Protocol) : 리소스에 접근하기 위해 사용되는 프로토콜
- 일반적으로 웹 사이트는 HTTPS와 HTTP이다.
- HTTP는 보안 X → 사이트에 들어가면 경고 알림이 뜨기도 한다.
- 호스트(Host) : 리소스가 위치한 서버의 도메인 이름이나 ip주소
- www.naver.com 은 리소스가 위치한 호스트를 가르킨다.
- 포트(Port) : 서버에 리소스를 제공하기 위해 사용하는 포트 번호를 나타낸다.
- HTTP는 80 / HTTPS는 443 → 포트번호가 생략될 경우 기본값
- 경로(Path) : 서버 내에서 요청한 리소스의 경로로 경로는 서버의 파일 시스템이나 라우팅 규칙에 따라 결정된다. * 라우팅 규칙 : 네트워크에서 패킷이나 데이터가 전달되는 경로를 결정하는 규칙
- 쿼리 문자열(Query String) : 매개변수를 전달하기 위한 문자열로 웹 애플리케이션 정보 제공이나 검색 기능에 사용
HTTP 요청 메서드
클라이언트가 서버에게 어떤 동작을 요청하는지 나타내는 메서드
- GET : 서버로 리소스(웹 페이지, 이미지, 동영상 등)을 요청 데이터를 가져오는 용도로 사용되며 요청 리소스는 본문에 포함되어 반환
- POST : 서버에 데이터를 제출하거나 서버의 상태 변경을 위해 사용 데이터를 서버로 제출하여 처리하고 응답으로 결과를 받을 때 사용
- PUT : 서버에 새로운 리소스를 생성하거나 기존 리소스를 업데이트 요청 본문에 업데이트할 리소스의 데이터를 포함하여 전송
- DELETE: 서버에 있는 특정 리소스 삭제 요청한 리소스가 서버에서 제거되어야 함
- PATCH: 서버에 있는 리소스를 부분적으로 업데이트 요청 본문에 업데이트할 리소스의 일부만 포함하여 전송
- HEAD : GET과 유사하지만 서버 응답 본문을 반환하지 않고 헤더 정보만 반환
- OPTIONS : 서버가 지원하는 요청 메서드 옵션 확인을 위해 사용(CORS에서 사용) 서버가 허용하는 메서드나 기타 서버 설정 정보 확인 가능
HTTP 상태 코드
상태코드는 웹 서버가 클라이언트에게 응답할 때 전송되는 세 자리 숫자(100~599)로 이루어진 코드
요청에 대한 처리 상태를 나타내며, 클라이언트에게 어떤 동작을 수행했는지 알려줌
- 1xx (Informational): 요청이 수신되었으며 처리 중인 상태 주로 처리가 진행 중임을 알리는 용도
- 2xx (Success): 요청이 성공적으로 처리
- 3xx (Redirection): 요청을 완료하기 위해 추가 동작이 필요함을 나타냅니다. 주로 리디렉션(페이지 이동)이나 캐시 관련 동작을 처리하기 위해 사용됩니다. 일반적으로 301 Moved Permanently, 302 Found, 304 Not Modified 등이 있습니다.
- 4xx (Client Error): 클라이언트의 요청이 잘못되었거나 처리할 수 없음을 나타냅니다. 주로 클라이언트의 오류로 인해 발생한 상태 코드입니다. 일반적으로 400 Bad Request, 404 Not Found, 403 Forbidden 등이 있습니다.
- 5xx (Server Error): 서버에서 요청을 처리하는 도중에 에러가 발생함을 나타냅니다. 주로 서버의 오류로 인해 발생한 상태 코드입니다. 일반적으로 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable 등이 있습니다.
🔽 자주 사용되는 코드
- 200 OK: 요청이 성공적으로 처리
- 400 Bad Request: 클라이언트의 요청이 잘못되었거나 서버가 요청을 이해할 수 없음
- 404 Not Found: 요청한 리소스를 서버에서 찾을 수 없음
- 500 Internal Server Error: 서버 내부에서 오류가 발생 서버 측에서 처리 중에 문제가 발생했을 때
- 302 Found (또는 301 Moved Permanently): 요청한 리소스가 새로운 위치로 이동되었음 리디렉션을 통해 새로운 위치로 클라이언트를 안내할 때 사용
- 403 Forbidden: 서버가 요청을 거부 클라이언트가 리소스에 대한 액세스 권한이 없을 때 사용
- 401 Unauthorized: 클라이언트가 인증되지 않았거나 인증이 실패했음 보호된 리소스에 접근하려는 클라이언트에게 인증이 필요함
어제부터 네트워크에 관한 공부를 시작했다. 오늘 공부하면서 느낀 점은 정말 끝도 없다는 것… 항상 글로만 봐서 이해가 잘 안 갔던 내용들이기도 하고 모르는 게 계속 나오다보니 보다가 만 기억들이 있는데 이렇게 정리하면서 살펴볼 수 있는 시간이라 좋았다. API 도 정리를 해야하는데.. 어떡하지?ㅋㅋㅋ 아무튼… 궁금증이 해소되기도 했지만, 모르는 용어들의 연속이자 봐도 봐도 끝이 없는 것 같아 공부한다면 얼마든지 더 해도 될 듯 하다.
API 부분에서는 사실 정처기 공부했던게 조금이라도 도움이 되었던 것 같다. 정처기 공부하면서 어느정도 익숙해진 탓인지 왜 사용하는지, 어떤 방법인지도 알 수 있었고 이전 학원에서 내가 API를 끌고와서 페이지를 만든 경험이 있었다는 것도 이제서야 알게 되었다. 그 때는 정말 이유 모르고 사용했던 것들이었는데 예전 것 까지 돌아볼 수 있는 시간들이 된 것 같아서 좋았다.
아 맞다.. API는 매우 익숙한 단어기도 했거 그래서 궁금하기도 했었다. 트위터 API 초과가 한참 많이 뜨던 때 API가 도대체 뭔데 나를 이렇게 답답허게 하는 것인가 찾아본 적 이 있었는데 그 때는 컴퓨터를 공부하지도 않던 시절이라 외계어처럼 보였었다. 물론 지금도 시원하게 설명은 못하지만…ㅎ
생각이 난다. API 초과가 뭔지도 궁금하니 찾아보고 자야겠다. 오늘도 어쩌다보니 밀렸지만 블로깅 끝.
참고 /
'KNOWLEDGE' 카테고리의 다른 글
[NETWORK] REST API, RESTful 알아보기 / REST란? (1) | 2023.11.16 |
---|---|
[OS] CPU 스케줄링 알고리즘 / 프로그램 vs 프로세스 vs 스레드 (2) | 2023.11.08 |
[NETWORK] TCP 의 연결 및 해제 과정 (3-Way Handshake / 3-Way Handshake) (1) | 2023.10.30 |
[NETWORK] 대역폭(Bandwidth)이란? (0) | 2023.10.25 |
[자료구조] 그리디(Greedy) 알고리즘 (0) | 2023.05.18 |