인프런에서 김영한님의 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를
수강하고 정리한 문서입니다. (더 자세한 내용은 강의를 참고)
HTTP 기본 (1/2)
HTTP란?
- Hyper Text Transmission Protocol의 약자
- 클라이언트-서버 아키텍쳐에서 통신을 위해 사용되는 프로토콜의 하나
- 현재 구현되어 있는 웹, 앱 등 대다수의 아키텍쳐는 이 HTTP 기반으로 구성되어있음
- 따라서, IT서비스 뿐만 아니라 데이터를 주고 받는 통신을 알기 위해서는 HTTP에 대한 이해가 필수
HTTP를 이해하기 위한, 인터넷 네트워크 기본
- Internet Network
- 네트워크 상의 통신 규약 중 하나인 HTTP(Hyper Text Transmission Protocol)은 약속
- IP (인터넷 프로토콜)
- 한계
- 비연결성: 패킷을 받을 대상이 없거나 대상이 불능이어도 패킷 전송
- 비신뢰성: 중간에 인터넷망에서 패킷이 사라져도 찾기 어려움/ 순서구분 어려움
- 프로그램 구분: IP만으로는 해당 서버에서 운영되는 프로그램이 둘 이상인 경우 구분이 어렵다!
- 한계
- TCP, UDP
- OS단의 통신 프로토콜
- PORT 정보 등을 담고 있는 Layer
- TCP 3 way handshake: 클라이언트와 서버간의 데이터 전송이전 확인하는 프로세스
- (클라이언트)SYN > (서버)SYN+ACK > (클라이언트)ACK 과정으로 진행
- OS단의 통신 프로토콜
- PORT
- IP내의 네트워크 엔드포인트: 같은 IP 내에서 프로세스를 구분
- DNS
- Domain Name Server 약자, 클라이언트로부터 url주소를 받아 해당 url에 해당하는 IP주소를 반환해줌
- 유동IP등 IP의 변경이 있는 경우에도 DNS 서버에 등록이 되므로 대응이 가능
- URI
- Uniform Resource Identifier의 약자
- URL(Uniform Resource Locator)와는 무엇이 다르지?
HTTP 기본 (2/2)
- 클라이언트 서버 구조
- 클라이언트: Request, 서버에 요청을 보내고 응답을 대기하는 사이드
- 서버: Response, 클라이언트에게 요청에 대한 결과를 만들어 응답하는 사이드
- Stateless / Stateful
- 상태유지(Stateful): 서버가 클라이언트의 상태값을 유지하고 있는 구조
- 무상태(Stateless): 서버가 클라이언트의 상태값을 유지하지 않음
- 따라서, 요청의 Response 데이터 내에 해당 상태값을 유지하거나 혹은 다른 유지방식이 요구됨
- 서버사이드의 부하를 줄이기 위하여 무상태로 최대한 설계하는 것이 중요
- 메시지의 구조
- start-line(시작라인)
- HTTP 메서드의 종류로 시작(ex; GET, POST...)
- 요청 메시지 포함
- 응답메시지의 경우에는 HTTP 스팩과 서버의 응답 상태코드를 반환하며 시작
- Header(헤더)
- HTTP 전송에 필요한 모든 부가정보를 포함
- Ex; 메시지 바디의 내용, 메시지 바디의 크기..
- HTTP 전송에 필요한 모든 부가정보를 포함
- empty line(공백 라인)
- Message Body(바디)
- 실제 전송할 데이터
- byte로 표현 가능한 모든 데이터 (Ex; JSON..)
- start-line(시작라인)
HTTP 메서드
- GET
- 조회시 사용
- 보안에 취약
- 내부 리소스를 변화시킬 수 없는 메서드
- POST
- 내부 리소스를 변화시킬 수 있음
- 멱등하지 않음
- PUT
- 내부 리소스를 통째로 변환
- PATCH
- 내부 리소스의 일부를 변환
- DELETE
- 내부 리소스 삭제 메서드
HTTP Status (상태코드)
- HTTP 상태코드: 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
- 1xx - 요청이 수신되어 처리중(informational)
- 2xx - 요청 정상 처리 (Successful)
- 201 Created : 요청 성공, 신규 리소스 생성
- 202 Accepted : 요청 성공, 처리중
- 204 No content : 요청 성공, 표시/전송할 데이터 없음
- 3xx - 리다이렉션 (영구/일시), 요청을 완료하려면 유저 에이전트의 추가 행동이 필요
- 웹브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(리다이렉트)
- 리다이렉션의 종류
- 영구: 특정 리소스의 URI가 영구적으로 이동함
- Ex; /members -> /users
- 301 Moved Permanently: 리다이렉트시 요청 메서드가 GET으로 변경, 본문제거
- 308 Permanent Reedirect: 301과 동일한 기능, 리다이렉트시 메서드/본문 유지(POST>POST)
- 일시: 일시적인 변경
- PRG(POST/Redirect/GET): POST 이후 변경내역이 중복발생하지 않도록 GET으로 리다이렉트
- Ex; 주문 완료 후 주문 내역화면으로 이동
- Ex; 주문 완료 후 주문 내역화면으로 이동
- 302 Found: 리다이렉트시 요청 메서드 GET 변경, 본문제거
- 307 Temporary Redirect: 302와 같은 기능, 메서드/본문 유지 (변경 X)
- 303 See Other: 302와 기능 동일, 리다이렉트시 요청 메서드 GET 변경
- 302 응답의 명확 버전!
- PRG(POST/Redirect/GET): POST 이후 변경내역이 중복발생하지 않도록 GET으로 리다이렉트
- 특수: 결과 대신 캐시를 사용함
- 300 Multiple Choices: 사용 안함
- 304 Not Modified: 캐시를 목적으로 사용함. 클라이언트에게 리소스 변경 안되었음을 알림
- 영구: 특정 리소스의 URI가 영구적으로 이동함
- 4xx - 실패 (클라이언트 오류), 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 400 Bad Request
- 401 Unauthorized : 인증(Authentication)되지 않음 ex; 로그인
- 403 Forbidden : 인가(Authorization)되지 않음 ex; 권한 부여
- 404 Not Found : 요청한 리소스 존재하지 않음
- 5xx - 실패 (서버 오류), 서버가 정상 요청을 처리하지 못함
- 503 Service Unavailable : 서버 장애 등
- 재요청시 성공할 수도 있음 (Ex; 서버 복구되었을 시)
- Retry-After : 언제 복구되는지를 파라미터 통해 알려줄 수 있음
- 실제 서버 오류가 아닌 경우를 5xx 에러를 발생시키면 절대 안됨 (Ex; 비즈니스 로직상의 실패)
- 503 Service Unavailable : 서버 장애 등
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 내용 수정 피드백은 댓글로 적어주세요.
감사합니다 :-)
반응형
'기초 튼튼 > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 정리 - 헤더/캐시 (0) | 2021.06.28 |
---|