본문 바로가기

CS

Token과 Session

주니어가 아닌 경력직 개발자임에도 Token과 Session의 개념을 정확히 모르는 경우가 꽤 있다고 한다. 나는 그러기 싫기 때문에 학습을 하고 기록을 해본다.

Session

 Session은 유저의 정보를 DB에 저장하고 상태를 유지하는 값이다.

 

특징

  • Session은 특정한 id 값을 가진다.
  • Session은 서버에서 생성하고 데이터베이스와 클라이언트에 쿠키로 저장된다.
  • 클라이언트에서 요청을 보낼 때 Session을 같이 보내면 사용자가 누군지 알 수 있다.
  • 사용자를 확인하기 위해 데이터베이스를 조회해야한다.
  • 서버에 저장하기 때문에 클라이언트에서 사용자 정보가 노출될 위험이 없다.
  • DB에 Session을 저장해야 하기 때문에 Horizontal Scaling이 어렵다.

Token

 Token은 유저의 정보를 base 64로 인코딩된 String 값에 저장하는 도구이다.

 

특징

  • Token은 Header, Payload, Signature로 구성되어 있으면 base 64로 인코딩 되어있다.
  • Token은 서버에서 생성하고, 클라이언트에 저장한다.(DB 저장 X)
  • 클라이언트에서 요청을 보낼 때 Token을 함께 보내면 서버에서 사용자가 누구인지 알 수 있다.
  • Token은 DB에 저장되지 않고, Signature를 통해 검증할 수 있기 때문에 요청이 올 때 마다 DB를 조회할 필요가 없다.
  • Token에는 유저 정보가 담겨있고, 클라이언트에 저장되기 때문에 정보 노출의 위험이 있다.(유출이 되어도 상관 없는 값만 토큰으로 생성)
  • DB에 저장하지 않기 때문에 Horizontal Scaling이 쉽다. 

생성/사용 방식

Session 생성

1. Session은 클라이언트에서 서버로 ID/Password를 전송

2. 서버는 이를 검증한다.(검증 단계에서 서버는 DB를 조회)

3. 이 후 서버에서 Session을 생성한 후에 DB에 저장

4. Session을 쿠키의 형태로 클라이언트에 전송하면 클라이언트는 이를 저장

 

Session 사용

1. 클라이언트에서 특정 API를 호출할 때 저장된 쿠키를 함께 전송

2. 서버에서 Session 검증

3. 데이터베이스에서 해당 Session 검색

4. 해당 유저 데이터 응답

5. 서버에서 DB 데이터 요청(API 호출 시 요청한 데이터)

6. 데이터 응답

7. 클라이언트로 데이터 전송

Token 생성

1. 클라이언트에서 서버로 유저 데이터 전송

2. 서버에서 Token 생성

3. 클라이언트로 Token 전송

 

Token 사용 방식

1. 클라이언트에서 특정 API 호출할 때 Token을 함께 전송

2. 서버에서 Token 검증

3. 서버에서 DB로 데이터 요청

4. 데이터 응답

5. 클라이언트로 데이터 전송

 

'CS' 카테고리의 다른 글

API에 대하여  (0) 2023.06.22
데이터 교환 형식 - JSON과 XML  (0) 2023.06.20
Token과 JWT  (2) 2023.02.27