어떻게 인증할 것인가

od·2025년 3월 30일

System Design

목록 보기
1/10

세션 기반 인증

세션 기반 인증은 데이터베이스에 인증 정보를 저장하고 관리하는 방식입니다.
이 방식은 사용자 정보를 언제든 변경할 수 있으며, 로그아웃 시 인증 정보를 삭제하기만 하면 되므로 관리가 간편합니다.
그러나 권한이 필요한 리소스에 접근할 때마다 데이터베이스를 조회해야 하므로 네트워크 비용이 발생하고 서버 부하가 증가할 수 있습니다.
즉시 로그아웃 처리가 필요한 금융 서비스에 적합한 인증 방식입니다.

인증은 다음의 순서로 진행 됩니다.

  • 클라이언트가 로그인 정보를 서버에 전송합니다.
  • 유효한 사용자 정보라면 인증키를 생성한 후 데이터베이스에 저장 한 후 응답 합니다.
  • 클라이언트는 인증키를 브라우저에 저장 합니다.
  • 인증이 필요한 리소스에 접근시 헤더에 인증키를 함께 요청 합니다.
  • 서버는 데이터베이스를 통해 인증키를 검증합니다.





JWT 기반 인증

JWT(Json Web Token) 기반 인증은 사용자 정보를 포함한 토큰을 생성하여 클라이언트에 전달하고 이를 통해 인증을 수행하는 방식입니다.
이 방식은 리소스 서버에서 토큰을 복호화하여 사용자 정보를 추출 하므로 별도의 인증 서버 요청 없이 사용자 인증이 가능하며 네트워크 비용 감소 및 인증 서버 부하를 줄이는 장점이 있습니다.
그러나 보안적인 위험성도 존재합니다. 암호화 키가 탈취될 경우 누구나 사용자 정보를 복호화할 수 있으며 발급된 토큰 내의 사용자 정보를 변경할 수 없어 사용자 정보 수정이 즉시 반영되지 않는 단점이 있습니다.
또한 로그아웃 시 기존에 발급된 토큰을 무효화할 수 없어 보안상의 취약점이 발생할 수 있습니다.

JWT 기반 인증은 빠른 응답을 필요로 하고 즉각적인 세션 만료가 필요하지 않는 서비스에 적합합니다.
인증은 다음의 순서로 진행 됩니다.

  • 클라이언트가 로그인 정보를 서버에 전송합니다.
  • 유효한 사용자 정보라면 JWT 토큰을 발급한 후 클라이언트에게 전송합니다. (별도의 저장은 필요 없습니다)
  • 클라이언트는 JWT 토큰을 브라우저에 저장 합니다.
  • 인증이 필요한 리소스에 접근시 헤더에 JWT 토큰을 함께 전송 합니다.
  • 서버는 JWT 토큰의 유효성을 검증하고 토큰에서 사용자 정보를 추출합니다.





하이브리드 방식

하이브리드 방식은 빠른 응답 속도와 보안을 강화하는 방법으로 리프레시 토큰을 활용하여 인증 토큰을 갱신하는 방식입니다. 인증 토큰의 유효기간을 짧게 설정하고 리프레시 토큰을 통해 새로운 인증 토큰을 발급하는 과정은 다음과 같습니다.

  • 클라이언트가 로그인 정보를 서버에 전송합니다.
  • 유효한 사용자 정보라면 인증 토큰과 리프레시 토큰을 발급 합니다.
  • 리프레시 토큰을 서버에 저장하고, 두 토큰을 클라이언트에 전송합니다.
  • 클라이언트는 인증 토큰과 리프레시 토큰을 브라우저에 저장 합니다.
  • 인증이 필요한 리소스에 접근시 헤더에 인증 토큰을 함께 요청 합니다.
  • 서버는 인증 토큰의 유효성을 검증하고 토큰에서 사용자 정보를 추출합니다.
  • 만약 인증 토큰이 만료되었다면 클라이언트는 리프레시 토큰을 전송하여 새로운 인증 토큰을 요청합니다.
  • 서버는 저장된 리프레시 토큰을 검증한 후 유효하다면 새로운 인증 토큰을 발급하여 클라이언트에 응답합니다.

리프레시 토큰 최적화

데이터베이스 대신 Redis를 토큰 저장소로 활용하면 응답 속도를 개선할 수 있습니다.
또한 리프레시 토큰을 사용할 때마다 새로운 리프레시 토큰을 발급하고 기존 토큰을 삭제하면 보안이 강화됩니다.


로그아웃 처리

사용자가 로그아웃하면 클라이언트는 저장된 토큰을 삭제하고 서버는 리프레시 토큰을 제거합니다.
이미 발급된 인증 토큰은 삭제할 수 없지만 유효기간이 매우 짧고 리프레시 토큰을 이용한 갱신이 불가능하므로 문제될 여지가 없습니다.

일부 시스템에서는 로그아웃 시 블랙리스트를 활용하여 해당 토큰을 차단하는 방식도 사용합니다.
그러나 이 방식은 매 API 요청마다 저장소를 조회해야 하므로 세션 방식과 다를 바 없어 성능 저하를 초래할 수 있습니다.
따라서 블랙리스트보다는 짧은 액세스 토큰 유효기간과 리프레시 토큰을 활용하는 방식이 더욱 효율적입니다.

profile
차분하게 단단히 쌓아가는 개발자

0개의 댓글