들어가며
웹 생태계는 반복되는 작업을 줄이는 데 최적화되어 있다. 사용자가 이전에 입력했던 정보, 방문했던 페이지, 열어봤던 이미지처럼 반복적으로 사용되는 데이터들은 종류와 특성에 따라 적절하게 저장하고, 필요한 순간에 다시 꺼내 쓰는 구조를 취한. 이걸 가능하게 해주는 대표적인 수단이 쿠키, 세션, 토큰, 그리고 캐시다.
쿠키란 무엇인가 ?
쿠키는 사용자의 브라우저에 저장되는 아주 작은 텍스트 조각이다.
이 정보는 사용자가 직접 가지고 있는 것이고, 서버가 아닌 사용자 쪽에 저장되는 만큼 서버는 별도로 기억할 필요가 없다.
대신, 중요하거나 민감한 정보는 쿠키에 저장하지 않는다.
쿠키는 조작되거나 탈취될 수 있기 때문에, 유출되도 문제되지 않는 정도의 정보만 담는 게 안전하다.
로그인 유지나 언어 설정, 테마 색상 같은 간단한 사용자 선호 정보는 쿠키에 담기 적절하다.
서버와 사용자의 관계
서버는 요청한 사용자가 누구인지 모른다. 누가 로그인하여 인증 인가 과정을 거쳤는지 모른다.
클릭을 하나 할 때마다 다시 로그인하는 것은 너무 번기롭기 때문에, 이것을 해결해주는 것이 세션이다. 사용자가 한 번 로그인하면 서버는 그 사람을 식별할 수 있는 세션 ID를 만들어 브라우저에 쿠키로 심어준다. 그리고 이 세션 ID와 연결된 사용자의 정보를 서버 메모리에 저장해둔다. 이후부터는 사용자의 요청마다 세션 ID가 함께 전달되고, 서버는 이 ID를 보고 누군지 알아챌 수 있다. 친구 목록을 불러오든, 게시글을 작성하든, 주문 내역을 확인하든 서버는 항상 세션 ID를 확인하고 적절한 사용자 데이터를 응답해준다.
세션 방식의 한계
하지만 세션 방식에는 구조적인 한계가 있다. 서버는 모든 로그인 사용자의 세션 정보를 메모리에 올려놓고 있어야 하며, 사용자가 늘어날수록 메모리 부담도 커진다. 수천, 수만 명이 동시에 접속하는 대형 서비스에서는 이 방식이 효율적이지 않다. 이때 등장하는 대안이 토큰 기반 인증이다.
토큰 기반 인증
토큰 방식에서는 서버가 사용자에게 로그인 성공 시 인증 토큰을 발급한다. 이 토큰은 수학적으로 검증 가능한 암호화 구조를 갖고 있어서, 서버는 이 토큰만 보고도 이게 자신이 발급한 유효한 것인지 확인할 수 있다. 즉, 더 이상 사용자의 로그인 정보를 메모리에 저장하지 않아도 된다. 사용자는 이 토큰을 쿠키나 로컬스토리지에 저장해두고, 요청 시마다 함께 전송하면 된다. 서버는 그 토큰이 유효한지만 확인하고 요청을 처리해주면 되기 때문에 확장성과 성능 면에서 유리하다.
토큰 기반 인증의 한계
한 번 발급된 토큰은 만료되기 전까지는 서버가 강제로 무효화시킬 수 없다.
그래서 사용자의 기기에서 로그아웃하거나, 관리자가 강제로 세션을 끊는 기능은 구현하기 까다롭다.
또한 토큰이 탈취당하면, 탈취자가 유효 기간 내에는 자유롭게 시스템을 사용할 수 있게 되는 문제가 생긴다.
이런 문제를 완화하기 위해 토큰 만료 시간을 짧게 설정하기도 한다.
또 다른 성능 최적화 방식: 캐시 (Cache)
또 다른 중요한 성능 최적화 방식으로 캐시(Cache)가 있다.
사용자가 웹사이트를 이용할 때 HTML, 이미지, 스크립트, 동영상 같은 수많은 리소스를 다운로드하게 되는데, 이 데이터를 매번 새로 내려받으면 시간과 네트워크 비용이 많이 든다.
그래서 브라우저는 이 리소스를 캐시에 저장해두고, 다음에 같은 페이지를 방문하면 서버로 요청하지 않고 브라우저 내부에서 바로 꺼내쓴다.
페이지 로딩 속도가 훨씬 빨라지고, 데이터 요금도 줄어든다.
결론
쿠키는 사용자 정보를 저장해서 로그인 같은 작업을 편하게 만들어주고, 세션은 서버가 사용자를 식별할 수 있도록 해준다.
토큰은 확장성과 성능을 확보하기 위한 인증 방식이고, 캐시는 데이터 낭비를 줄이고 로딩 속도를 높이는 데 목적이 있다.
각자 목적은 다르지만, 모두 사용자의 경험을 개선하고 시스템의 효율을 높이기 위한 수단이다.
'Backend' 카테고리의 다른 글
| JPA 4장 (5) | 2025.05.26 |
|---|---|
| JPA 5장 (0) | 2025.05.23 |
| 네이브 클라우드 서버 생성해보기 (0) | 2025.05.12 |
| 모놀리와 MSA의 차이점 (0) | 2025.05.11 |