토큰(Token)

토큰은 로그인을 할 때 도움을 주며, 주로 사용자를 인증하거나 권한을 부여하는 데에 활용됨.
대포적으로 액세스 토큰과 리프레시 토큰이 있음.
- 액세스 토큰(Access Token): 사용자가 로그인을 한 후 서버로부터 받는 토큰으로, 일정 기간(설정한 만큼)동안 유효함. 이를 이용해 사용자는 서버에 자원을 요청하거나 특정 작업을 수행함.
- 리프레시 토큰(Refresh Token): 액세스 토큰의 만료 시간이 지난 경우, 리프레시 토큰을 사용하여 새로운 액세스 토큰을 얻을 수 있음.
토큰안의 정보는 누구나 볼 수 있음.
로그인 할 때의 토큰
사용자가 웹 앱에 로그인을 하면, 서버는 사용자에게 액세스 토큰과 리프레시 토큰을 제공함. 토큰은 클라이언트가 가지고 있음.
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
사용자는 이제 액세스 토큰을 사용하여 보호된 리소스에 접근함.
그리고 매 요청마다 헤더에 액세스 토큰을 담아 서버에 요청을 보냄.
authorization token(국룰)
토큰의 장단점
- 장점:
- 토큰만으로 사용자 인증이 가능함(서버에 따로 저장할 필요 x).
- 토큰엔 key가 있고, 이거를 모르면 똑같은 토큰을 만들 수 없음(안전).
- 분산 시스템의 효율성: 토큰은 서버에 저장하지 않고 클라이언트 측에서 관리하므로, 분산 시스템에서 유용함.
- 확장성: 토큰 기반의 시스템은 서버 측에서 세션을 관리할 필요가 없어서 확장성이 좋음.
- 독립성: 각 토큰은 자체적으로 유효성을 가지고 있으며, 이로 인해 서버 간의 독립성이 확보됨.
- 단점:
- 동시 접속과 강제 로그아웃이 불가능함.
- 보안 이슈: 토큰은 클라이언트에 저장되기 때문에 안전한 저장소가 필요하고, 이가 탈취되면 보안 문제가 발생할 수 있음.
- 토큰 크기: 일부 토큰은 크기가 크므로, 매번 요청할 때마다 이를 전송하는 데에 부담이 있을 수 있음.
세션(session)
세션은 주로 서버측에서 사용자 상태를 유지하고 관리하는 데에 활용됨. 사용자가 웹 앱에 접속하면 서버는 해당 사용자를 식별하는 세션을 생성하고 관리함.
세션을 사용하면 사용자가 로그인한 상태인지 여부를 파악하거나 사용자의 장바구니 같은 상태를 유지할 수 있음.
각 세션은 고유한 식별자(id)를 가지고 있으며, 이 식별자를 통해 사용자의 상태 및 정보를 서버에서 관리함.
로그인 할 때의 세션
사용자가 웹 앱에 로그인을 하면, 서버는 해당 사용자에 대한 세션을 생성하고, 서버측에서 사용자의 상태 및 정보를 저장하는 데에 사용함.
- ex) 장바구니에 물건을 추가하거나 사용자가 페이지를 이동할 때마다 세션을 사용해 사용자를 식별하고 관련 정보를 제공함.
세션의 장단점
- 장점:
- 동시 접속을 막을 수 있음.
- 보안: 세션은 서버 측에서 관리되기 때문에 클라이언트에 저장되는 토큰보다 안전함.
- 간결함: 세션은 클라이언트에 작은 식별자만 저장하면 되므로 토큰보다 더 경량화 됨
- 만료 관리 용이성: 세션은 서버측에서 만료 시간을 쉽게 관리하고 조절할 수 있음.
- 단점:
- DB에 클라이언트의 id를 가지고 있고, 모든 요청에 대해 DB를 다 뒤져봄(세션 쪽도 다른 DB도). 그렇기 때문에 느림.
- 서버 부하: 서버에 세션을 저장하고 관리하는 것은 부하를 유발할 수 있음.
- 분산 환경 어려움: 서버 상태를 유지하는 것은 분산 환경에서 어려울 수 있음.
- 확장성 제약: 세션 기반 시스템은 서버 상태를 관리해야 하므로 일부 확장성 제약이 있을 수 있음.
결론
토큰과 세션 중 어떤 것을 선택할지는 프로젝트의 요구 사항, 보안 정책, 성능 등을 고려해야 함.
보다 분산된 시스템에서는 토큰을, 보안이 중요한 경우나 서버 부하에 민감한 상황에서는 세션을 선택하는 것이 일반적임.
물론 둘을 혼합하여 사용하기도 함.

이제 누가 물어보면
- 토큰은 클라이언트에 저장되며, 사용자 인증 및 권한 부여에 활용되며, 서버 간 독립성이 높음.
- 세션은 서버에 저장되며, 사용자 상태를 유지하고 관리하여 보안성이 강화되지만, 서버 부하가 발생할 수 있음. 선택은 프로젝트 요구에 따라 이루어져야 함.
이라고 대답함.