본문 바로가기

기초 튼튼/네트워크

[네트워크]HTTP 정리 - 기본 개념

 

인프런에서 김영한님의 "모든 개발자를 위한 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 과정으로 진행
    • PORT
      • IP내의 네트워크 엔드포인트: 같은 IP 내에서 프로세스를 구분
    • DNS
      • Domain Name Server 약자, 클라이언트로부터 url주소를 받아 해당 url에 해당하는 IP주소를 반환해줌
      • 유동IP등 IP의 변경이 있는 경우에도 DNS 서버에 등록이 되므로 대응이 가능
    • URI
 

URI랑 URL 차이점이 뭔데? | 찰스의 안드로이드

URI 그리고 URL을 혼용해서 사용하는 경우가 있다. 대부분의 경우 문제가 없지만 정확하게 이 둘의 차이점이 존재한다. 그러므로 각 용어의 정의와 용도에 대해서 알아본다. URI URI는 특정 리소스

www.charlezz.com

 


HTTP 기본 (2/2)

  • 클라이언트 서버 구조
    • 클라이언트: Request, 서버에 요청을 보내고 응답을 대기하는 사이드
    • 서버: Response, 클라이언트에게 요청에 대한 결과를 만들어 응답하는 사이드
  • Stateless / Stateful
    • 상태유지(Stateful): 서버가 클라이언트의 상태값을 유지하고 있는 구조
    • 무상태(Stateless): 서버가 클라이언트의 상태값을 유지하지 않음
      • 따라서, 요청의 Response 데이터 내에 해당 상태값을 유지하거나 혹은 다른 유지방식이 요구됨
      • 서버사이드의 부하를 줄이기 위하여 무상태로 최대한 설계하는 것이 중요
  • 메시지의 구조
    • start-line(시작라인)
      • HTTP 메서드의 종류로 시작(ex; GET, POST...)
      • 요청 메시지 포함
      • 응답메시지의 경우에는 HTTP 스팩과 서버의 응답 상태코드를 반환하며 시작
    • Header(헤더)
      • HTTP 전송에 필요한 모든 부가정보를 포함
        • Ex; 메시지 바디의 내용, 메시지 바디의 크기..
    • empty line(공백 라인) 
    • Message Body(바디)
      • 실제 전송할 데이터
      • byte로 표현 가능한 모든 데이터 (Ex; JSON..)

 

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; 주문 완료 후 주문 내역화면으로 이동
          • 302 Found: 리다이렉트시 요청 메서드 GET 변경, 본문제거
          • 307 Temporary Redirect: 302와 같은 기능, 메서드/본문 유지 (변경 X)
          • 303 See Other: 302와 기능 동일, 리다이렉트시 요청 메서드 GET 변경
            • 302 응답의 명확 버전!
        • 특수: 결과 대신 캐시를 사용함
          • 300 Multiple Choices: 사용 안함
          • 304 Not Modified: 캐시를 목적으로 사용함. 클라이언트에게 리소스 변경 안되었음을 알림
    • 4xx - 실패 (클라이언트 오류), 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
      • 400 Bad Request
      • 401 Unauthorized : 인증(Authentication)되지 않음 ex; 로그인
      • 403 Forbidden : 인가(Authorization)되지 않음 ex; 권한 부여
      • 404 Not Found : 요청한 리소스 존재하지 않음
    • 5xx - 실패 (서버 오류), 서버가 정상 요청을 처리하지 못함
      • 503 Service Unavailable : 서버 장애 등
        • 재요청시 성공할 수도 있음 (Ex; 서버 복구되었을 시)
        • Retry-After : 언제 복구되는지를 파라미터 통해 알려줄 수 있음
        • 실제 서버 오류가 아닌 경우를 5xx 에러를 발생시키면 절대 안됨 (Ex; 비즈니스 로직상의 실패)

 


부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 내용 수정 피드백은 댓글로 적어주세요.

감사합니다 :-)

반응형

'기초 튼튼 > 네트워크' 카테고리의 다른 글

[네트워크] HTTP 정리 - 헤더/캐시  (0) 2021.06.28