신비한 개발사전

쿠키, 세션, JWT 토큰으로 사용자 세션 유지 본문

CS

쿠키, 세션, JWT 토큰으로 사용자 세션 유지

jbilee 2024. 11. 15. 20:08

HTTP 통신은 무상태성이다—클라이언트와 서버가 대화를 완료하고 HTTP 연결을 끊으면 서버는 더이상 클라이언트에 대해 알고 있지 않는다. 따라서 로그인한 사용자 정보 등의 상태를 따로 저장해야 하는데, 이때 쿠키나 세션 같은 기술을 사용한다.

 

쿠키 (Cookie)

쿠키는 클라이언트의 로컬 환경에 저장하는 텍스트 정보로, 각 브라우저별로 쿠키를 저장한다. (크롬에서 저장한 쿠키는 파이어폭스에서 사용할 수 없다) HTTP 요청에 쿠키가 들어있으면 서버는 해당 쿠키의 내용을 읽어 클라이언트에 대한 정보를 알 수 있다.

 

쿠키는 다음과 같은 특징을 갖고 있다:

  • 저장 형태: 쿠키의 데이터는 key=value 형식으로 저장된다 (예: name=Bob)
  • 전송 방식: 매 HTTP 요청에 자동으로 실려서 전송된다
  • 쿠키가 파기되는 만료 시간을 설정할 수 있다
  • 속성: HttpOnly, Secure, SameSite 등 여러 속성으로 쿠키의 활용 범위를 제어하고 각종 사이버 공격으로부터 방어한다
    • Domain: 특정 도메인에 한해서만 쿠키가 전송되도록 제한한다
    • HttpOnly: 자바스크립트가 쿠키에 접근할 수 없도록 한다
    • Secure: HTTPS 프로토콜에서만 쿠키가 전송되도록 제한한다
    • SameSite: 서드파티 쿠키 전송을 어느정도로 허용할 것인지 제어한다

쿠키 활용 예시:

  1. 클라이언트단에서 사용자가 로그인을 시도한다.
  2. 로그인이 성공하면 서버는 사용자가 로그인한 상태라는 정보를 담은 쿠키를 생성해 응답 헤더(Set-Cookie)에 넣어 전달한다.
  3. 응답을 받은 브라우저는 헤더에 들어있는 쿠키를 저장한다.
  4. 사용자가 로그인이 필요한 페이지에 접근하면 브라우저의 쿠키가 HTTP 요청의 Cookie 헤더에 담겨 서버로 전송된다.
  5. 서버는 요청에 들어있는 쿠키를 검증해 페이지 접근을 허용 또는 제한한다.

 

세션 (Session)

세션은 쿠키처럼 상태를 유지하기 위해 저장하는 데이터로, 클라이언트가 아닌 서버에 저장된다. 서버에서 관리하기 때문에 쿠키보다 보안성이 높아서, 중요한 정보를 임시로 저장할 때 사용한다.

 

세션은 서버 메모리에 key-value로 이루어진 Map의 형태로 저장된다. 데이터를 저장하면 생성된 세션 ID를 쿠키에 담아 클라이언트한테 응답하고, 이후 클라이언트는 요청을 보낼 때마다 쿠키에 세션 ID를 포함시킨다.

 

세션도 결국 쿠키를 활용하긴 하지만 세션은 사용자에 대한 정보를 매번 DB에서 조회할 필요가 없다는 장점이 있다. 또한 쿠키는 4KB라는 데이터 크기 제한이 있는데, 세션은 key-value 형태로 데이터베이스에 저장하다보니 value값에 더 큰 데이터도 저장할 수 있다.

 

JWT 토큰 (JSON Web Token)

JWT 토큰은 JSON 형식으로 정보를 안전하게 전송하기 위한 토큰 기반 인증 방식이다. 주로 웹 애플리케이션에서 사용자 인증 및 권한 부여를 위해 사용되며, 서버와 클라이언트 간의 데이터를 안전하게 교환할 수 있도록 설계됐다.

 

JWT는 암호화된 서명을 포함해 데이터의 무결성을 보장하기 때문에 데이터가 변조되지 않았음을 확인할 수 있다.

 

JWT의 구성 요소:

  • 헤더(Header): 토큰의 타입과 해싱 알고리즘(HS256 등) 정보를 포함
  • 페이로드(Payload): 사용자 정보와 같은 실제 데이터
  • 서명(Signature): 헤더와 페이로드를 결합한 후 비밀 키를 사용해 서명한 값 (토큰의 무결성을 확인하는 데 사용)

'CS' 카테고리의 다른 글

UDP 프로토콜  (0) 2024.11.22
웹 리소스 전송 관련 정책  (0) 2024.11.16
SSL/TLS 프로토콜의 암호화 과정  (0) 2024.11.12
DNS가 뭔가요?  (0) 2024.11.06
HTTP 버전에 대해 알아보기  (0) 2024.11.04