Misc/백엔드

HTTP

foreverWon 2024. 6. 25. 18:42
목차

    1. 정의

    1) HyperText Transfer Protocol

    주로 HTML과 같은 HyperText 문서를 주고받기 위해 만들어졌고, 최근에는 HTML뿐 아니라 모든 웹 관련 API 통신에 이용되는 통신 프로토콜이다.

     

    2) HTTP 특징

    • 비연결성(Connectionless): 매 요청마다 다시 연결 맺음
    • 무상태성(Stateless): 클라이언트의 상태를 기억하지 않음

     

    2. HTTP 구조

    1) 요청 메시지

    • 시작 라인(start-line)
      • HTTP method
        • GET, POST, PATCH, PUT, DELETE == READ, CREATE, UPDATE(part), UPDATE(all), DELETE
        • 서버에서 요청을 Routing할 때 사용됨
      • URL
        • 리소스를 요청하는 주소(Locator)
      • ptotocol version
        • http 버전
        • HTTP/1.1을 가장 많이 사용하며 최근 HTTP/2의 사용이 늘어나는 추세
    • 헤더(header)
      • 요청에 대한 정보, 응답에 대한 요청, 인증 정보, 접속 정보 등 요청에 필요한 다양한 요소를 담는 공간
      • key, value로 구성
    • 공백 라인(empty-line): Header와 Body를 구분하는 부분
    • 바디(body)
      • 메시지가 들어감
      • Header의 Content-Type과 반드시 Type을 맞춰줘야 함
      • HTTP Method 별로 GET과 DELETE는 body를 쓰지 않으니 주의!

    2) 응답 메시지

    요청 메시지와 전체 구조는 똑같으나 그 내용에 차이가 있다.

    • 시작 라인(start-line)
      • protocol version
      • HTTP Status code
      • HTTP Status
        • 요청에 대한 응답 상태
        • 200번대는 성공, 400번대는 사용자 요청에러, 500번대는 서버에러를 의미
    • 헤더(header)
      • 서버에 대한 정보를 알려줌
      • 사용자의 cookie나 session 초기화에 이용

    3. Cookie

    웹 브라우저에 Cookie라는 데이터를 저장하여 HTTP 상태를 저장하는 방식이다.

    서버에서 Set-Cookie를 헤더에 담아서 리퀘스트를 하면 웹 브라우저는 해당 정보를 Cookie로 저장한다. 그리고 다음 HTTP 요청 때는 해당 Cookie를 Header에 추가해서 보내는 방식으로 동작한다.

     

    Cookie는 웹 브라우저에 저장되는 정보이므로 브라우저를 나가도 해당 데이터는 유지된다. 따라서 자동로그인 기능, 로그인 없는 장바구니 저장, 일주일간 보지 않기, 마케팅 정보 등에 사용된다.

    그러나 Cookie의 정보는 브라우저 상에 저장되기 때문에 보안에 민감한 정보나 노출되면 안되는 개인정보, 인증정보 등은 쿠키로 저장하지 않는 것이 좋다.

     

    4. Session

    서버상에 데이터를 저장하는 방식이다.

    사용자가 접속(인증)을 하면 서버는 사용자를 식별할 수 있는 SessionId를 생성하고 메모리에 SessionID와 사용자 상태를 저장한다. 그 후  Set-Cookie를 통해 jsessionid에 SessionId를 담아 리턴해주고, 다음 응답마다 쿠키에 SessionId를 같이 보내면 서버는 SessionId 별로 저장된 정보를 확인할 수 있다.

    Session은 서버에 데이터가 저장되기 때문에 사용자에게 노출될 확률이 적다. 따라서 노출되거나 수정되면 안되는 정보가 저장된다. 또한 보안을 위해 세션 유지시간을 적절히 조절하는 것이 중요하다.

    728x90

    'Misc > 백엔드' 카테고리의 다른 글

    NodeJs Backend REST API (3) - Prisma  (0) 2024.07.13
    NodeJs Backend REST API (2) - Fastify  (0) 2024.07.03
    NodeJs Backend REST API (1) - Typescript  (0) 2024.07.03
    API  (0) 2024.06.25
    백엔드의 전체 흐름  (0) 2024.06.24