[백엔드 모의면접] JWT 로그아웃은 어떻게 구현할까?
안녕하세요.
인프랩에서 모의면접 서비스를 개발/운영하고 있는 약풍이라고 해요.
오늘 빼빼로 많이 받으셨나요?
...오늘도 백엔드 면접질문을 드려보도록 하겠습니다 💪
오늘의 백엔드 질문
로그인에 JWT를 사용했다면, 로그아웃은 어떻게 구현하시겠어요?
이력서나 포트폴리오에 JWT 기반 인증을 구현했다고 적은 분들이 많은데, 이 질문이 따라붙을 수 있어요.
JWT는 서버가 상태를 들고 있지 않아도 된다는 점이 장점인데, 로그아웃이나 계정 정지는 반대로 "이 토큰은 이제 유효하지 않다"는 상태를 어딘가에 두라고 요구하거든요.
그래서 이 질문은 라이브러리 사용 경험을 묻는다기보다, JWT의 장점과 그 장점 때문에 생기는 제약을 같이 이해하고 있는지 보는 질문이에요.
답변 키포인트
JWT는 서명만 검증하면 통과하므로, 발급된 토큰은 만료 전까지만 유효하다는 점
access token의 만료를 짧게 두고 refresh token으로 갱신하는 구조라는 점
refresh token은 서버에 저장하기 때문에 폐기가 가능하다는 점
차단 목록(블랙리스트)을 두는 방식과, 그 순간 조회가 필요해진다는 점
비밀번호 변경이나 계정 정지처럼 즉시 끊어야 하는 경우의 처리방식
토큰을 어디에 저장하고, 탈취됐을 때 피해 범위가 어디까지인지
클라이언트에서 토큰만 지우면 안되는 이유
로그아웃을 이야기할 때 "클라이언트에서 토큰을 지운다"에서 끝나면 아쉬운 답변이에요.
이미 발급된 토큰을 누가 따로 복사해뒀다면 만료 시각까지는 그대로 통과하니까, 화면에서 사라진 것과 무효화된 것은 다르거든요.
그래서 access token의 수명을 어느 정도로 잡았는지, refresh token은 서버에서 폐기할 수 있게 저장해뒀는지, 즉시 차단이 필요한 상황에는 어떻게 조치할 수 있는지를 같이 설명할 수 있게 준비하는 게 좋아요.
면접에서는
면접에서 이 질문을 받았다면 "JWT는 서버 조회 없이 검증되도록 만든 구조라, 발급된 토큰을 중간에 무효화하는 것은 원래 설계와 반대 방향의 요구"라는 식으로 답변을 시작하면 좋아요.
그다음에는 아래 내용까지 이어서 설명하면 돼요.
access token은 수명을 짧게 두고, 로그아웃처럼 서버에서 토큰을 무효화해야 하는 처리는 refresh token을 통해 관리한다.
로그아웃은 refresh token을 지워 갱신을 끊는 것으로 처리하고, access token은 남은 수명만큼은 유효하다고 인정한다.
다만 계정 정지처럼 즉시 끊어야 하는 건은 조회 비용을 감수하고 차단 목록을 둔다.
여기까지 말하면 "그러면 세션을 쓰는 게 낫지 않냐"는 질문이 따라올 수 있어요.
이때는 서버를 여러 대로 늘릴 때의 세션 공유 비용과 매 요청 조회 비용을 비교해서 선택한 것이라고 연결해주면 더 좋아요.
꼬리질문
다음의 꼬리질문도 생각해보세요.
세션 방식 대신 JWT를 선택한 이유는 무엇인가요?
클라이언트에서 토큰을 삭제하는 것만으로 로그아웃이라고 볼 수 있나요?
access token의 만료 시간은 어떤 기준으로 정하시겠어요?
차단 목록을 서버에 두면 JWT의 어떤 장점이 줄어드나요?
refresh token이 탈취된 것을 어떻게 감지하고 끊으시겠어요?
관리자가 특정 사용자를 지금 즉시 차단해야 한다면 어떻게 설계하시겠어요?
AI 모의면접으로
나의 면접 스킬을 체크해보세요
프론트엔드,백엔드,FDE 기술면접부터 문화면접까지,
개발자 면접 준비를 실전처럼 연습해 보세요.
답변 0





