๐ HTTP์ ๋น๋ฐ, ์๋ฒฝ ํด๋ถ!
1๏ธโฃ HTTP ํ๋กํ ์ฝ์ ํน์ง
- ํด๋ผ์ด์ธํธ(client)์ ์๋ฒ(server) ๊ฐ์ ์์ฒญ-์๋ต ๊ตฌ์กฐ
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ(Request)์ ์ ์กํฉ๋๋ค.
- ์๋ฒ๋ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ๋ค, ์๋ต(Response)์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํฉ๋๋ค.
- ์ด ๋ฐฉ์์ ์ธํฐ๋ท์ ํตํด ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ๊ทผ๊ฐ์ด ๋ฉ๋๋ค.
๐ช ๋๊น ์์ด ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ: HTTP์ ๋ฌด์ํ์ฑ (Stateless)
- HTTP๋ Stateless(์ํ๋ฅผ ์ ์งํ์ง ์๋) ํ๋กํ ์ฝ์
๋๋ค.
- ์์ฒญ์ด ์๋ฃ๋๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ๋์ต๋๋ค.
- ์ด ํน์ง์ ์ง์์ ์ธ ์ฐ๊ฒฐ๋ก ์ธํ ์์ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค. ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ์ฐ๊ฒฐ์ ๋งบ๋ ๋ฐฉ์์ผ๋ก ์ด์๋ฉ๋๋ค.
๐ก ํ์ง๋ง ํน์ ์ํฉ์์๋ ์ํ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- ๋ก๊ทธ์ธ ์ ์ง: ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ํ ๊ทธ ์ํ๊ฐ ์ ์ง๋์ด์ผ ํฉ๋๋ค.
- ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด ์ ์ฅ: ์ผํ๋ชฐ์์ ์ฌ์ฉ์๊ฐ ๋ด์๋ ์ํ์ด ๊ณ์ ์ ์ง๋ ํ์๊ฐ ์์ต๋๋ค.
๐งโ๐ป Cookie์ Session์ ํตํ ์ํ ๊ด๋ฆฌ
- Cookie์ Session์ HTTP์ ๋ฌด์ํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค:
- Cookie:
- ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ธก์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์
๋๋ค. ์ฌ์ฉ์์ ํน์ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ฒ์ ์ ๋ฌํฉ๋๋ค.
- Session:
- ์๋ฒ ์ธก์์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ง์์ ์ธ ์ํ ์ ์ง๋ฅผ ๋์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ธ์
ID๋ฅผ ์ฟ ํค์ ๋ด์ ์๋ฒ์ ์ ๋ฌํ๋ฉฐ, ์ด๋ฅผ ํตํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํฉ๋๋ค.
๐ก HTTP ๋ณด์์ ์ฝ์ ๊ณผ HTTPS์ ๋ฑ์ฅ
HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์์ด ์ทจ์ฝํฉ๋๋ค. ์๋์ ๊ฐ์ ์กฐ์น๋ก ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค:
๐ช ์ฟ ํค์ ๋ชจ๋ ๊ฒ! ์ค์ ํ์ฉ๋ฒ ์๋ฒฝ ์ ๋ฆฌ
๐ ์ฟ ํค(Cookie)๋ ๋ฌด์์ธ๊ฐ?
-
jakarta.servlet.http.Cookie
: ์๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฟ ํค๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํด๋์ค์
๋๋ค. ์ฟ ํค๋ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)์ ์ปดํจํฐ์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ ํ์ผ์
๋๋ค.
-
์๋ ์ ์ก๋๋ ๋ฐ์ดํฐ
- ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ ๋, ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์๋์ผ๋ก
Request Header์ ํฌํจํด ์๋ฒ์ ์ ์กํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก ์กฐ์ํ ํ์ ์์ด, ๋ธ๋ผ์ฐ์ ๊ฐ ์์์ ์ฟ ํค๋ฅผ ์๋ฒ๋ก ์ ์กํด์ค๋๋ค.
-
Key-Value ์์ผ๋ก ๊ตฌ์ฑ
- ์ฟ ํค๋ Key์ Value ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๋ฌธ์์ด(String)๋ก ํํ๋ฉ๋๋ค.
์) "user_id=abc123"
-
๋ธ๋ผ์ฐ์ ๋ณ๋ก ๋
๋ฆฝ๋ ์ฟ ํค ์ ์ฅ์
- ๊ฐ์ ์ปดํจํฐ์์๋ Chrome๊ณผ Firefox์ ์ฟ ํค ์ ์ฅ์๋ ๋ถ๋ฆฌ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋์ผํ ์น์ฌ์ดํธ์ ์ ๊ทผํ๋๋ผ๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ธ์๋ ์ ์์ต๋๋ค.
๐ ์ฟ ํค ์ฌ์ฉ ์์
-
๐ ์ธ์
๊ด๋ฆฌ
- ์ฌ์ฉ์์ ์์ด๋, ์ ์ ์๊ฐ, ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด ๋ฑ์ ์ฟ ํค์ ์ ์ฅํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ก๊ทธ์ธ ์ ์ง๋ ์ด์ ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์๋ ์ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
-
๐ฏ ๊ฐ์ธํ(Personalization)
- ์ฌ์ฉ์๊ฐ ์์ฃผ ๋ฐฉ๋ฌธํ๋ ํ์ด์ง๋ฅผ ๋ง์ถคํ์ผ๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
์) ์์ฃผ ์ฐพ๋ ์ํ ์ถ์ฒ ๋ชฉ๋ก์ ๊ฐ์ธํํด ํ์
-
๐ ํธ๋ํน(Tracking)
- ์ฌ์ฉ์์ ์ด๋ ๊ฒฝ๋ก๋ ํ๋ ํจํด์ ๋ถ์ํด ๋ง์ผํ
์ ํ์ฉํฉ๋๋ค.
์) ๋ฐฉ๋ฌธ ํ์ด์ง์ ํด๋ฆญํ ๊ด๊ณ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ถคํ ๊ด๊ณ ์ ๊ณต
๐ HTTP ์ฟ ํค์ ์ธ์
์ฟ ํค์ ์ฐจ์ด
1. HTTP ์ฟ ํค์ ์ธ์
์ฟ ํค์ ์ฐจ์ด
- ์ธ์
์ฟ ํค
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
- ์๊ตฌ ์ฟ ํค
- ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ๋ฉด ์ค์ ๋ ์๊ฐ๊น์ง ์ ์ง๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฅ๊ธฐ ๋ก๊ทธ์ธ ์ ์ง๋ ์ฌ์ฉ์ ์ ํธ๋ ์ ์ฅ์ ์ฌ์ฉ๋ฉ๋๋ค.
2. ์ฟ ํค์ ๋ณด์
- ์ค์ํ ์ ๋ณด๋ฅผ ์ง์ ์ฟ ํค์ ์ ์ฅํ๋ฉด ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋์ , ์ธ์
ID๋ ํ ํฐ๊ณผ ๊ฐ์ ๊ฐ์ ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ๋ฏผ๊ฐํ ์ ๋ณด๋ ์๋ฒ์์ ๊ด๋ฆฌํฉ๋๋ค.
3. SameSite์ Secure ์ต์
- Secure ์ต์
- HTTPS ํ๊ฒฝ์์๋ง ์ฟ ํค๋ฅผ ์ ์กํ๋๋ก ์ค์ ํด ๋ณด์์ ๊ฐํํฉ๋๋ค.
- SameSite ์ต์
- ๋ค๋ฅธ ์ฌ์ดํธ์์์ ์์ฒญ์ ๋ํด ์ฟ ํค ์ ์ก์ ์ ํํด CSRF(์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ) ๊ณต๊ฒฉ์ ์๋ฐฉํฉ๋๋ค.
๐ ์ฟ ํค ๊ตฌ์ฑ ์์ ์๋ฒฝ ๋ถ์
๐ก ์ฟ ํค์ ์ค์ํ ์์์ ๊ตฌ์ฑ ์์๋ฅผ ์ฝ๊ณ ๋ช
ํํ๊ฒ ์์๋ณด๊ธฐ!
์ฟ ํค๋ ์น ์ฌ์ดํธ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ๊ธฐ๋ฅ ๊ฐ์ ์ ํ์์ ์
๋๋ค. ์ด๋ฒ ํฌ์คํ
์์๋ ์ฟ ํค์ ๋ค์ํ ์ฌ์ฉ ์์ ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ช ์ฟ ํค์ ์ฌ์ฉ ์
-
ID ์ ์ฅ (์๋ ๋ก๊ทธ์ธ)
- ๋ก๊ทธ์ธ ํ ID๋ฅผ ์ ์ฅํด ๋ค์ ๋ฐฉ๋ฌธ ์ ์๋ ๋ก๊ทธ์ธ๋ฉ๋๋ค.
-
์ผ์ฃผ์ผ๊ฐ ๋ค์ ๋ณด์ง ์๊ธฐ
- ํ์
์ด๋ ๊ณต์ง์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ฌ์ฉ์๊ฐ '์ผ์ฃผ์ผ๊ฐ ๋ค์ ๋ณด์ง ์๊ธฐ'๋ฅผ ๋๋ฅด๋ฉด ํด๋น ์ค์ ์ด ์ฟ ํค์ ์ ์ฅ๋ฉ๋๋ค.
-
์ต๊ทผ ๊ฒ์ํ ์ํ ๊ด๊ณ ์ถ์ฒ
- ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ์ํ ๊ธฐ๋ก์ ๋ฐํ์ผ๋ก ๋ง์ถคํ ์ํ ๊ด๊ณ ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
-
์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ
- ๋ก๊ทธ์ธํ์ง ์์๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ด ์ ์ง๋ฉ๋๋ค. ์ด๋ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๊ฐ ์ฟ ํค์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
๐งฉ ์ฟ ํค์ ๊ตฌ์ฑ ์์
-
์ด๋ฆ(Name)
- ์ฌ๋ฌ ๊ฐ์ ์ฟ ํค๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ๊ณ ์ ํ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค.
- ์:
user_id, session_token.
-
๊ฐ(Value)
- ์ฟ ํค ์ด๋ฆ๊ณผ ๋งคํ๋๋ ๋ฐ์ดํฐ ๊ฐ์
๋๋ค.
- ์:
user_id=abc123.
-
์ ํจ๊ธฐ๊ฐ(Expiration Date)
- ์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํฉ๋๋ค.
- ์ธ์
์ฟ ํค: ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์ญ์ .
- ์๊ตฌ ์ฟ ํค: ์ง์ ๋ ์ ํจ๊ธฐ๊ฐ๊น์ง ์ ์ง๋ฉ๋๋ค.
-
๋๋ฉ์ธ(Domain)
- ์ฟ ํค๊ฐ ์ ์ฉ๋๋ ๋๋ฉ์ธ์ ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
example.com์์๋ง ํด๋น ์ฟ ํค๊ฐ ์ ํจํฉ๋๋ค.
-
๊ฒฝ๋ก(Path)
- ์ฟ ํค๋ฅผ ์ ์กํ ์์ฒญ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ์:
/shopping ๊ฒฝ๋ก๋ก ์ค์ ๋ ์ฟ ํค๋ ํด๋น ๊ฒฝ๋ก์ ์๋ ํ์ด์ง์์๋ง ์ ํจํฉ๋๋ค.
๐ ์ฟ ํค์ ๋์ ์์ ์๋ฒฝ ์ ๋ฆฌ!
์ฟ ํค๋ ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ์ ์์ฒญ๊ณผ ์๋ต ๊ณผ์ ์์ ์๋์ผ๋ก ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ฌ์ฉ์์ ์ ๋ณด์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
-
Client๊ฐ ํ์ด์ง๋ฅผ ์์ฒญ
- ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก ํ์ด์ง ์์ฒญ์ ๋ณด๋
๋๋ค.
-
WAS(Web Application Server)๊ฐ ์ฟ ํค ์์ฑ
- ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฟ ํค๋ฅผ ์์ฑํฉ๋๋ค.
-
HTTP Header์ ์ฟ ํค๋ฅผ ํฌํจํด ์๋ต
- ์๋ฒ๋ ์ฟ ํค๋ฅผ HTTP ์๋ต ํค๋์ ํฌํจํด ํด๋ผ์ด์ธํธ๋ก ์ ์กํฉ๋๋ค.
Set-Cookie: session_id=abc123; Expires=Wed, 18 Oct 2024 12:00:00 GMT
-
Browser๊ฐ ์ฟ ํค๋ฅผ PC์ ์ ์ฅ
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ฟ ํค๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค. ์ดํ ๋์ผํ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ์ด ์ฟ ํค๋ฅผ ๋ค์ ์ฌ์ฉํฉ๋๋ค.
-
Browser๊ฐ ์ข
๋ฃ๋์ด๋ ์ฟ ํค๊ฐ ๋ง๋ฃ๋์ง ์์ผ๋ฉด ์ ์ง
- ์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ์ด ์ค์ ๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํด๋ ํด๋น ์ฟ ํค๋ ์ญ์ ๋์ง ์์ต๋๋ค.
-
๋์ผ ์ฌ์ดํธ ์ฌ๋ฐฉ๋ฌธ ์ ์ฟ ํค ์ ์ก
- ์ฌ์ฉ์๊ฐ ๋์ผํ ์ฌ์ดํธ๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์์ฒญ์ ํฌํจํด ์ ์กํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ์ํ๊ฐ ์ ์ง๋๊ฑฐ๋, ์ด์ ์ ๋ณด๋ ํ์ด์ง ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ์ด์ด๋ณผ ์ ์์ต๋๋ค.
๐งฉ ์ฟ ํค์ ํน์ง
-
๊ตฌ์ฑ ์์
- ์ฟ ํค๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ด๋ฆ(Name): ์ฟ ํค๋ฅผ ๊ตฌ๋ถํ๋ ๊ณ ์ ์ด๋ฆ.
- ๊ฐ(Value): ์ฟ ํค์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ.
- ๋ง๋ฃ์ผ(Expiration Date): ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ.
- ๊ฒฝ๋ก(Path): ์ฟ ํค๊ฐ ์ ์ฉ๋๋ ๊ฒฝ๋ก ์ ๋ณด.
-
ํด๋ผ์ด์ธํธ๋น ์ ์ฅ ๊ฐ๋ฅํ ์ฟ ํค ๊ฐ์
- ๋ธ๋ผ์ฐ์ ์๋ ์ด 50 ~ 180๊ฐ์ ์ฟ ํค๊ฐ ์ ์ฅ๋ ์ ์์ต๋๋ค.
์ด ๊ฐ์๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฆ
๋๋ค.
-
ํ๋์ ๋๋ฉ์ธ๋น ์ฟ ํค ์ต๋ ๊ฐ์
- ๋์ผํ ๋๋ฉ์ธ์์๋ ์ต๋ 20๊ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
-
์ฟ ํค ํฌ๊ธฐ ์ ํ
- ํ๋์ ์ฟ ํค๋ ์ต๋ 4KB(4096๋ฐ์ดํธ)๊น์ง ์ ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ์ด๊ณผํ๋ ์ฟ ํค๋ ์ ์ฅ๋์ง ์์ต๋๋ค.
๐ ์ถ๊ฐ ๋ณด์ ๊ณ ๋ ค ์ฌํญ
-
์ฟ ํค ๋ง๋ฃ์ผ ์ค์
- ์ ํจ๊ธฐ๊ฐ์ด ๊ธด ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํด๋ ๋จ์ ์์ ์ ์์ด, ๋ณด์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์๊ตฌ ์ฟ ํค๋ก ์ค์ ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก ์ค์
- ์ฟ ํค๋ฅผ ๋๋ฉ์ธ๋ณ, ๊ฒฝ๋ก๋ณ๋ก ์ ํํ๋ฉด ๋ถํ์ํ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ด๊ณ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
-
๋ธ๋ผ์ฐ์ ๋ณ ์ฟ ํค ์ฒ๋ฆฌ ์ฐจ์ด
- ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ฏธ์ธํ ์ฐจ์ด๊ฐ ์์ผ๋ฏ๋ก, ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ํ
์คํธ๊ฐ ํ์ํฉ๋๋ค.
๐ช ์ฟ ํค ์ค์ ์์
- ์ฟ ํค ์ด๋ฆ(name):
user_token
- ์ฟ ํค ๊ฐ(value):
abc123
- ์ ํจ ๊ธฐ๊ฐ(Expiration Date): 2024๋
10์ 15์ผ
- ์ ํจ ๋๋ฉ์ธ:
example.com
- ์ ์ฉ ๊ฒฝ๋ก(Path):
/account
์ด ์์๋ example.com ๋๋ฉ์ธ์์ ํน์ ๊ฒฝ๋ก์ ์ฟ ํค๊ฐ ์ด๋ป๊ฒ ์ค์ ๋๊ณ , ์ ์ก๋๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๐ ์ฟ ํค ์ค์ ๊ณผ ์ ์ก ๊ณผ์
-
ํด๋ผ์ด์ธํธ๊ฐ /home.html ํ์ด์ง ์์ฒญ
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด
/home.html์ ์ ์ํ๋ฉด ์๋ฒ๋ก GET ์์ฒญ์ด ์ ์ก๋ฉ๋๋ค.
GET /home.html HTTP/1.1
-
์๋ฒ๊ฐ ์ฟ ํค ์ค์ ๊ณผ ํจ๊ป ์๋ต
- ์๋ฒ๋
200 OK ์๋ต๊ณผ ํจ๊ป Set-Cookie ํค๋์ ์ฟ ํค ์ ๋ณด๋ฅผ ๋ด์ ์ ์กํฉ๋๋ค.
Set-Cookie: user_token=abc123;
Expires=Wed, 15 Oct 2024 09:00:00 GMT;
Domain=example.com;
Path=/account
์ฟ ํค ๊ตฌ์ฑ ์์:
user_token=abc123: ์ฟ ํค ์ด๋ฆ๊ณผ ๊ฐ
Expires: 2024๋
10์ 15์ผ๊น์ง ์ ํจ
Domain: example.com์์ ์ ํจ
Path: /account ๊ฒฝ๋ก์๋ง ์ ์ฉ
-
๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค ์ ์ฅ
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํฉ๋๋ค. ์ดํ ๋์ผํ ๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ด ์ฟ ํค๊ฐ ์๋์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
-
ํด๋ผ์ด์ธํธ๊ฐ /account/profile.html ํ์ด์ง ์์ฒญ
- ์ฌ์ฉ์๊ฐ
/account/profile.html์ ์ ์ํ ๋ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ ํค๋์ ์ฟ ํค๋ฅผ ํฌํจํด ์ ์กํฉ๋๋ค.
GET /account/profile.html HTTP/1.1
Cookie: user_token=abc123
์๋ฒ๋ ์ด ์ฟ ํค๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์์ ์ํ๋ฅผ ํ์
ํ๊ณ , ์ธ์
์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค.
๐งฉ ์ฟ ํค ์ค์ ์ ์ฃผ์ ๊ฐ๋
-
๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก ์ ํ
- ์ด ์์์์๋
example.com ๋๋ฉ์ธ๊ณผ /account ๊ฒฝ๋ก์ ์ฟ ํค๊ฐ ์ ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ๊ฒฝ๋ก๋ ๋๋ฉ์ธ์์๋ ์ฟ ํค๊ฐ ์ ์ก๋์ง ์์ต๋๋ค.
-
์ ํจ ๊ธฐ๊ฐ ์ค์
- ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ 2024๋
10์ 15์ผ๋ก ์ค์ ํ์ฌ ํด๋น ๋ ์ง๊น์ง ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์ ์งํฉ๋๋ค.
-
์ฟ ํค ์๋ ์ ์ก
- ์ค์ ๋ ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ ์กํ๋ฏ๋ก ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ์ ์งํ๊ฑฐ๋, ๋ง์ถคํ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
๐งฉ Java์์ ์ฟ ํค ์์ฑ๊ณผ ํ์ฉ ๋ฐฉ๋ฒ
๐ก ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ฃผ ์ฌ์ฉํ๋ ์ฟ ํค ๊ธฐ๋ฅ๊ณผ ์ฝ๋ ์์!
์ฟ ํค๋ ์ธ์
๊ด๋ฆฌ์ ์ฌ์ฉ์ ๋ง์ถค ๊ฒฝํ ์ ๊ณต์ ํ์์ ์ธ ๋๊ตฌ์
๋๋ค. ์ด๋ฒ ํฌ์คํ
์์๋ ์ฟ ํค์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ์ด๋ฅผ Java ์ฝ๋๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ์ค๋ฌด์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ์์ ์ ํจ๊ป ์ดํด๋ฅผ ๋์๋๋ฆด๊ฒ์! ๐
๐งฉ ์ฟ ํค์ ์ฃผ์ ๊ธฐ๋ฅ
1. ์ฟ ํค ์์ฑ (Cookie ์์ฑ)
Cookie cookie = new Cookie(String name, String value);
- ์ฟ ํค ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ด๋ฆ(name)๊ณผ ๊ฐ(value)์ ์ด๊ธฐํํฉ๋๋ค.
- ์:
Cookie("user_token", "abc123")
2. ์ฟ ํค ๊ฐ ์ค์ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ
3. ๋๋ฉ์ธ ์ค์ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ
4. ๊ฒฝ๋ก(Path) ์ค์ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ
5. ์ ํจ๊ธฐ๊ฐ ์ค์ ๋ฐ ์ญ์
6. ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ์ก
response.addCookie(cookie);
- ์๋ฒ์์ ์์ฑ๋ ์ฟ ํค๋ฅผ HTTP ์๋ต์ ์ถ๊ฐํด ํด๋ผ์ด์ธํธ๋ก ์ ์กํฉ๋๋ค.
7. ํด๋ผ์ด์ธํธ์์ ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ
Cookie[] cookies = request.getCookies();
- ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ต๋๋ค.
๐ ์ฟ ํค ํ์ฉ ์์ ์ฝ๋
์๋๋ ์ฟ ํค๋ฅผ ์์ฑํ๊ณ , ํด๋ผ์ด์ธํธ๋ก ์ ์กํ ํ ๋ค์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ์ฝ๋ ์์์
๋๋ค.
Cookie userCookie = new Cookie("user_token", "abc123");
userCookie.setDomain("example.com");
userCookie.setPath("/account");
userCookie.setMaxAge(3600);
response.addCookie(userCookie);
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("user_token".equals(cookie.getName())) {
System.out.println("User Token: " + cookie.getValue());
}
}
}
๐ ์ค๋ช
- ์ฟ ํค ์์ฑ ๋ฐ ์ค์ :
user_token์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฟ ํค๋ฅผ ์์ฑํ๊ณ , ๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ก ์ ์ก:
response.addCookie()๋ฅผ ํตํด ์ฟ ํค๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌํฉ๋๋ค.
- ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ:
request.getCookies()๋ฅผ ํตํด ์ ์ฅ๋ ์ฟ ํค๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์์ ํ์ํ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค.