Hello

13. JWT를 이해하기 전 세션에 대해 알아보자

by 볼빵빵오춘기

 

JWT(Json Web Token) 가 어떻게 만들어지고 생겼는지가 아니라, 왜 사용되고 어디에 쓰이는지가 더 중요하다.

이를 이해하기 위해 먼저 세션에 대해 알아야한다.

 

세션이 무엇인가?

일반적으로, UserA가 웹 브라우저를 열고 네이버에 접속하면 서버는 요청에 맞는 컨트롤러의 메서드를 찾아 해당 HTML 파일을 반환한다. 이때 서버는 HTTP 헤더에 세션 ID를 포함한 쿠키를 생성하여 브라우저에 전달한다.

(예를 들어, 서버가 생성한 세션 ID가 1234라고 가정해보자.)

 

브라우저는 이 세션 ID를 쿠키라는 저장 영역에 보관한다.

최초 요청 시에만 세션 ID가 생성되며, 이후 요청에서는 이미 생성된 세션 ID를 사용한다.

서버는 이 세션 ID를 통해 사용자가 최초 요청자인지 아닌지를 구별할 수 있다.

 

하지만 다른 사용자가 동일한 세션 ID를 사용하려고 시도할 수 있기 때문에, 서버는 세션 ID를 생성할 때마다 그 목록을 유지하여 이를 검증한다.

이렇게 해서 서버는 해당 세션 ID가 최초의 요청자인지 확인하게 된다.

 

세션의 동작 로직

 

  1. 사용자가 최초로 요청을 보낸다.
  2. 서버는 세션 ID를 생성하고 이를 목록에 추가한다.
  3. 서버는 응답할 때 세션 ID를 HTTP 헤더에 포함하여 보낸다.
  4. 브라우저는 이 세션 ID를 저장한다.
  5. 이후 요청 시, 브라우저는 세션 ID를 포함하여 요청을 보낸다.
  6. 서버는 세션 목록을 통해 해당 요청이 최초 요청이 아닌지 확인한다.

 

세션 ID의 만료 시점

 

  1. 서버가 세션을 삭제할 때
  2. 사용자가 브라우저를 닫을 때
  3. 일정 시간이 경과했을 때(예: 30분)

세션은 주로 로그인 시 인증을 위해 사용된다.

클라이언트가 로그인 요청을 하면, 서버는 세션 저장소에 세션 ID를 생성하고, 이 ID와 함께 사용자 정보를 저장한다.

이후 사용자가 인증이 필요한 요청을 보내면, 서버는 세션 저장소를 확인하여 사용자가 인증된 상태인지 판단한다.

 

세션의 단점

세션을 사용하면 서버에 부하가 걸릴 수 있다.

특히 많은 사용자가 동시에 접속하는 대형 서버에서는 세션을 관리하는 데 문제가 생길 수 있다.

로드 밸런싱을 통해 부하를 분산시키려 할 때, 세션이 특정 서버에만 저장되어 있다면 다른 서버에서는 해당 세션을 확인할 수 없다는 문제가 발생한다.

이를 해결하기 위해 스티키 세션(sticky session)이나 세션 복사 등의 방법이 있지만, 이러한 방법들은 추가적인 복잡성을 야기한다.

또한, 세션을 데이터베이스에 저장하여 여러 서버에서 공유할 수 있지만, 이 경우 메모리보다 느린 데이터베이스 접근 속도로 인해 성능이 저하될 수 있다.

 


참고링크

https://www.youtube.com/watch?v=cv6syIv-8eo&list=PL93mKxaRDidERCyMaobSLkvSPzYtIk0Ah&index=13

https://jay-ji.tistory.com/101

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기