Playcloud8
개발자도구

세션과 토큰, 로그인 상태는 어떻게 유지될까

2026-07-13  ·  조회 36
HTTP는 원래 요청 하나하나가 서로 독립적이어서, 별다른 장치가 없다면 서버는 방금 로그인한 사용자가 다음 요청을 보냈을 때 그 사람이 누구인지 전혀 알 수 없습니다. 이 문제를 해결하기 위해 널리 쓰이는 두 가지 방식이 세션 기반 인증과 토큰 기반 인증입니다. 세션 방식은 로그인에 성공하면 서버가 그 사용자의 정보를 서버 메모리(또는 Redis 같은 별도 저장소)에 저장하고, 클라이언트에게는 그 정보를 찾을 수 있는 짧은 식별자(세션 ID)만 쿠키로 내려줍니다. 이후 요청마다 브라우저가 이 쿠키를 자동으로 함께 보내면, 서버는 세션 ID로 저장해둔 사용자 정보를 찾아 누구의 요청인지 파악합니다. 토큰 방식(대표적으로 JWT)은 반대로 사용자 정보 자체를 암호화 서명이 붙은 토큰 안에 담아 클라이언트에게 통째로 내려줍니다. 서버는 이후 요청이 들어올 때마다 이 토큰의 서명이 유효한지만 검증하면 되므로, 세션처럼 서버 메모리에 사용자별 정보를 따로 저장해둘 필요가 없습니다. 이 덕분에 서버를 여러 대로 늘려도 서버 간에 세션 정보를 동기화할 필요가 없어, 수평 확장에 유리하다는 장점이 있습니다. 다만 토큰 방식은 한 번 발급된 토큰을 로그아웃 시점에 서버가 강제로 무효화하기 어렵다는 단점이 있습니다. 토큰 자체에 만료 시간이 있지만, 그 전에 탈취당했을 경우 서버가 즉시 차단하기 까다롭습니다. 그래서 실무에서는 토큰의 유효 기간을 짧게 잡고, 별도의 갱신 토큰으로 주기적으로 재발급하는 방식을 함께 사용하는 경우가 많습니다. 두 방식 모두 누가 요청을 보냈는가를 확인한다는 목적은 같지만, 사용자 정보를 어디에 두고 어떻게 검증하느냐에서 근본적인 설계 철학이 갈립니다. 서비스의 규모와 서버 구성에 따라 적합한 방식을 선택하는 것이 중요합니다.