[JAVA_SPRING] JWT와 세션

도리·2024년 9월 26일

JAVA

목록 보기
3/7

JWT 와 Session 이요?

우선 기억해 -> JWT 는 stateless, Session은 stateful

이게 먼 말이뇨?

JWT는 상태가 없는, 무상태인 것
Session은 상태가 있는.
거라는 거시다

여기서 상태가 없다(stateless). 즉 상태를 갖지 않는다는 건 데이터가 없다는 뜻이다

stateless = Data 없음

로그인

로그인은 어떻게 동작하나? 로그인 했다는 걸 어떻게 아나욥?

HTTP의 특징 중 하나가 바로 stateless(무상태)라는 점이다.
이게 뭔 말이냐면, 요청들은 서로 독립적이라는 것이다

근데, 로그인은 사용자의 정보(데이터=상태)를 가지고 있는 거잖아..
따라서 누군가는 유저의 정보를 갖고 있어야 상태가 유지가 된다.

답은 둘 다!!!

JWT는 클라이언트가 상태를 갖고 있는거고
Session은 서버가 상태를 갖고 있다는 것이다.


  • 그냥 여기서 한단계 더 나아가서,
    JWT일 때 로그아웃은 어떻게 해야할까? 그냥 삭제.
    Session은 서버 클라 다 삭제할 수 있다.

JWT=stateless 먼 말이냐구요?

먼저 정리를 하고 설명을 하자면

클라이언트(JWT-필요한 정보를 다 갖고 있는) ----> 서버

↑ 뭔 그림(이요?)이냐면, 클라이언트에서 서버로 보내는 매 요청마다 헤더에 JWT를 함께 보낸다.

설명 :
JWT는 그 안에 필요한 모든 정보를 다 갖고 있다.(그래서 토큰 보면 대체로 뚱뚱함) 즉, 상태를 다 들고 다닌다는 것.
그래서 JWT가 동작하려면, 클라이언트가 JWT를 갖고 있어야한다.
그러곤 JWT를 헤더에 매 요청마다 같이 보낸다.

근데 stateless라며.. 상태 없다며...상태 잇잖아..ㅅㅂ..
JWT가 모든 상태를 다 갖고 다니는데 뭔 무상태라는거야...

그 이유는 stateless의 주체가 서버라서이다.
서버 입장에서는 굳이 본인이 상태를 갖고 있는게 아니니까. JWT가 갖고있는건데 이제 요청이 들어올 때마다 알아서 JWT(상태=데이터값)이 들어오니까용

엄밀히 말해 클라이언트가 JWT를 대가리(header)에 박고 있으니..데이터를 다 갖고 있기 때문에 서버 입장에선 없는거지~ 라는 것

Session=stateful

세션은 서버가 상태를 갖고 있죠?
그래서 DB에 유저 정보를 넣어두고, 로그인 시에 세션 키를 발급을 해준다.
그러면 클라이언트가 발급받은 세션 키를 갖고있는 것

로그아웃

  1. JWT일 때 로그아웃 하는 방법
    -클라이언트에서 JWT를 삭제한다.

    2.session일 때 로그아웃 하는 방법
  2. 클라이언트에서session key를 삭제한다.
  3. 서버ㅔㅇ서 session 데이터를 삭제한다.
profile
헬로

0개의 댓글