HTTP와 Cookie와 Session

Jin·2024년 6월 17일
1

로그인 구현하기

목록 보기
1/2
post-thumbnail

요즈음 JWT로 로그인 기능을 구현하고 있다.
JWT에 대해서 쓰려고 하는데, 먼저 쿠키와 세션에 대해서 설명하고 들어가면 좋을 거 같아서 작성한다.


Http 프로토콜

HyperText Transfer Protocal

  • 웹 브라우저와 웹 서버 간에 데이터를 주고받기 위한 프로토콜
  • 클라이언트-서버 모델을 기반
  • HTML 문서, 이미지, 비디오 등 리소스를 전송하는데 사용
  • HTTP는 TCP/IP 프로토콜 위에서 작동하고 포트는 보통 80을 사용

HTTP의 주요 특징

  1. 비연결성 (connectionless)
    비연결성은 클라이언트가 서버와 한 번 연결을 맺은 뒤,
    클라이언트의 요청에 대해서 서버가 응답하면 맺은 연결을 끊어 버린다.
    = 각 요청 간에 상태를 유지하지 않는다.
    즉, 서버는 각 요청을 독립적으로 처리한다.
  • 장점: 연결을 계속 유지하지 않아서 리소스가 줄어든다.
  • 단점: 동일한 클라이언트가 요청해도 매번 새로게 해야해서 오버헤드가 발생한다.
    -> KeepAlive을 사용해서 해소할 수 있지만 메모리 많이 먹는다.
  1. 무상태성 (stateless)
    비연결성으로 인해 서버는 클라이언트에 대한 상태나 정보가 없고
    그렇기 때문에 클라이언트의 상태를 모른다.

클라이언트의 상태를 모르기 때문에 로그인하면 그것에 대한 인증을 매번 새로게 받아야한다.

이를 보완하기 위해 상태를 저장할 수 있는 쿠키와 세션을 사용하는 것이다.

쿠키(Cookie)

쿠키는 클라이언트의 브라우저에 저장되는 작은 데이터 조각이다.

쿠키의 주요 특징

  1. 클라이언트 사이드 저장
    쿠키는 key-value형식으로 구성된 string으로 클라이언트의 브라우저에 저장된다.
  2. 데이터 저장
  3. 유효 기간
    쿠키는 유효 기간을 설정할 수 있다.
    브라우저마다 정책이 다르다. 사파리의 경우 7일(왤케 짧냐?), 크롬의 경우 변경하면 최대 400일 정도
  4. 보안
    쿠키는 사실 보안성이 세션에 비해 약하다.
    그렇기 때문에 로그인 인증과 같은 보안성이 필요한 곳에는 권장되지 않는다.
    HttpOnly와 Secure속성을 사용하여 https 연결에만 쿠키가 전송되도록 보안을 강화할 수 있다고는 한다.

세션(Session)

세션은 서버 측에서 관리되는 상태 정보다.

세션의 주요 특징

  1. 서버 사이드 저장
    세션 정보는 서버에 저장된다.
    클라이언트를 식별하기 위해서 세션 ID가 사용된다.
  2. 단기 저장
    보안을 위해 일반적으로 특정 기간 동안(브라우저 활성) 활성화되며, 사용자가 일정 시간 동안 활동이 없으면(브라우저 종료) 만료됨
  3. 데이터 저장
  4. 보안
    세션은 당연히 서버에 저장되기 때문에 쿠키에 비해 비교적 보안이 높다.
    세션 ID가 털리면 그딴거 없다.
    그러기 위해서 https를 사용해서 전송될 때 보안을 강화해야 한다.

세션과 쿠키의 차이점

구분쿠키 (Cookie)세션 (Session)
저장 위치클라이언트 측 브라우저에 저장서버 측에 저장
유효 기간설정된 유효 기간 동안 유지일반적으로 브라우저 세션 동안 유지, 일정 시간 동안 활동이 없으면 만료
데이터 저장작은 데이터 조각, 텍스트 형식(Text)다양한 형태의 데이터 저장 가능(Object)
보안민감한 정보 저장 시 보안 위험 있음서버 측에 저장되어 상대적으로 보안이 높음
사용 예사용자 언어 설정, 자동 로그인 정보, 광고 트래킹 정보로그인 상태 유지, 장바구니 정보, 사용자 프로필 정보
전송 방식HTTP 요청 시 자동으로 서버에 전송세션 ID를 쿠키나 URL 파라미터를 통해 전달
용량 제한일반적으로 4KB 이하서버 메모리에 저장, 용량 제한 없음

참고

https://victorydntmd.tistory.com/286
https://hstory0208.tistory.com/entry
https://hstory0208.tistory.com/entry

profile
go-getter

0개의 댓글