πŸ“ŒCS/Web

[Web] 쿠킀와 μ„Έμ…˜

dar0m! 2021. 4. 4. 00:28

HTTP ν”„λ‘œν† μ½œ νŠΉμ§•

  • λΉ„μ—°κ²° 지ν–₯(Connectionless)

    ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„μ— μš”μ²­μ„ 보내면 μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— 응닡을 ν•˜κ³  접속을 λŠλŠ” νŠΉμ„±μ΄ μžˆλ‹€.(HTTP1.1μ—μ„œ Connection헀더에 keep-aliveμ„€μ •ν•˜λ©΄ 컀λ„₯μ…˜μ„ μœ μ§€ν•  수 μžˆλ‹€.)
  • μƒνƒœμ •λ³΄ μœ μ§€ μ•ˆ 함(Stateless)

    HTTP 톡신은 μš”μ²­μ„ μ‘λ‹΅ν•˜κ³  접속을 끊기 λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœ 정보λ₯Ό μ•Œ 수 μ—†λ‹€.

쿠킀와 μ„Έμ…˜μ˜ ν•„μš”μ„±

쿠킀와 μ„Έμ…˜μ˜ 탄생 → HTTP ν”„λ‘œν† μ½œμ—μ„œ μƒνƒœλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•¨

μœ„μ™€ 같은 HTTP ν”„λ‘œν† μ½œμ˜ νŠΉμ§•μœΌλ‘œ λͺ¨λ“  μš”μ²­κ°„μ˜ μ˜μ‘΄κ΄€κ³„κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžλ₯Ό 인증할 수 μ—†λ‹€. 이전 μš”μ²­κ³Ό ν˜„μž¬ μš”μ²­μ΄ 같은 μ‚¬μš©μžμ˜ μš”μ²­μΈμ§€ μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€. HTTP ν”„λ‘œν† μ½œμ—μ„œ μƒνƒœλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•œ 기술둜 쿠킀와 μ„Έμ…˜μ΄ μžˆλ‹€.

 

μΏ ν‚€(Cookie)

κ°œλ…

  • ν΄λΌμ΄μ–ΈνŠΈ λ‘œμ»¬μ— μ €μž₯λ˜λŠ” 킀와 값이 λ“€μ–΄μžˆλŠ” νŒŒμΌμ΄λ‹€.
  • 이름, κ°’, 유호 μ‹œκ°„, 경둜 등을 ν¬ν•¨ν•˜κ³  μžˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœ 정보λ₯Ό λΈŒλΌμš°μ €μ— μ €μž₯ν•˜μ—¬ μ°Έμ‘°ν•œλ‹€.
  • 주둜 μ„œλ²„μ—μ„œ μƒμ„±ν•˜μ—¬ λΈŒλΌμš°μ €μ— μ €μž₯ν•˜λŠ” 데이터

ꡬ성 μš”μ†Œ

  • μΏ ν‚€μ˜ 이름(name)
  • μΏ ν‚€μ˜ κ°’(value)
  • μΏ ν‚€μ˜ λ§Œλ£Œμ‹œκ°„(Expires)
  • μΏ ν‚€λ₯Ό 전솑할 도메인 이름(Domain)
  • μΏ ν‚€λ₯Ό 전솑할 경둜(Path)
  • λ³΄μ•ˆ μ—°κ²° μ—¬λΆ€(Secure)
  • HttpOnly μ—¬λΆ€(HttpOnly)

λ™μž‘λ°©μ‹

μΏ ν‚€ λ™μž‘μ˜ 예

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 둜그인 μš”μ²­μ„ ν•œλ‹€.
  2. μ„œλ²„λŠ” μƒνƒœλ₯Ό μœ μ§€ν•˜κ³  싢은 값을 μΏ ν‚€(cookie)둜 생성
  3. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 둜그인 μš”μ²­μ˜ μœ νš¨μ„±μ„ ν™•μΈν•˜κ³  응닡헀더에 'set-cookie: user=chrisjune'을 μΆ”κ°€ν•˜μ—¬ μ‘λ‹΅ν•œλ‹€.
  4. 전달받은 μΏ ν‚€λŠ” μ›Ή λΈŒλΌμš°μ €μ—μ„œ κ΄€λ¦¬ν•˜κ³  μžˆλ‹€κ°€ λ‹€μŒ μš”μ²­ λ•Œ μΏ ν‚€λ₯Ό HTTP 헀더에 λ„£μ–΄μ„œ 전솑. 'cookie: user=chrisjune'
  5. μ„œλ²„μ—μ„œλŠ” μΏ ν‚€ 정보λ₯Ό 읽어 이전 μƒνƒœ 정보λ₯Ό ν™•μΈν•œ ν›„ 응닡

μΏ ν‚€ μ‚¬μš© 예

  • 아이디, λΉ„λ°€λ²ˆν˜Έ μ €μž₯
  • μ‡Όν•‘λͺ° μž₯λ°”κ΅¬λ‹ˆ

μΏ ν‚€ 값은 F12λ₯Ό 눌러 κ°œλ°œμžλ„κ΅¬μ—μ„œ ν™•μΈν•˜κ±°λ‚˜ κ΄€λ ¨ ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜ν•˜λ©΄ 확인/μˆ˜μ •ν•  수 μžˆλ‹€. μœ„λ³€μ‘°μ˜ μœ„ν—˜μ΄ 항상 있기 λ•Œλ¬Έμ— 쿠킀값도 μ•”ν˜Έν™”ν•΄μ•Ό μ•ˆμ „ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

 

μ„Έμ…˜(Session)

κ°œλ…

  • 일정 μ‹œκ°„ λ™μ•ˆ 같은 λΈŒλΌμš°μ €λ‘œλΆ€ν„° λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ ν•˜λ‚˜μ˜ μƒνƒœλ‘œ 보고 κ·Έ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” κΈ°μˆ μ΄λ‹€.
  • 즉, μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 μ„œλ²„μ— μ ‘μ†ν•œ 이후뢀터 λΈŒλΌμš°μ €λ₯Ό μ’…λ£Œν•  λ•ŒκΉŒμ§€ μœ μ§€λ˜λŠ” μƒνƒœμ΄λ‹€.
  • λΈŒλΌμš°μ €κ°€ μ’…λ£Œλ˜κΈ° μ „κΉŒμ§€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μœ μ§€ν•˜κ²Œ ν•΄μ£ΌλŠ” 기술

λ™μž‘λ°©μ‹

μ„Έμ…˜ λ™μž‘μ˜ 예

  1. ν΄λΌμ΄μ–΄λŠ©κ°€ μ„œλ²„μ— 둜그인 μš”μ²­μ„ ν•œλ‹€.
  2. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 둜그인 μš”μ²­μ˜ μœ νš¨μ„±μ„ ν™•μΈν•˜κ³  uniqueν•œ idλ₯Ό sessionidλΌλŠ” μ΄λ¦„μœΌλ‘œ μ €μž₯ν•œλ‹€.
  3. μ„œλ²„κ°€ 응닡할 λ•Œ 응닡헀더에 'set-cookie: sessionid=a1x2fjz'λ₯Ό μΆ”κ°€ν•˜μ—¬ μ‘λ‹΅ν•œλ‹€.
  4. ν΄λΌμ΄μ–ΈνŠΈλŠ” 이후 μ„œλ²„μ— μš”μ²­ν•  λ•Œ μ›Ή λΈŒλΌμš°μ €λ₯Ό λ‹«κΈ°κΉŒμ§€ 전달받은 μΏ ν‚€λ₯Ό μš”μ²­ν—€λ”μ— 'cookie: sessionid=a1x2fjz'λ₯Ό λ„£μ–΄ μ „μ†‘ν•œλ‹€.
  5. μ„œλ²„μ—μ„œ μš”μ²­ν—€λ”μ˜ 'sessionid' 값을 μ €μž₯된 μ„Έμ…˜μ €μž₯μ†Œμ—μ„œ 찾아보고 μœ νš¨ν•œμ§€ 확인 ν›„ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  μ‘λ‹΅ν•œλ‹€.

μ„Έμ…˜ μ‚¬μš© 예

  • 둜그인

μ„Έμ…˜λ„ μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ£Όκ³  λ°›μœΌλ©° ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœ 정보λ₯Ό μœ μ§€ν•œλ‹€. 즉, μƒνƒœ 정보λ₯Ό μœ μ§€ν•˜λŠ” μˆ˜λ‹¨μ€ 쿠킀이닀.

 

쿠킀와 μ„Έμ…˜μ˜ 차이점

ꡬ뢄 이름 λ‚΄μš©
μ €μž₯ μœ„μΉ˜ μΏ ν‚€ ν΄λΌμ΄μ–ΈνŠΈ
μ„Έμ…˜ μ„œλ²„
λ³΄μ•ˆ μΏ ν‚€ ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯λ˜λ―€λ‘œ λ³΄μ•ˆμ— μ·¨μ•½
μ„Έμ…˜ μΏ ν‚€λ₯Ό μ΄μš©ν•΄ Session ID만 μ €μž₯ν•˜κ³  이 κ°’μœΌλ‘œ κ΅¬λΆ„ν•΄μ„œ μ„œλ²„μ— μ²˜λ¦¬ν•˜λ―€λ‘œ 비ꡐ적 λ³΄μ•ˆμ„±μ΄ μ’‹λ‹€.
라이프 사이클 μΏ ν‚€ λ§Œλ£Œμ‹œκ°„μ— 따라 λΈŒλΌμš°μ €λ₯Ό μ’…λ£Œν•΄λ„ 계속 λ‚¨μ•„μžˆμ„ 수 μžˆλ‹€.
μ„Έμ…˜ λ§Œλ£Œμ‹œκ°„μ„ μ •ν•  수 μžˆμ§€λ§Œ λΈŒλΌμš°μ €κ°€ μ’…λ£Œλ˜λ©΄ λ§Œλ£Œμ‹œκ°„μ— 상관없이 μ‚­μ œλœλ‹€.
속도 μΏ ν‚€ ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯λ˜μ–΄μ„œ μ„œλ²„μ— μš”μ²­μ‹œ λΉ λ₯΄λ‹€.
μ„Έμ…˜ μ‹€μ œ μ €μž₯된 정보가 μ„œλ²„μ— μžˆμœΌλ―€λ‘œ μ„œλ²„μ˜ μ²˜λ¦¬κ°€ ν•„μš”ν•΄ 쿠킀보닀 λŠλ¦¬λ‹€.

 

μ°Έκ³