Record

로그인 ( 세션 vs 쿠키 vs 토큰) 알아보자 본문

CS

로그인 ( 세션 vs 쿠키 vs 토큰) 알아보자

now-record 2026. 5. 5. 21:56
반응형

최근 마케팅하는 친구가 어플리케이션 하나를 만들어보자고 제안해서 바이브 코딩으로 어플리케이션을 만들었다. 

근데 필요로 하는 기능 중 로그인 기능이 있어서 대충알고 있는 로그인 방식에 대해서 공부해보고 지금 우리 어플리케이션에

어떤 방식으로 넣는 것이 좋을지 고민해보려고 공부할겸 같이 포스팅으로 남겨 놓으려고 한다, 

 

로그인을 왜 해야할까? 

우리가 원하는 방식은 해당 사용자만이 가지고 있는 정보와 권한이 필요하다. 예를들어 A사용자와 B사용자의 정보가 다르기 때문에 A사용자의 정보를 저장해놓고 사용하기 위함이다. 그러나 HTTP 통신은 요청(Request) -> 응답(Response) 이 종료되면 stateless(상태가 유지되지 않은) 한 특징 때문에 연결을 끊는 처리 방식이다. 


그렇기 때문에 로그인과 같은 일을 할 때, '누가' 로그인 중인지 상태를 기억하기 위해 쿠키, 세션, 토큰을 사용한다.

 

 

  • 쿠키 → 브라우저에 저장되는 데이터 (로그인 정보를 담을 수도 있는 저장소)
  • 세션 → 서버가 사용자 상태를 기억
  • 토큰 (JWT) → 서버 없이도 인증 가능한 방식

이렇게 이해하면 쉽다. 

 

1. 세션방식

클라이언트가 아이디와 비밀번호로 로그인을 요청하면, 서버는 사용자 정보를 확인한 뒤 해당 로그인 상태를 저장하는 세션을 생성한다. 그리고 서버는 이 세션을 식별할 수 있는 세션 ID를 클라이언트에게 전달하고, 클라이언트는 이를 쿠키에 저장한다.

이후 클라이언트가 서버에 요청을 보낼 때 브라우저는 쿠키에 저장된 세션 ID를 자동으로 함께 전송한다.
서버는 전달받은 세션 ID를 세션 저장소에서 조회하여, 해당 사용자가 로그인된 사용자인지 확인하고 요청을 처리한다.

 

 

 

그리고 서버에는 이세션 아이디의 정보를 저장하고 있기 때문에 로그아웃 하면 이 세션아이디를 삭제해줘야한다. 

하지만 사용자가 로그아웃하지 않고 창을 닫으면 서버는 즉시 알 수 없다. 그래서 세션 만료 시간, 쿠키 만료 시간,
마지막 활동 시간 기준 만료를 설정해서 해결한다.

 

2.토큰방식

토큰 방식은 서버가 상태를 저장하지 않고, 토큰 자체로 사용자를 인증하는 방식이다.

클라이언트가 로그인 요청을 보내면, 서버는 사용자 인증 후 서명이 포함된 JWT 토큰을 발급한다. JWT는 json web token으로 인증에 필요한 정보를 암호화시킨 json토큰을 의미한다. 
클라이언트는 이후 요청 시 해당 토큰을 HTTP 헤더(Authorization)에 담아 전송하며, 서버는 토큰의 서명과 만료시간을 검증하여 사용자를 인증한다. JWT 방식은 서버가 로그인 상태를 저장하지 않기 때문에, 로그아웃 여부를 서버가 직접 관리하지 않고 토큰의 만료시간을 통해 인증 상태를 제어한다.

 

 

 

3. 선택기준 

기준 세션 JWT
상태관리 서버 없음
확장성 낮음 높음
로그아웃 쉬움 어려움
보안제어  쉬움 까다로움 

 

 

공부를 하고 나니 현재 내 서비스의 구조를 세션으로 만들어놨는데 세션의 경우 계속 db를 조회해야 해서 db요청량이 많아서 서비스가 느리다고 판단하고 있다. 그래서 JWT구조도 고려를 해볼 사항인거 같다. 다만 로그아웃/차단/권한 변경 제어는 세션보다 까다로워지기 때문에 조금 더 고민을 하고 변경해야할 것 같다. 

'CS' 카테고리의 다른 글

운영체제에 관한 고찰  (0) 2026.06.13
VPN 심화 (site-to-site)  (0) 2026.04.06
VPN  (0) 2026.03.26
Graph-DB  (0) 2026.03.17
암호화 , SSL 실습  (0) 2026.02.20