Session vs Token

HeoSeungYeonΒ·2022λ…„ 1μ›” 19일
0

Spring Study

λͺ©λ‘ 보기
5/7
post-thumbnail

πŸ’‘ μ„œλΉ„μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©΄ 보톡 둜그인, λ‘œκ·Έμ•„μ›ƒ, νšŒμ›κ°€μž… κΈ°λŠ₯이 있기 λ§ˆλ ¨μž…λ‹ˆλ‹€. 그러면 λ°˜λ“œμ‹œ ν•΄μ•Όλ˜λŠ” 것이 인증/인가에 λŒ€ν•œ λΆ€λΆ„μΈλ°μš”, 인증/인가λ₯Ό ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 방식듀이 μ‘΄μž¬ν•©λ‹ˆλ‹€. λŒ€ν‘œμ μœΌλ‘œ λŒ€λ¦½λ˜λŠ” κ°œλ…μ€ Tokenκ³Ό Session μΈλ°μš”, 이번 ν¬μŠ€νŒ…μ—μ„œ 이 ν—·κ°ˆλ¦¬λŠ” 두 κ°œλ…! λΏŒμ…” μ‚΄μ‚΄ μ•Œμ•„ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ™œ ν•„μš”ν• κΉŒ?


HTTP ν”„λ‘œν† μ½œμ˜ νŠΉμ„± 쀑 ν•˜λ‚˜λŠ” λ¬΄μƒνƒœμ„±(stateless)μž…λ‹ˆλ‹€. 그러면 둜그인 νŽ˜μ΄μ§€μ—μ„œ λ‘œκ·ΈμΈμ„ μ„±κ³΅ν•œ μœ μ €κ°€ λ‹€μ‹œ HTTP 톡신을 μ‹œλ„ν•΄λ„ (λ‘œκ·ΈμΈμ„ ν–ˆλ‹€λŠ”)μƒνƒœλ₯Ό κ°–κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 둜그인이 ν•„μš”ν•œ νŽ˜μ΄μ§€λŠ” λ‹€μ‹œ λ‚΄κ°€ λ‘œκ·ΈμΈμ„ ν–ˆλ‹€λŠ” 것을 μž…μ¦ν•΄μ•Ό ν•˜λŠ”λ°μš”,

둜그인 ν–ˆμ–΄! λ₯Ό κ²€μ‚¬ν•˜λŠ” 것을 인증이라 ν•˜λ©° 인증을 μœ„ν•΄ νƒ„μƒν•œ λ„κ΅¬λ‘œ 토큰, μ„Έμ…˜ 등이 μžˆμŠ΅λ‹ˆλ‹€ (+ μΏ ν‚€)

HTTP의 StatelessλŠ” μ–΄λ””μ„œ μ˜€λŠ”κ°€
HTTP의 λ¬΄μƒνƒœμ„±μ€ HTTP의 λ˜ν•˜λ‚˜μ˜ νŠΉμ„±μΈ λΉ„μ—°κ²°μ„±(Connectionless)μ—μ„œ μ˜΅λ‹ˆλ‹€. 연결이 λ˜μ–΄μžˆμ§€ μ•ŠκΈ°μ— μžμ—°μŠ€λŸ½κ²Œ μƒνƒœλ„ 갖을 수 μ—†κ²Œ 된거죠.
μ•„λ‹ˆβ— HTTPλŠ” μ™œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„μ˜ 연결을 포기(λΉ„μ—°κ²°μ„±)ν•˜κ³  λ¬΄μƒνƒœμ„±μ„ κ°–κ²Œ ν•΄μ„œ μ„Έμ…˜, 토큰 이런 것듀을 μ‚¬μš©ν•΄μ•Όλ§Œ ν•˜λŠ”κ±°μ•Ό? 라고 μ§ˆλ¬Έμ„ ν•˜κ³ μ‹ΆκΈ° λ§ˆλ ¨μž…λ‹ˆλ‹€ (μ €λ§Œ κ·ΈλŸ΄μˆ˜λ„)
ν•˜μ§€λ§Œ λΉ„μ—°κ²°μ„±μœΌλ‘œ κ°–κ²Œ λ˜λŠ” μž₯점이 μ–΄λ§ˆλ¬΄μ‹œν•œλ°μš”, HTTPλŠ” 인터넷 μƒμ—μ„œ μˆ˜λ§Žμ€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ „λ‹¬ν•˜λŠ” ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ μ„œλ²„μ— μˆ˜λ§Žμ€ μš”μ²­μ— λŒ€ν•œ 연결을 μœ μ§€ν•˜κ²Œ 되면 μ—„μ²­λ‚œ λ¦¬μ†ŒμŠ€κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ¦¬μ†ŒμŠ€λ₯Ό 쀄여 μ’€ 더 λ§Žμ€ μš”μ²­μ„ μˆ˜μ›”ν•˜κ²Œ λ°›κ²Œ ν•˜κΈ° μœ„ν•΄ HTTPλŠ” λΉ„μ—°κ²°μ„±μ΄λž€ νŠΉμ„±μ„ κ°–κ²Œ 된 κ²ƒμž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ Token, Session 뭐야?


  • 인증을 μœ„ν•œ μˆ˜λ‹¨
  • μƒνƒœλ₯Ό κΈ°μ–΅ν•˜λŠ” 방법
  • HTTP의 λ¬΄μƒνƒœμ„±μ„ λ³΄μ™„ν•˜κΈ° μœ„ν•œ 도ꡬ

μœ„ 3가지 κ°œλ…μ΄ Token, Session을 κ°€μž₯ 잘 μ„€λͺ…ν•  수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 맀 νŽ˜μ΄μ§€λ§ˆλ‹€ λ‘œκ·ΈμΈμ„ ν•˜κ³  싢지 μ•Šλ‹€λ©΄, tokenμ΄λ‚˜ session은 κΌ­ ν•„μš”ν•œ μš”μ†ŒλΌκ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

뭐가 달라? (μ–Έμ œ μ“°λ©΄ μ’‹μ„κΉŒ?)


개발자라면 μ—¬λŸ¬κ°€μ§€ 도ꡬ 및 μˆ˜λ‹¨μ΄ μžˆμ„ λ•Œ 차이점을 λͺ…ν™•ν•˜κ²Œ μ•Œκ³  μ μ ˆν•˜κ²Œ μ‚¬μš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μ„Έμ…˜κ³Ό 토큰은 μ—¬λŸ¬κ°€μ§€ 차이점이 μ‘΄μž¬ν•˜λŠ”λ°μš”, 크게 μƒνƒœ 유무, μ €μž₯μœ„μΉ˜, 크기, μ•ˆμ •μ„±, ν™•μ •μ„± μΈ‘λ©΄μ—μ„œ 닀뀄보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • μƒνƒœ 유무
    • μ„Έμ…˜ : stateful μ„œλ²„
    • 토큰 : stateless μ„œλ²„
  • μ €μž₯ μœ„μΉ˜
    • μ„Έμ…˜ : λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μ €μž₯
    • 토큰 : ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯
  • 크기
    • μ„Έμ…˜ : 크기가 μž‘μŒ
    • 토큰 : 크기가 큼
  • μ•ˆμ •μ„±
    • μ„Έμ…˜ : μ„œλ²„μ— μ €μž₯ λ˜λ―€λ‘œ 비ꡐ적 μ•ˆμ •μ 
      • but, μœ νš¨κΈ°κ°„, HttpOnly, Secure μ˜΅μ…˜μ„ 쿠킀에 λ‹΄μ•„ λ³΄μ•ˆμ„±μ„ λ†’μž„
    • 토큰 : μ›Ή λΈŒλΌμš°μ €(local storage, cookie)에 μ €μž₯λ˜μ–΄ 곡격에 λ…ΈμΆœλ  κ°€λŠ₯성이 λ†’μŒ
      • 민감 μ •λ³΄λŠ” 담지 μ•ŠμŒ.
      • μœ νš¨κΈ°κ°„μ„ 짧게 μ„€μ •
        • μœ νš¨κΈ°κ°„μ΄ λ„ˆλ¬΄ 짧으면 μ‚¬μš©μžκ°€ λ²ˆκ±°λ‘œμ›€
          • refresh token(λ°œκΈ‰) β†’ 토큰 μž¬λ°œκΈ‰μš©
  • ν™•μž₯μ„±
    • μ„Έμ…˜ : λ‹€μˆ˜μ˜ μš”μ²­μ— 따라 κ³ΌλΆ€ν•˜κ°€ 거릴 수 있음.
      • μΆ”κ°€ μ„œλ²„κ°€ ν•„μš”ν•˜μ§€λ§Œ μ΄λŠ” μ„Έμ…˜ 관리가 μ–΄λ €μ›Œμ§€κ²Œ 함.
    • 토큰 : μ„Έμ…˜ μ„œλ²„(DB etc)에 듀릴 ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ λ‹€μˆ˜μ˜ μš”μ²­μ΄λ”λΌλ„ κ³ΌλΆ€ν•˜κ°€ λœν•¨.

토큰 vs μ„Έμ…˜μ— λŒ€ν•΄μ„œ μ§ˆλ¬Έμ„ ν•œλ‹€λ©΄?


토큰 vs μ„Έμ…˜μ— λŒ€ν•΄μ„œ 곡뢀λ₯Ό ν•˜λ©΄μ„œ λ°›μœΌλ©΄ λ‹Ήν™©ν–ˆμ„ λ²•ν•œ μ§ˆλ¬Έλ“€μ„ μ •λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • 토큰은 stateless μ„œλ²„μ— 쓰이고 μ„Έμ…˜μ€ stateful μ„œλ²„μ— μ“°μΈλ‹€λŠ”λ° λ­” 말이죠?
  • 토큰도 κ²°κ΅­ db에 μ ‘κ·Όν•˜λŠ”λ° ν™•μž₯μ„± μΈ‘λ©΄μ—μ„œ 토큰도 κ²°κ΅­ μŠ€μΌ€μΌ μ•„μ›ƒμ—μ„œμ˜ 문제점이 λ°œμƒν•˜μ§€ μ•Šμ„κΉŒμš”?
    • 이건 μ§„ν–‰ν–ˆλ˜ ν”„λ‘œμ νŠΈμ—μ„œ refreshToken, accessToken을 λ‚˜λˆ„μ§€ μ•Šμ•„ ν—·κ°ˆλ €μ„œ μƒκ°ν•˜κ²Œλœ 질문인 것 κ°™μŠ΅λ‹ˆλ‹€. πŸ˜…Β μ΄ 뢀뢄도 μ–΄λ–€ 뢀뢄이 ν—·κ°ˆλ €μ„œ μ €λŸ° μ§ˆλ¬Έμ„ ν•˜κ²Œ λ˜μ—ˆλŠ”μ§€ μžμ„Ένžˆ 닀뀄보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
  • μ„Έμ…˜μ΄ μ„œλ²„ ν™•μž₯ μ‹œ 닀루기 μ–΄λ ΅κ³  λ³΅μž‘ν•˜λ‹€λŠ”λ° CORS 와 κ΄€λ ¨λ˜μ–΄μ„œ μ„€λͺ…ν•΄λ³΄μ‹œκ² μ–΄μš”?

회고


맨날 μ„Έμ…˜, 토큰 λ“€μ–΄λ§Œ 보고 깊게 닀뀄보지 μ•Šμ•„μ„œ 잘 λͺ°λžμ—ˆλŠ”데 이번 ν¬μŠ€νŒ…μ„ 톡해 λ‘˜ κ°„μ˜ 차이점을 ν™•μ‹€νžˆ μ§šμ–΄λ³΄κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ 인증 방식 쀑 ν•˜λ‚˜μΈ 쿠킀에 λŒ€ν•΄μ„œλ„ 닀뀄봐야 λ”μš± μ‹¬μΈ΅μ μœΌλ‘œ HTTPλ₯Ό ν†΅ν•œ 인증 μˆ˜λ‹¨μ— λŒ€ν•΄ μ•Œμ•„λ³Ό 수 μžˆμ„ 것 κ°™μ•„, 좔후에 쿠킀에 λŒ€ν•œ λ‚΄μš©λ„ 보강할 μ˜ˆμ •μž…λ‹ˆλ‹€.

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„  μ§„ν–‰ν–ˆλ˜ ν”„λ‘œμ νŠΈμ—μ„œ μ μš©ν•΄λ³΄μ•˜λ˜ 인증 방식과 ν˜Όν•©λœ 방식, 그리고 인증 κΈ°λŠ₯의 μ„±λŠ₯ ν–₯상을 μœ„ν•΄ λ¦¬νŒ©ν† λ§(Cache by Redis) ν–ˆλ˜ κ²½ν—˜μ„ μ§„ν–‰ν•΄λ³ΌκΉŒ ν•©λ‹ˆλ‹€ 😀

μ°Έκ³ λ¬Έμ„œ


[인증/인가]Session(μ„Έμ…˜)κ³Ό Token(토큰)(JWT)의 차이점

Session 기반 인증과 Token 기반 인증

Cookie, Session, Token 의 차이점

인증 방식 : Cookie & Session vs JWT

What really is the difference between session and token based authentication

https://velog.io/@paulkim/Session-κ³Ό-토큰을-μ΄μš©ν•œ-μœ μ €-인증에-λŒ€ν•΄μ„œ

https://www.youtube.com/watch?v=tosLBcAX1vk

https://victorydntmd.tistory.com/286

https://velopert.com/2350

https://pomo0703.tistory.com/213

0개의 λŒ“κΈ€