11-22 08:28
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

기록을 합시다.

HTTP, Session, Cookie 정리 본문

공부/etc

HTTP, Session, Cookie 정리

울집고양이세마리 2023. 5. 20. 03:56

HTTP 

HTTP 개념

  • HTTP(Hypertext Transfer Protocol)이란 인터넷에서 데이터를 주고받기 위한 통신 규약으로, 웹에서 클라이언트와 서버 간에 데이터를 주고 받을 때 사용된다. 

HTTP 목적

  • 클라이언트와 서버 간에 웹 리소스(HTML 문서, 이미지, 동영상 등)을 주고 받는 것이다. 클라이언트는 웹 브라우저를 통해 서버에게 HTTP 요청을 보내고, 서버는 클라이언트에게 HTTP 응답을 전송해준다.  

HTTP 특징

  • 비연결성(Connectionless): 클라이언트가 요청을 보내고 서버가 응답을 보내면 연결이 끊긴다. 이런 특징으로 서버의 자원을 효율적으로 사용할 수 있다.
  • 무상태성(Stateless): HTTP 요청과 응답은 서로 독립적으로 이루어지기 때문에, 서버는 클라이언트의 이전 상태를 기억하지 않는다. 이런 특징으로 서버의 부하를 줄일 수 있다.
  • 요청 메서드(Method) : 클라이언트가 서버에 보내는 요청의 종류를 나타낸다. 대표적인 요청 메서드로는 GET, POST, PUT, DELETE가 있지만 GET, POST만 주로 사용한다. (관련 포스트 : rest - Is there any reason not to use HTTP PUT and DELETE in a web application? - Stack Overflow
  • 응답 코드(Status Code) : 서버가 클라이언트에게 보내는 응답의 상태이다. 
응답코드 의미
1xx 처리 중
100 계속
101 전환
2xx 성공
200 요청 성공
201 작성됨
202 허용됨
204 내용 없음
3xx 리다이렉션
300 다중 선택
301 영구적인 이동
302 임시적인 이동
304 수정되지 않음(캐시 사용)
4xx 클라이언트 오류
400 잘못된 요청
401 권한 없음
403 금지됨
404 찾을 수 없음
5xx 서버 오류
500 내부 서버 오류 
502 게이트웨이 오류
503 서비스를 사용할 수 없음
504  게이트웨이 시간 초과

HTTP 단점 

  • 보안성 부족 : HTTP는 평문으로 데이터를 주고받기 때문에 데이터가 노출될 확률이 있다. (HTTPS로 단점 보완 가능)
  • 상태 정보의 부재 : HTTP는 상태 정보를 유지하지 않기 때문에, 모든 요청에 대해 새로운 연결을 생성해야 한다.(Session, Cookie가 쓰이는 이유)
  • 성능 : HTTP는 단순한 프로토콜이기 때문에 대용량 데이터 전송 혹은 비동기적 통신에 적합하지 않다.
  • 대역폭 문제 : HTTP는 각가의 요청에 대해 별도 연결을 생성하기에, 대규모 트래픽이 발생하면 지연이 일어날 수 있다. (캐싱, CDN, 헤더 최적화, HTTP/2 혹은 HTTP/3 사용으로 문제 해결 가능)

HTTP 종류 

  • HTTP/1.1 : 현재 가장 널리 사용되는 HTTP 버전
  • HTTP/2 : 2015년에 발표된 HTTP 버전, 성능 개선 및 보안 강화 등의 특징을 갖고 있다. 
  • HTTP/3 : 기존의 TCP 대신 QUIC 프로토콜을 사용하여 전송 속도를 높인 특징을 갖고 있다. (한국에서는 네이버가 최초로 웹페이지에 HTTP/3을 도입했다고 한다.)

HTTP 요청 메시지/응답 메시지 

HTTP 요청/응답 메시지 형태

[HTTP 요청 라인]
[HTTP 요청 헤더]
[빈 줄]
[HTTP 요청 바디 => GET 요청 시에는 사용 안 하고, POST, PUT 요청 시에는 사용한다.]
  • HTTP 요청 라인에는 요청 메서드, 요청 URI, HTTP 프로토콜 버전이 포함된다. 
  • HTTP 요청 헤더에는 클라이언트의 요청에 대한 추가 정보를 포함한다. (GET 요청 시, 추가 정보를 헤더에 담는다. 바디에 담게 되면 404에러 뜨니 조심)
  • HTTP 요청 바디는 POST나 PUT과 같은 요청 메서드를 사용할 때 전송되는 데이터를 포함한다. 

Cookie

Cookie 개념 

  • 쿠키(Cookie)는 웹사이트가 클라이언트의 웹 브라우저에 저장하는 작은 데이터 조각이다. 주로 인증, 세션 관리, 개인화 등의 목적으로 사용된다. 쿠키는 클라이언트와 서버 간의 상태를 유지하고 정보를 교환하는 데 사용된다.

Cookie 목적

  • 세션 관리: 쿠키는 사용자의 세션을 식별하고, 로그인 상태를 유지하며, 사용자의 활동을 추적하는 데 사용된다.
  • 개인화: 쿠키는 사용자의 선호 설정이나 기타 사용자 지정 요소를 기억하여 개인화된 경험을 제공하는 데 사용된다.
  • 추적 및 분석: 쿠키는 사용자의 웹사이트 방문 기록을 추적하고 분석하여 웹사이트의 성능을 개선하거나 광고 타겟팅을 위한 정보를 수집하는 데 사용된다.

Cookie 특징 

  • 상태 저장: 쿠키는 클라이언트의 웹 브라우저에 저장되어, 클라이언트와 서버 간의 상태를 유지한다.
  • 작은 용량: 쿠키는 작은 크기의 데이터이기 때문에 브라우저의 로컬 저장소에 쉽게 저장할 수 있다. 
  • 제한된 수명: 쿠키는 만료 날짜 또는 수명을 가지며, 지정된 기간 이후에는 자동으로 삭제된다. 

Cookie 구현 방식 

  • 웹 서버는 HTTP 응답 헤더에 Set-Cookie 헤더를 포함하여 쿠키를 생성한다. 이 때, Set-Cookie 헤더는 쿠키의 이름, 값, 속성 및 옵션을 포함한다. 
  • 생성된 쿠키는 HTTP 응답 헤더를 통해 클라이언트의 웹 브라우저로 전송한다. 클라이언트는 쿠키를 웹 브라우저의 쿠키 저장소에 저장한다. 
  • 이후 클라이언트의 웹 브라우저는 동일한 웹 사이트에 대한 요청을 보낼 때마다, 자동으로 해당 웹 사이트와 관련된 쿠키를 HTTP 요청 헤더에 포함하여 서버로 전송한다.
  • 웹 서버는 클라이언트로부터 받은 HTTP 요청 헤더에서 쿠키를 읽어서 필요한 작업을 수행하며, 쿠키의 값을 활용하여 세션 관리, 사용자 식별, 개인화 등을 할 수 있다.

Cookie 단점 

  • 쿠키는 클라이언트 측에 저장되므로 개인정보 유출의 위험이 있다. 쿠키에는 사용자 식별 정보, 선호 설정, 검색 기록 등이 저장될 수 있으며, 이러한 정보가 불법적으로 탈취되거나 악용될 수 있다. '
  • 쿠키는 클라이언트와 서버 간의 통신을 위해 사용되므로 보안 취약점이 될 수 있다. 쿠키가 조작되거나 탈취되면 중간자 공격, 세션 하이재킹 등의 공격이 발생할 수 있다.
  • 용량 제한: 쿠키는 작은 크기의 데이터만 저장할 수 있기 때문에, 복잡한 정보나 대량의 데이터를 저장하기에는 제한이 있다. 큰 용량의 데이터를 저장해야 할 경우에는 다른 저장 방식을 고려해야한다. 

Session

Session 개념

  • Session은 웹 서버에서 클라이언트를 구분하고, 그 상태를 유지하기 위한 기술이다. 

Session 특징

  • 클라이언트별로 구분되어 데이터를 저장하고 유지한다.
  • 서버에 Session 데이터를 저장하기 때문에 요청을 빠르게 처리할 수 있다.
  • Session ID를 이용하기 때문에 클라이언트 정보를 암호화하고 유지한다.
  • 서버의 메모리를 이용하기 때문에, 많은 클라이언트가 접속하면 서버 부하가 일어날 수 있다. 

Session 구현 방식

  • Session은 대개 쿠키와 함께 사용된다. 클라이언트가 서버에 최초로 요청을 하면, 서버는 클라이언트를 식별할 수 있는 Session ID를 생성하고, 쿠키에 담아 응답한다.
  • 클라이언트는 이후 요청에 서버로부터 받은 SessionID가 들어있는 쿠키를 포함하여 서버에 요청하고, 서버는 클라이언트가 보낸 쿠키의 SessionID를 확인 및 Session 데이터를 참조해 사용자임을 식별하고 요청에 대한 응답을 보내준다.

Session 단점 

  • 세션은 대부분 서버에 저장되기 때문에 서버 메모리가 부족해질 수 있고, 또한 SessionID를 탈취하여 클라이언트 정보를 유출할 수 있다는 보안상의 문제가 있다. 

 

Spring을 공부하다가, 세션과 쿠키에 대한 지식이 매우 많이 부족한 것 같아서 공부하는 겸 한 번 정리해봤다..

특히 세션과 쿠키가 무슨 연관이 있는지 궁금했었는데, 이 포스트를 작성하면서 많이 이해한 것 같다. 

 

Comments