내일배움캠프

Session vs JWT에 차이

김만규 2024. 6. 25. 21:47
728x90
반응형

이번 모의 면접에서 Session과 JWT의 차이를 깊게 알지 못하여 제대로 된 답변을 하지 못했습니다. 이를 보완하기 위해 이번 글을 작성하게 되었습니다.

 

Session

session의 인증 흐름

 

Session은 사용자가 로그인을 성공하면 해당 사용자에 대한 세션 데이터를 서버에 저장하고, 클라이언트에게는 세션 ID를 전달합니다. 클라이언트는 이후 요청 시 이 세션 ID를 함께 전송하여 인증을 받습니다.

 

Session의 문제점

 

1. 서버 메모리 또는 데이터베이스에 저장:

서버 메모리에 저장하면 빠른 접근이 가능하지만, 서버가 재시작되거나 여러 서버를 사용하는 경우(로드 밸런싱) 문제가 발생할 수 있습니다.

데이터베이스에 저장하면 서버 간 세션 공유가 용이하지만, 데이터베이스 접근 시간이 필요합니다.

2. 과부하 문제:

많은 사용자가 동시에 접속하는 경우, 세션 데이터를 관리하는 서버 또는 데이터베이스에 과부하가 발생할 수 있습니다.

적은 수의 사용자일 때는 다른 인증 방식보다 빠르게 인증 처리가 가능하지만, 사용자 수가 많아질수록 서버 자원이 소모되면서 성능 저하가 발생할 수 있습니다.

 

 

JWT

JWT 인증 흐름

JWT는 클라이언트에서 인증 요청을 하면 서버에 유효한지 검증을 하여 유효하다면 사용자의 최소한의 데이터를 토큰에 담아 토큰생성을 하여 클라이언트에게 전달합니다.

 

JWT의 문제점

1. 토큰의 길이와 네트워크 부하: JWT의 토큰은 Base64로 인코딩되어 있어 일반적으로 길이가 꽤 길 수 있습니다. 이는 토큰을 매 요청마다 전송해야 하는 경우, 특히 인증 요청이 많아질수록 네트워크 부하를 유발할 수 있습니다. 특히 모바일 기기와 같이 대역폭이 제한된 환경에서는 추가적인 문제가 발생할 수 있습니다.

2. Payload의 암호화 부재: JWT의 기본 구조는 헤더와 페이로드가 Base64로 인코딩되어 있고, 이는 단순 인코딩일 뿐 암호화된 것이 아닙니다. 따라서 중요한 데이터는 페이로드에 저장하지 않는 것이 좋습니다. 특히 토큰을 클라이언트 측 저장소에 저장할 때 중요 정보가 노출될 수 있습니다.

3. 토큰 관리와 보안: JWT는 한 번 발급되면 해당 토큰을 탈취당할 경우 그 토큰을 강제로 만료시키기가 어렵습니다. 토큰은 발급 후 유효 기간을 가지며, 이 기간 내에는 계속 사용될 수 있습니다.

 

JWT에 보안적으로 토큰이 탈취 당하기전에 방지하는법

1. 짧은 유효 기간 설정: 액세스 토큰의 유효 기간을 짧게 설정하여 탈취 시 악용될 수 있는 시간을 최소화합니다. 일반적으로 몇 분에서 몇 시간 정도의 유효 기간을 설정하며, 필요할 때마다 리프레시 토큰을 사용해 새로운 액세스 토큰을 발급합니다.

2. 리프레시 토큰 사용: 액세스 토큰의 유효 기간이 짧기 때문에, 리프레시 토큰을 사용하여 필요할 때마다 새로운 액세스 토큰을 발급합니다. 리프레시 토큰은 보통 더 긴 유효 기간을 가지고 있으며, 보안 상의 이유로 저장소에 안전하게 저장되어야 합니다.

3. HTTPS 사용: 모든 통신에 HTTPS를 사용하여 데이터의 암호화와 중간자 공격을 방지합니다. HTTPS를 사용하면 토큰이 네트워크를 통해 전송될 때 도청을 막을 수 있습니다.

4. RTR (Refresh Token Rotation) 기법: 리프레시 토큰을 사용할 때마다 새로운 리프레시 토큰을 발급받도록 합니다. 즉, 리프레시 토큰을 재발급 받을 때마다 이전 토큰은 무효화되며, 새로운 리프레시 토큰을 생성하여 사용합니다. 이를 통해 탈취된 리프레시 토큰의 재사용을 방지할 수 있습니다.

5. 주기적인 로그아웃 및 재발급: 사용자가 일정 기간 동안 활동하지 않으면 자동으로 로그아웃하게 하거나, 주기적으로 사용자가 다시 로그인하여 새로운 리프레시 토큰을 발급받도록 합니다. 이를 통해 장기간 사용되는 리프레시 토큰의 보안을 강화할 수 있습니다.

 

 

면접에서 할수있는 질문

더보기

 

질문 : JWT를 이용한 인증 시 Cookie를 이용한 방식과 Header를 이용한 방식이 있는데, 각각은 어떤 상황에 사용하는 것이 적합한가요?

답변: 웹 애플리케이션(모바일)에서 사용을 할 때는 Cookie를 사용하는곳이 좋고 웹에서만 사용을 할 때 Header를 사용하는것이 적합하다.

 

질문 : 토큰길이로 네트워크가 문제가 발생한다면 정확하게 어떤 문제가 발생할수있을까요?

답변: 토큰이 길어지면 데이터 전송이 더 오래 걸리고, 네트워크 사용량이 늘어나서 전송 속도가 느려질 수 있습니다. 그래서 특히 모바일 환경에서는 사용자 경험이 저하될 수 있어요.

 

 

728x90
반응형