학교수업/웹프로그래밍

HTTP

Ynghan 2023. 6. 16. 04:34

HTTP/REST API

구조

  • 클라이언트
    • 웹 브라우저라는 기계에 수행되는 프로그램
  • 서버
    • 웹 서버라는 기계에서 수행되는 프로그램
  • HTTP
    • 웹 클라이언트와 웹 서버간의 통신 규약

 

HTTP 프로토콜이란?

HTTP(Hypertext Transfer Protocol)는 웹을 개발하는 사람이라면 누구나 다 알아야 하는 통신 프로토콜
프로토콜이란 상호 간에 정의한 규칙을 의미하며 특정 기기 간에 데이터를 주고받기 위해 통신
    - 웹 개발은 통신 프로그램을 작성하는 것
    - 일종의 네트워크 프로그램

 

HTTP 프로토콜 특징

HTTP 프로토콜은 상태가 없는(stateless) 프로토콜입니다.

세션의 개념
    - 여기서 '상태가 없다'라는 말은 각 세션마다 발생된 데이터가 연결되지 않는다는 의미
        - Context가 유지되지 않는다는 의미
        - 좀 더 쉽게 말해서 이전 데이터 요청에서 발생된 데이터가 다음 데이터 요청에서 사용될 수 없다.
            - 예 : 로그인을 해도 로그인 정보가 남지 않는다.
        - 그러면 어떻게 해야 하나?
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번

 

Stateless

원래 문서를 공유하기 위한 것이므로 상태가 필요 없음
서버의 부하를 급격하게 감소시키는 효과가 있음

 

URL

DNS(Domain Name Service) 숫자로 되어 있는 IP 주소보다는 훨씬 기억하기 쉽다
URL(Uniform Resource Locators)
URL 구조

protocol / host / port / resource path / query

 

HTTP 요청 메소드

  • 앞에서 살펴본 URLHTTP 요청 메서드(Http Request Methods)를 이용해 서버에 특정 데이터를 요청할 수 있다.
  • 일반적으로 HTTP 요청 메서드HTTP Verbs라고도 불리우며 아래와 같이 주요 메서드를 갖고 있다.
    • GET : 존재하는 자원에 대한 요청(C)
    • POST : 새로운 자원을 생성(R)
    • PUT : 존재하는 자원에 대한 변경(U)
    • DELETE : 존재하는 자원에 대한 삭제(D)
  • 기타 요청 메서드
    • HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음
    • OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용

 

REST

개요

  • 통신 규약인 http request를 작성하는데, 중구난방으로 작성하는 경향이 있다는 문제
  • REST(Representational State Transfer)
    • 로이 필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 네트워크 소프트웨어 아키텍처
    • 쉽게 말하면 '네트워크에서 통신을 구성할 때 이런 방식으로 설계하라는 지침'
  • Google을 포함하여, Facebook, 트위터, Naver, 카카오톡 등 모든 IT 회사들에서 REST API를 기반으로 실행

 

조건

  • Client-Server - 클라이언트와 서버로 분리되어야하며 서로 의존성이 없어야 한다.
  • Stateless(무상태성)
  • Cache - HTTP를 비롯한 네트워크 프로토콜에서 제공하는 캐싱 기능을 적용할 수 있어야 한다.
  • Uniform Interface - 데이터가 표준 형식으로 전송될 수 있도록 구성 요소 간 통합 인터페이스를 사용한다.
  • Layered System - API는 REST 조건을 만족하면 필연적으로 오픈될 수 밖에 없기 때문에, 요청된 정보를 검색하는데 있어 계층 구조로 분리되어야 한다.
  • Self-descriptiveness - API를 통해 전송되는 내용은 별도 문서 없이 쉽게 이해할 수 있도록 자체 표현 구조를 지녀야 한다.

 

구성요소

  • 객체지향 UI
  • 쉽게 설명하면
    • 각 객체(자원 or 리소스)에 메소드(CRUD)가 연결되어 제공되는 방식으로 작성
  • 자원(Resource)
  • 메서드(Method)
POST 자원 생성(Create)
GET 자원 조회(Read)
PUT 자원 수정(Update)
DELETE 자원 삭제(Delete)

 

HTTP 상태 코드

  • HTTP 상태 코드(HTTP Status Code)는 서버에서 설정해주는 응답(Response) 정보
  • 위 요청을 보내고 나면 서버에서 응답으로 오는 상태 코드가 크게 2개로 분류
    • 200(성공)과 404(실패)
  • 주요 상태 코드는 200번대부터 500번대까지 다양하게 있지만 주요한 상태 코드는 다음과 같음

2xx - 성공

200번대의 상태 코드는 대부분 성공을 의미합니다.

  • 200 : GET 요청에 대한 성공
  • 204 : No Content. 성공했으나 응답 본문에 데이터가 없음
  • 205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
  • 206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환

3xx - 리다이렉션

300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우

  • 301 : Moved Permanently, 요청한 자원이 새 URL에 존재
  • 303 : See Other, 요청한 자원이 임시 주소에 존재
  • 304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인

4xx - 클라이언트 에러

400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우

유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생

가장 익숙한 상태 코드는 404 코드

요청한 자원이 서버에 없다는 의미 죠.

  • 400 : Bad Request, 잘못된 요청
  • 401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
  • 403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
  • 405 : Method Not Allowed, 허용되지 않은 요청 메서드
  • 409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌

5xx - 서버 에러

500번대 상태 코드는 서버 쪽에서 오류가 난 경우입니다.

  • 501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
  • 503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'학교수업 > 웹프로그래밍' 카테고리의 다른 글

Bootstrap: CSS Framework  (0) 2023.06.16
Graphics  (0) 2023.06.16
[0323~0328] 웹프  (0) 2023.03.23
[웹프] 0316~0321  (0) 2023.03.16
[웹프] 0314  (0) 2023.03.14