๐ช ์ฟ ํค(Cookie)๋
์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐฉ๋ฌธํ ๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋ key=value ์์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ ์์ ํ์ผ์ ๋๋ค
์น ๋ธ๋ผ์ฐ์ ๋ ์ฟ ํค๋ฅผ ์ผ์ ์๊ฐ ๋์ ์ ์ฅํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋จธ๋ฌด๋ฅด๋ ๋์ ์ ๋ณด๊ฐ ์ ์ง๋ฉ๋๋ค
์๋ฅผ ๋ค์ด ์จ๋ผ์ธ ์ผํ๋ชฐ ๋ธ๋ผ์ฐ์ ์ ๋ฏผ๊ฐํ์ง ์๊ณ ์๋น์ค ์ ๊ณต์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฟ ํค๋ก ์ค์ ํ์ฌ ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค
๋ํ ์ฟ ํค๋ HTTP ํ๋กํ ์ฝ์ ๋น์ํ์ฑ์ ๋ณด์ํ์ฌ ๋ฑ์ฅํ์ต๋๋ค ๊ทธ๋ฌ๋ ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ์ฐ์๋ ์์ฒญ์ ์๋ณํ๊ฑฐ๋ ์ฌ์ฉ์ ์ธ์ฆ์๋ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด์ ๊ณต๊ฒฉ์์ ํ์ ์ด ๋๊ธฐ ์ฝ์ต๋๋ค
๋น์ํ์ฑ : HTTP ํ๋กํ ์ฝ์ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋ ๋์ค ์ํ(Status)๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค ๋ฐ๋ผ์ HTTP ํ๋กํ ์ฝ ์ด์ ์ ๋ณด๋๋ ์์ฒญ์ด๋ ์๋ต์ ๊ธฐ์ตํ์ง ๋ชปํฉ๋๋ค ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด HTTP๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ค์ ํ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ ๋ ์ด์ ์ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ ๊ฒ์ HTTP ๋น์ํ์ฑ(Stateless)์ด๋ผ๊ณ ํฉ๋๋ค
์ ๋ฆฌ : ์ฟ ํค๋ HTTP ํ๋กํ ์ฝ์ ๋น์ํ์ฑ ํน์ง์ผ๋ก ์ฌ์ฉ์์ ์์ฒญ์ ์๋ณํ๊ฑฐ๋ ์ฌ์ฉ์์ ์ํ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค
๐ช ์ฟ ํค์ ์ฉ๋
์ผ๋ฐ์ ์ผ๋ก ์ฟ ํค๋ ์ฌ์ฉ์์ ๋ฐ์ดํฐ ์ํ๋ฅผ ๊ธฐ์ตํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค
- ์ธ์ ๊ด๋ฆฌ : ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ ๊ธฐ์ตํฉ๋๋ค
- ๊ฐ์ธํ : ์ฌ์ฉ์๋ณ ๋ง์ถคํ ๊ด๊ณ ๋ ์น ํ๊ฒฝ ์ค์ ๋ฑ ์น ์ฌ์ฉ์ ๊ฐ์ธํํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค
- ์ฌ์ฉ์ ํ๋ ์ถ์ : ์ฌ์ฉ์์ ์น์ฌ์ดํธ ์ฌ์ฉ ํจํด์ด๋ ๊ฒ์ ์ต๊ด ๋ฑ์ ๋ถ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํธํ ๋งํ ์ฝํ ์ธ ๋ฅผ ์ ์ํฉ๋๋ค
๐ช ์ฟ ํค์ ์ ํ
1. ์ธ์ ์ฟ ํค(Session Cookie)
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง๋ง ์ ํจํ ์ฟ ํค
- ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ๋จธ๋ฌด๋ฅด๋ ๋์ ์ธ์ฆ ์ ๋ณด ๋ฑ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํจ
- ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์ธ์ ์ฟ ํค๊ฐ ์ฌ๋ผ์ง
- ๋ณด์์์ ์ด์ ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ธ์ ์ ์ง์ ์ฌ์ฉ๋จ
2. ์๊ตฌ ์ฟ ํค(Persistent Cookie)
- ์ค์ ํ ์ ํจ ๊ธฐ๊ฐ ๋์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์ฟ ํค
- ์ธ์ ์ฟ ํค์ ๋์ผํ๊ฒ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํจ
- ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ ์ฟ ํค๊ฐ ์ ์ง๋์ด ์ฌ์ฌ์ฉ๋จ
- ๋ธ๋ผ์ฐ์ ์ ์ค์ ์ด๋ ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํ์ ์ญ์ ๊ฐ ๊ฐ๋ฅ
๐ช ์ฟ ํค๋ฅผ ๋ฐ๊ธํ๋ ๊ณผ์
์ฟ ํค๋ ํด๋ผ์ด์ธํธ๊ฐ HTTP ์์ฒญ์ ์์ ํ ์๋ฒ๊ฐ ์๋ต์ ํ์ ํ ๋ Set-Cookie ์๋ต ํค๋๋ฅผ ํตํด ๋ฐ๊ธ๋ฉ๋๋ค
Set-Cookie: Cookie-name=Some-Value;
Set-Cookie ์๋ต ํค๋๋ ๋ค๋ฅธ ์์ฑ๋ค์ ํตํด ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํ ์ ์์ต๋๋ค
[ Set-Cookie ์์ฑ๊ณผ ์์ ]
1. ์ด๋ฆ๊ณผ ๊ฐ ์ค์ : ์ฟ ํค์ ์ด๋ฆ๊ณผ ํด๋นํ๋ ๊ฐ์ ์ค์ [ name ]
Set-Cookie: name=value
2. ์ ํจ ๊ธฐ๊ฐ ์ค์ : ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ์ฌ ๋ง๋ฃ์ผ ์ค์ [ expires ]
( โป ์ ํจ๊ธฐ๊ฐ์ ๊ณผ๊ฑฐ๋ก ์ค์ ํ๋ฉด ์ฟ ํค๋ฅผ ์ญ์ ํ ์ ์๋ค )
Set-Cookie: name=value; expires=Sat, 06 Oct 2023 00:00:00 GMT
3. ๋๋ฉ์ธ ์ ํ : ์ฟ ํค๋ฅผ ํน์ ๋๋ฉ์ธ ๋๋ ํ์ ๋๋ฉ์ธ์ผ๋ก ์ ํํ์ฌ ์ ์ก [ domain ]
Set-Cookie: name=value; domain=mu-sa.tistory.com
4. ๊ฒฝ๋ก ์ ํ : ์ฟ ํค๋ฅผ ์ง์ ๋ ๊ฒฝ๋ก์์๋ง ์ ์ก๋๊ฒ ํจ [ path ]
Set-Cookie: name=value; path=/musa
5. ๋ณด์ ์ค์ : HTTPS ์น์ธ ๊ฒฝ์ฐ๋ง ์ฟ ํค๋ฅผ ์ ์กํ ์ ์์ผ๋ฉฐ ๋ณ๋์ ๊ฐ์ ์๊ณ , JavaScript์ ์ํ ์ ๊ทผ์ ์ ํํจ [ secure, HttpOnly ]
Set-Cookie: name=value; Secure
Set-Cookie: name=value; Secure; HttpOnly
์๋ฒ์ ์ํด ๋ฐ๊ธ๋ ์ฟ ํค๋ Set-Cookie๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ค์ ์์ฒญํ๋ฉด ์ ์ฅ๋ ์ฟ ํค๊ฐ ์๋์ผ๋ก ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค ์ด๋ ์๋ฒ๋ ๋ค์ ์ ์ก๋ ์ฟ ํค ๊ฐ์ ํ์ธํ๊ณ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ฒ ๋ฉ๋๋ค
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ก ์์ฒญํ๋ฉด ์๋ฒ๋ ํด๋น ์ฌ์ฉ์์ ์ฟ ํค ๊ฐ์ ํด๋ผ์ด์ธํธ ์ชฝ์ผ๋ก ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค ์ด๋ ์ ์ก๋ ์ฟ ํค๋ฅผ ์ด์ฉํ์ฌ foo์ ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค
๐ช ์ฟ ํค์ ๋ฌธ์ ์
์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋๋ฐ ์ฟ ํค์ ๋ง๋ฃ ์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด ์ฟ ํค๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋ฉด ์ฟ ํค๊ฐ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค ํ์ง๋ง ๋ง๋ฃ ์๊ฐ์ ์ง์ ํ๋ฉด ์ฟ ํค๊ฐ ํ์ผ๋ก ์ ์ฅ๋๋๋ฐ ์ด๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํด๋ ์ฟ ํค๊ฐ ์ญ์ ๋์ง ์์ต๋๋ค ์ด๋ด ๊ฒฝ์ฐ ํด์ปค์๊ฒ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ด๊ธด ์ฟ ํค๋ฅผ ํ์ทจํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค
( ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์กฐ์์ด ๊ฐ๋ฅํ์ฌ ๋ณด์์ด ์ทจ์ฝํ๋ค )
๐ป ์ธ์ (Session) ์ด๋?
์์ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์กฐ์ํ ์ ์๋ ์น๋ช ์ ์ธ ๋ณด์ ๋ฌธ์ ์ ์ด ์์์ต๋๋ค ์ด๋ฌํ ๋ฌธ์ ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ธ์ ์ ์ฌ์ฉํ๋๋ฐ ์ธ์ ์ ์ฟ ํค์ ๋์ผํ๊ฒ ์ผ์ ์๊ฐ ๋์ ์ฌ์ฉ์์ ์น ์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ์ ์ ์งํด ์ฃผ๋ ๊ธฐ์ ์ ๋๋ค
๋์ ์๋ฆฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญํ๋ฉด ์๋ฒ์ ์๋ต์ ํตํด ์ธ์ ID๋ฅผ ์์ฑํฉ๋๋ค ์ด ์ธ์ ID๋ฅผ ์ด์ฉํ์ฌ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ์ธ์ ID๋ฅผ ํ์ธํ์ฌ ์ ๋ณด๋ฅผ ์ ์กํฉ๋๋ค ์ด๋ฌํ ์ ์ ์ฟ ํค์ ๋น์ทํ์ง๋ง ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ์ธ์ ์ ์๋ฒ ์ธก์ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋ฉ๋๋ค
์ธ์ ์ ๋์ ๋ฐฉ์์ ์ฟ ํค์ ๋น์ทํ์ง๋ง ์๋ก ์ ์ฅ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ๊ฑธ ์๊ณ ์์ผ๋ฉด ๋ฉ๋๋ค
๐ป ์ธ์ (Session) ๋ฌธ์ ์
์ธ์ ์ ํด๋ผ์ด์ธํธ์ ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฟ ํค์ ๋นํด ์๋์ ์ผ๋ก ์์ ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค ํ์ง๋ง ์ธ์ ํ ํฐ(ID)๊ฐ ๊ณต๊ฐ์ ์ผ๋ก ๋ ธ์ถ๋๋ค๋ฉด ํด์ปค๊ฐ ํผํด์์ ์ธ์ ํ ํฐ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ ์ ์์ต๋๋ค
์ด๋ฌํ ๋ฌธ์ ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋์ ๋ฐฉ๋ฒ์ ์๋ํด ๋ด ์๋ค
1. ์ํธํ๋ HTTPS ํต์ ์ฌ์ฉ : ์๋ฌด๋๋ HTTP๋ ์ํธํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ๋๋ฌธ์ ์น ์ฌ์ดํธ์์ ์ ์ก๋ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ชฐ๋ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค ๋ฐ๋ฉด์ HTTPS๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํ๋ ํํ๋ก ์ ์กํ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก์ฑ๊ธฐ๊ฐ ํ๋ญ๋๋ค
2. ์ฟ ํค์ ๋ณด์ ์์ฑ์ ์ค์ : ์์์ ์ค๋ช ํ ์ฟ ํค์ ๋ณด์ ์์ฑ์ ํ์ฉํ ์ ์์ต๋๋ค
- Domain๊ณผ Path : ์ฟ ํค๊ฐ ์ ์ก๋ ๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก๋ฅผ ์ ํ์ ์ผ๋ก ์ค์ ํ๋ค
- Secure : HTTPS ์ฐ๊ฒฐ์ธ ๊ฒฝ์ฐ์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋๋ก ์ค์ ํ๋ค
- HttpOnly : JavaScript๋ฅผ ํตํด ์ฟ ํค์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค
[ ์ฐธ๊ณ ์๋ฃ ]
[ ์ฐธ๊ณ ์ฌ์ดํธ ]