ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 웹 기본 지식 01
    전공 지식/네트워크 2022. 6. 9. 14:19
    - 김영한 님의 HTTP 웹 기본 지식을 듣고 정리하고자 쓴 글입니다.

    1. 인터넷 네트워크 

    IP(Internet Protocol)

    인터넷 프로토콜은 지정한 IP주소에 데이터를 전달한다. 패킷으로 데이터 전달.

    IP의 한계

    비연결성 - 패킷 받을 대상이 없거나 서비스 불능이어도 패킷을 전송한다는 점.

    비 신뢰성 - 중간에 패킷이 사라지거나 순서대로 안오면 답이없음.

    프로그램 구분 - 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상이면. 

     

    TCP, UDP

    IP스택의 7계층이 있는데 응표세전네데물임. 응용, 표현, 세션, 전송, 네트워크, 데이터, 물리 영역. 이렇게 나눠짐.

    4계층은 응전네물 이렇게 나눌 수 있음. IP 패킷이 안에 TCP 패킷을 감싸고 있다. 한겹씩 덮어 보내고 받는 쪽에서는 하나씩 벗겨내며 정보를 확인한다. 

     

    TCP 특징 

    TCP는 Transmission Control Protocol 로 불리며 전송 제어 프로토콜이다.

     

    • 연결지향 - TCP 3 way handshake (가상 연결)

      SYN(접속요청) -> SYN+ACK -> ACK(요청수락)

    • 데이터 전달 보증

    • 순서 보장: 순서를 보장하기 때문에 신뢰할 수 있는 프로토콜이라고 한다. 

    • 현재는 대부분 TCP 사용

     

    UDP 특징 

    UDP는 User Datagram Protocol라고 하며 사용자 데이터그램 프로토콜이라고 한다.하얀 도화지라고 생각하면 된다. 백지 상태라 아무것도 없다. 쓰리웨이핸드쉐이크도 안하고, 데이터 전달 보장, 데이터 순서 보장 아무것도 안한다. 그럼 IP랑 다를게 없을것 같지? 맞다 근데 거기서 Port 랑 체크섬이 추가된 정도. 백지상태라 거기서 추가로 그릴 수 있다. 즉 최적화 시킬 수 있다는 말.

    UDP = IP+Checksum+Port

     

    PORT 

    포트는 항구라고 생각하면 된다. 패킷에는 출발지 IP, Port / 도착지 IP Port 가 있다. IP는 목적지 서버를 찾는 그 자체이고, Port 는 서버안에서 돌아가는 어플리케이션을 찾는 것이다. IP가 아파트라고 하면 Port 는 몇동 몇호인가 하는 문제이다. 

     

    DNS

    IP는 숫자로 이루어져 있어 찾기가 어렵다. 그리고 IP는 변경될 수도 있다. 그래서 사용하는게 DNS. Domain name system. 

     

    2. URI(Uniform Resource Identifier)

    Uniform: 리소스 식별하는 통일된 방식

    Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음)

    Identifier: 다른 항목과 구분하는데 필요한 정보

     

    URI URL URN 

    locator 이냐 name이냐의 차이. 

     

    3. HTTP(HyperText Transfer Protocol)

    HTTP 메시지에 모든 것을 전송한다. HTML, TEXT, 이미지, 파일, 영상 등등 

    TCP: http1.1, http2

    UDP: http3 

     

    특징은 클라이언트 서버 구조라는 점이다. 클라이언트는 서버에 요청을 보내고 서버는 응답을 한다.

    무상태 프로토콜이라는 점도 있다. 서버가 클라이언트의 상태를 보존하지 않는다. 상태를 보존하는 걸 Stateful이라고 하는데 이러면 골치아파진다. 항상 같은 서버가 유지되면서 클라이언트에 대한 정보를 가지고 있어야한다. 중간에 서버가 장애라도 나면 아주 조져버리는 거다. 그래서 상태를 유지하지 않는 Stateless 인거다.

    비연결성이기도 한데 빠른처리를 위해서 사용된다. 서버 자원을 효율적으로 사용할 수 있다. 대신 비연결성이면 단점은 쓰리웨이 핸드쉐이크부터 다 다시해야한다는 것이다. 

     

    HTTP 메세지 구조는 기본적으로 시작 라인 / 헤더 / 공백 / 바디 이렇게 나눠진다. 

    GET /search?q=hello&hl=ko HTTP/1.1
    Content-Type: text/html;charset=UTF-8
    Content-Length: 3423
    
    <html>
     <body>...</body>
    </html>

     

    4. HTTP API

    API URI 를 정하는 일은 되게 어렵다. 그럼 이것을 정할 때 중요한점은 무엇일까? 리소스가 제일 중요하다.

    리소스가 뭐냐면 예를 들어 모나미는 귀엽다가 있으면 여기서 모나미가 리소스이다. 그럼 URI를 정할 때 이 리소스만 적는 것이다.

    나머지 기능을 구별하는 것은 HTTP 메서드(행위) 를 사용하면 된다. GET POST PUT PATCH DELETE가 있다. 

     

    HTTP 메서드

    GET

    리소스 조회할 때 쓰인다. 서버에 전달하고 싶은 데이터는 쿼리를 통해 전달한다. 메세지 바디는 거의 사용하지 않음. 

    POST 

    요청데이터를 처리 할때 쓰인다. 메세지바디를 통해 서버로 요청데이터를 전달한다. 주로 전달된 데이터를 등록, 처리하는데 쓰인다. 

    PUT

    리소스를 대체한다. 있으면 대체하고 없으면 생성한다. 완전히 덮어버리는 거임. 중요한 건 클라이언트가 리소스를 식별한다는 점이다. 클라이언트가 리소스 위치를 100번! 이렇게 알고 URI를 지정한다. 그게 바로 POST랑 차이다. 그러니깐 PUT은 부분 수정이 불가하다. 

    PATCH 

    부분 수정을 하려면 패치가 필요하다. 

    DELETE

    는 말그대로 삭제. 

     

    HTTP 메서드의 속성

    안전 / 멱등 / 캐시가능안전 : 호출해도 리소스를 변경하지 않음. 멱등 : f(f(x))=f(x) 몇번을 호출해도 결과는 똑같다는 말임. get, put, delete 는 멱등이다. post 는 멱등이 아님. 두번 호출하면 같은 결과가 중복해서 발생.

     

    클라이언트가 서버로 데이터를 전송하는 방법

    4가지가 있다. 정적 데이터 조회 동적 데이터 조회 html form 을 활용한 데이터 전송http api 를 활영한 데이터 전송

     

    REST API 와 HTTP API 의 차이

    에 대한 김영한 님의 답변

     

    HTTP API와 REST API는 사실 거의 같은 의미로 사용됩니다.

    그런데 디테일하게 들어가면 차이가 있습니다.

    HTTP API는 HTTP를 사용해서 서로 정해둔 스펙으로 데이터를 주고 받으며 통신하는 것으로 이해하시면 됩니다.

    그래서 상당히 넓은 의미로 사용됩니다.

    반면에 REST API는 HTTP API에 여러가지 제약 조건이 추가됩니다.

    REST는 다음 4가지 제약조건을 만족해야 합니다.

    (https://ko.wikipedia.org/wiki/REST)

    - 자원의 식별

    - 메시지를 통한 리소스 조작

    - 자기서술적 메서지

    - 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어

    여러가지가 있지만 대표적으로 구현하기 어려운 부분이 마지막에 있는 부분인데요. 이것은 HTML처럼 하이퍼링크가 추가되어서 다음에 어떤 API를 호출해야 하는지를 해당 링크를 통해서 받을 수 있어야 합니다.

    그리고 이런 부분을 완벽하게 지키면서 개발하는 것을 RESTful API라고 하는데요. 실무에서 이런 방법으로 개발하는 것은 현실적으로 어렵고, 또 추가 개발 비용대비 효과가 있는 것도 아닙니다.

    그런데 이미 많은 사람들이 해당 조건을 지키지 않아도 REST API라고 하기 때문에, HTTP API나 REST API를 거의 같은 의미로 사용하고 있습니다. 하지만 앞서 말씀드린 것 처럼 엄격하게 위의 내용들을 모두 지켜야 REST API라고 할 수 있습니다.(하지만 다들 HTTP API를 REST API라고 이미 하고 있기 때문에, 누군가 REST API라고 하면 그냥 아~ HTTP API를 이야기 하는구나 라고 생각하고 들으시면 됩니다. 물론 엄격하게는 다릅니다.)

     

    https://www.inflearn.com/questions/126743

     

    HTTP API vs REST API - 인프런 | 질문 & 답변

    HTTP API를 기반으로 한 것이 REST API인가요? 무슨 차이가 있는지 궁금합니다. - 질문 & 답변 | 인프런...

    www.inflearn.com

     

    '전공 지식 > 네트워크' 카테고리의 다른 글

    HTTP 웹 기본 지식 02  (0) 2022.06.10

    댓글

Designed by Tistory.