
Session
세션이란 유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구
- 세션은 특수한 ID 값으로 구성되어 있다.
- 세션은 서버에서 생성되며 클라이언트에서 쿠키를 통해 저장된다.
- 클라이언트에서 요청을 보낼때 세션 아이디를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. 따라서 요청때마다 매번 아이디와 비밀번호를 물어볼 필요가 없다.
- 세션 아이디는 데이터베이스에 저장되기 때문에 요청이 있을때마다 매번 데이터베이스를 확인해야 한다.
- 서버에서 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.
- 데이터베이스에 세션을 저장해야하기때문에 Horizontal Scaling이 어렵다. 수평 확장(horizontal scaling)은 시스템이나 애플리케이션의 성능을 향상시키기 위해 여러 장치나 서버 인스턴스를 추가하는 것을 의미한다.
JWT Token
JWT Token이란 유저의 정보를 Base 65로 인코딩된 String 값에 저장하는 도구다.
- JWT Token은 Header, Palyload, Signature로 구성되어 있으며 Base64로 인코딩 되어있다.
- JWT Token은 서버에서 생성되며 클라이언트에서 저장된다.
- 클라이언트에서 요청을 보낼 때 JWT Token ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. 이 또한 요청마다 매번 아이디와 비밀번호를 물어볼 필요가 없다.
- JWT Token은 데이터베이스에 저장되지않고 Signature 값을 이용해서 검증할 수 있다. 그래서 검증할때마다 데이터베이스를 매번 들여다볼 필요가 없다.
- 정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다.
- 데이터베이스가 필요없기때문에 Horizontal Scaling이 쉽다.
Session 생성 방식

JWT Token 생성 방식

Session vs JWT Token

Access Token and Refresh Token
Access Token과 Refresh Token 모두 JWT 기반이다.
-
Access Token은 API 요청을 할 때 검증용 토큰으로 사용된다. 즉, 인증이 필요한 API를 사용할때는 꼭 Access Token을 Header에 넣어서 보내야한다. 예) 유저 정보 수정, 회사 채용공고 지원 인원 확인 등
-
Refresh Token은 Access Token을 추가로 발급할 때 사용된다. Access Token을 새로고침하는 기능이 있기 때문에 Refresh Token이라고 부른다.
-
Access Token은 유효기간이 짧고 Refresh Token은 유효기간이 길다.
-
자주 노출되는 Access Token은 유효기간을 짧게해서 Token이 탈취되어도 해커가 오래 사용하지 못하도록 방지할 수 있다.
-
상대적으로 노출이 적은 Refresh Token의 경우 Access Token을 새로 발급받을때만 사용되기 때문에 탈취 가능성이 적다.