์ฟ ํค(Cookie)
์ฟ ํค๋ ์น ์๋ฒ๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํ๋ ์์ ํ
์คํธ ๋ฐ์ดํฐ์ด๋ค. HTTP๋ ๋ณธ์ง์ ์ผ๋ก ๋ฌด์ํ(stateless) ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์, ์์ฒญ๊ณผ ์์ฒญ ์ฌ์ด์ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํ ์ ์๋๋ฐ ์ฟ ํค๋ ์ด ํ๊ณ๋ฅผ ๋ณด์ํ์ฌ, ์ฌ์ฉ์ ์ํ๋ฅผ ๊ธฐ์ตํ๋ ์ญํ ์ ํ๋ค.
์ด์ ํฌ์คํ
์์์ ์ธ์
์ธ์ฆ์ ์ฌ์ฉ๋๋ ๊ฒ ์ธ์๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ์ํ์ ๊ธฐ์ตํ๊ฑฐ๋ ๋คํฌ ๋ชจ๋/์ธ์ด ์ค์ ๋ฑ์ ์ ์งํ๋๋ฐ์๋ ์ฌ์ฉ๋๋ค.
์ฟ ํค๋ ์์ฃผ ๋จ์ํ ๋์ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์๋์ ๊ฐ๋ค.
- ์๋ฒ๊ฐ ์๋ตํ ๋ Set-Cookie ํค๋๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค๋ฅผ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์์ ์ฟ ํค๋ฅผ ์์ฑ ๋๋ ์ ๋ฌ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅ
- ์ดํ ๊ฐ์ ๋๋ฉ์ธ์ ์๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ์๋์ผ๋ก ์ฟ ํค๋ฅผ ์์ฒญ ํค๋์ ํฌํจ
์ฟ ํค์ ๊ตฌ์ฑ์์
์ฟ ํค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ํ ํค-๊ฐ ํํ๋ก ์ ์ฅ๋์ง๋ง, ๋ช ๊ฐ์ง ์ต์
์ ์ถ๊ฐํ์ฌ ๋ณด์์ฑ๊ณผ ์ ํจ ๋ฒ์๋ฅผ ์กฐ์ ํ ์ ์๋ค.
- Name: ์ฟ ํค์ ์ด๋ฆ
- Value: ์ฟ ํค์ ์ ์ฅ๋ ๊ฐ
- Domain: ์ฟ ํค๊ฐ ์ ์ฉ๋ ๋๋ฉ์ธ
- Path: ์ฟ ํค๊ฐ ์ ์ฉ๋ URL ๊ฒฝ๋ก
- Expires / Max-Age: ์ฟ ํค ๋ง๋ฃ ์๊ฐ ์ง์ (์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ ์ ์ญ์ )
- Secure: HTTPS ์ฐ๊ฒฐ์์๋ง ์ฟ ํค๋ฅผ ์ ์ก
- HttpOnly: ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ทผ ๋ถ๊ฐ (XSS ๊ณต๊ฒฉ ๋ฐฉ์ง)
- SameSite: ์ธ๋ถ ์ฌ์ดํธ ์์ฒญ ์ ์ฟ ํค ์ ์ก ์ฌ๋ถ ์ ์ด (CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง)
์ฟ ํค์ ์ข ๋ฅ
โ ์ฟ ํค์ ํ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ ๊ทธ ์ข
๋ฅ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋๋ ์ ์๋ค.
- ์ธ์ ์ฟ ํค(Session Cookie): ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง (์์ ๋ก๊ทธ์ธ ์ํ ์ ์ง ๋ฑ)
- ์์ ์ฟ ํค(Persistent Cookie): ๋ง๋ฃ ๊ธฐ๊ฐ์ด ์ค์ ๋ ์ฟ ํค. ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ป๋ค ์ผ๋ ์ ์ง๋จ
- 1st Party Cookie: ํ์ฌ ์ ์ํ ์ฌ์ดํธ๊ฐ ๋ฐ๊ธํ ์ฟ ํค
- 3rd Party Cookie: ๊ด๊ณ , ๋ถ์ ์๋น์ค ๋ฑ ์ธ๋ถ ๋๋ฉ์ธ์ด ๋ฐ๊ธํ ์ฟ ํค
๋จ์
- ๋ณด์ ์ํ (XSS, CSRF์ ๋ ธ์ถ๋ ์ ์์)
- ๋งค ์์ฒญ๋ง๋ค ์ ์ก๋๋ฏ๋ก ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
- ์ ์ฅ ์ฉ๋ ์ ํ (๋๋ฉ์ธ๋น ์ฝ 4KB, 20~50๊ฐ ์ ๋)