1-1. 데이터베이스에 저장
: 이 방식은 안전하며 사용자마다 고유한 리프레시 토큰을 발급하고 관리하는 데 사용됨. 리프레시 토큰이 사용될 때마다 데이터베이스에서 해당 토큰을 검색하여 검증함.
👉 이번 알파프로젝트에서는 리프레시 토큰을 MySQL 데이터베이스 에 저장함. prisma를 사용해서
// 리프레시토큰을 DB에서 조회
prisma.users.findUnique() 메서드
const userId = decodedToken.userId;
const user = await prisma.users.findUnique({
where: { userId: +userId },
select: { refreshToken: true },
});
👉 이렇게 db에 저장된 리프레시토큰과 클라이언트에서 제공된 리프레시 토큰이 일치하는지 확인해서 리프레시 토큰의 유효성을 검증한다.
1-2. 메모리에 저장(ex. 캐시서버)
: 이 방식은 빠르게 액세스할 수 있지만, 서버가 재시작되거나 다운되면 리프레시 토큰 정보가 손실될 수 있음. 이 방식은 고사용성을 가진 캐시시스템(ex.Redis)을 사용할 때 특히 유용함
👉 어떤 식으로 데이터를 저장할 지를 고민해보는 것도 중요한 일, 지금 프로젝트의 규모가 작고 접속자 수도 작은 상태에서 MySQL을 사용하는 것만드로도 충분히 가능하다고 생각해서 이번에는 1-1 방식으로 진행해보려고 한다.
Refresh Token은 Access Token의 문제점을 방지하기 위하여 생겨났습니다.