์ฟ ํค์ ์ธ์ ์ดํดํ๊ธฐ
ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด๋ ์์ฒญ์๋ ํ ๊ฐ์ง ํฐ ๋จ์ ์ด ์๋ค. ๋ฐ๋ก ๋๊ฐ ์์ฒญ์ ๋ณด๋ด๋์ง ๋ชจ๋ฅธ๋ค๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์์ฒญ์ ๋ณด๋ด๋ IP ์ฃผ์๋ ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์๋ ์๋ค. ํ์ง๋ง ์ฌ๋ฌ ์ปดํจํฐ๊ฐ ๊ณตํต์ผ๋ก IP ์ฃผ์๋ฅผ ๊ฐ์ง๊ฑฐ๋, ํ ์ปดํจํฐ๋ฅผ ์ฌ๋ฌ ์ฌ๋์ด ์ฌ์ฉํ ์๋ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉด ๋์ง ์๋๋๊ณ ์๊ฐํ ์๋ ์๋ค. ์ ๋ต์ด๋ค. ํ์ง๋ง ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ค๋ฉด ์ฟ ํค์ ์ธ์ ์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ค. ์ฐ๋ฆฌ๊ฐ ์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํด์ ๋ก๊ทธ์ธ์ ํ ๋ ๋ด๋ถ์ ์ผ๋ก๋ ์ฟ ํค์ ์ธ์ ใ ๋ฅด ์ฌ์ฉํ๊ณ ์๋ค. ๋ก๊ทธ์ธํ ํ์๋ ์๋ก๊ณ ์นจ(์๋ก์ด ์์ฒญ)์ ํด๋ ๋ก๊ทธ์์๋์ง ์๋ ์ด์ ๋ ๋ฐ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ์ฐ๋ฆฌ๊ฐ ๋๊ตฌ์ธ์ง๋ฅผ ์ง์์ ์ผ๋ก ์๋ ค์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋๊ตฌ์ธ์ง ๊ธฐ์ตํ๊ธฐ ์ํด์, ์๋ฒ๋ ์์ฒญ์ ๋ํ ์๋ต์ ํ ๋ ์ฟ ํค๋ผ๋ ๊ฒ์ ๊ฐ์ด ๋ณด๋ธ๋ค. ์ฟ ํค๋ name=zerocho ๊ฐ์ด ๋จ์ํ 'ํค-๊ฐ'์ ์์ด๋ค. ์๋ฒ๋ก๋ถํฐ ์ฟ ํค๊ฐ ์ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์ฟ ํค๋ฅผ ์ ์ฅํด๋์๋ค๊ฐ ์์ฒญํ ๋๋ง๋ค ์ฟ ํค๋ฅผ ๋๋ดํด์ ๋ณด๋ด์ค๋ค. ์๋ฒ๋ ์์ฒญ์ ๋ค์ด์๋ ์ฟ ํค๋ฅผ ์ฝ์ด์ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ฟ ํค๊ฐ ์๋ค๋ฉด ์๋์ผ๋ก ๋๋ดํด์ ๋ณด๋ด์ฃผ๋ฏ๋ก ๋ฐ๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค. ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ๋ก ์ฟ ํค๋ฅผ ๋ณด๋ผ ๋๋ง ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์์ฑํด์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
์ฆ, ์๋ฒ๋ ๋ฏธ๋ฆฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์๋ฅผ ์ถ์ ํ ๋งํ ์ ๋ณด๋ฅผ ์ฟ ํค๋ก ๋ง๋ค์ด ๋ณด๋ด๊ณ , ๊ทธ ๋ค์๋ถํฐ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ฟ ํค๋ฅผ ๋ฐ์ ์์ฒญ์๋ฅผ ํ์ ํ๋ค. ์ฟ ํค๊ฐ ์ฐ๋ฆฌ๊ฐ ๋๊ตฌ์ธ์ง ์ถ์ ํ๊ณ ์๋ ๊ฒ์ด๋ค. ๊ฐ์ธ์ ๋ณด ์ ์ฒ ๋ฐฉ์ง๋ฅผ ์ํด ์ฟ ํค๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ง์ฐ๋ผ๋ ๋ง์ด ๋ฐ๋ก ์ด๋ฌํ ์ด์ ๋๋ฌธ์ด๋ค.
์ฟ ํค๋ ์์ฒญ๊ณผ ์๋ต์ ํค๋์ ์ ์ฅ๋๋ค. ์๋ฒ์์ ์ง์ ์ฟ ํค๋ฅผ ๋ง๋ค์ด ์์ฒญ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฃ์ด๋ณด์.
์ฟ ํค๋ name=zerocho;year=1994์ฒ๋ผ ๋ฌธ์์ด ํ์์ผ๋ก ์ค๋ฏ๋ก ์ด๋ฅผ { name: 'zerocho', year: 1994' }์ ๊ฐ์ด ๊ฐ์ฒด๋ก ๋ฐ๊พธ๋ ํจ์ parseCookies๋ฅผ ์ง์ ๋ง๋ค์๋ค.
createServer ๋ฉ์๋์ ์ฝ๋ฐฑ์์๋ ์ ์ผ ๋จผ์ req ๊ฐ์ฒด์ ๋ด๊ฒจ ์๋ ์ฟ ํค๋ฅผ ๋ถ์ํ๋ค. ์ฟ ํค๋ req.headers.cookie์ ๋ค์ด ์๋ค. req.headers๋ ์์ฒญ์ ํค๋๋ฅผ ์๋ฏธํ๋ค.
์๋ต์ ํค๋์ ์ฟ ํค๋ฅผ ๊ธฐ๋กํด์ผ ํ๋ฏ๋ก res.writeHead ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก 200์ด๋ผ๋ ์ํ ์ฝ๋๋ฅผ ๋ฃ์ด๋์๋ค. 200์ ์ฑ๊ณต์ด๋ผ๋ ์๋ฏธ์ด๋ค. ๋ ๋ฒ์งธ ์ธ์๋ก๋ ํค๋์ ๋ด์ฉ์ ์ ๋ ฅํ๋ค. Set-Cookie๋ ๋ธ๋ผ์ฐ์ ํํ ๋ค์๊ณผ ๊ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๋ผ๋ ์๋ฏธ์ด๋ค. ์ค์ ๋ก ์๋ต์ ๋ฐ์ ๋ธ๋ผ์ฐ์ ๋ mycookie=test๋ผ๋ ์ฟ ํค๋ฅผ ์ ์ฅํ๋ค.
localhost:8082์ ์ ์ํ๋ค. req.url๊ณผ cookies ๋ณ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ก๊น ํ๋๋ก ํ๋ค. req.url์ ์ฃผ์์ path์ search ๋ถ๋ถ์ ์๋ ค์ค๋ค.
๋ง์ฝ ์คํ ๊ฒฐ๊ณผ๊ฐ ์์ ๋ค๋ฅด๋ค๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ ํ์ ๋ค์ ์คํํด์ผ ํ๋ค. ๋ค๋ฅธ ์ฌ์ดํธ๋ ํ๋ก๊ทธ๋จ์ด ๋ฏธ๋ฆฌ ์ฟ ํค๋ฅผ ๋ฃ์ด๋์์ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ฒญ์ ๋ถ๋ช ํ ๋ฒ๋ง ๋ณด๋๋๋ฐ /favicon.ico์ ํจ๊ป ๋ ๊ฐ๊ฐ ๊ธฐ๋ก๋์ด ์๋ค. ์ฒซ ๋ฒ์งธ ์์ฒญ('/') ์์๋ ์ฟ ํค์ ๋ํ ์ ๋ณด๊ฐ ์๋ค๊ณ ๋์ค๊ณ , ๋ ๋ฒ์งธ ์์ฒญ('/favicon.ico')์์๋ { mycookie: 'test' }๊ฐ ๊ธฐ๋ก๋์๋ค.
ํ๋น์ฝ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์น ์ฌ์ดํธ ํญ์ ๋ณด์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ปํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ํ๋น์ฝ์ด ๋ญ์ง HTML์์ ์ ์ถํ ์ ์์ผ๋ฉด ์๋ฒ์ ํ๋น์ฝ ์ ๋ณด์ ๋ํ ์์ฒญ์ ๋ณด๋ธ๋ค. ํ์ฌ ์์ ์์ HTML์ ํ๋น์ฝ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฃ์ด๋์ง ์์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ถ๊ฐ๋ก /favicon.ico๋ฅผ ์์ฒญํ ๊ฒ์ด๋ค.
์์ฒญ ๋ ๊ฐ๋ฅผ ํตํด ์๋ฒ๊ฐ ์ ๋๋ก ์ฟ ํค๋ฅผ ์ฌ์ด ์ฃผ์์์ ํ์ธํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ์์ฒญ(/)์ ๋ณด๋ด๊ธฐ ์ ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ ํ ์ฟ ํค ์ ๋ณด๋ ๊ฐ์ง๊ณ ์์ง ์์๋ค. ์๋ฒ๋ ์๋ต์ ํค๋์ mycookie=test๋ผ๋ ์ฟ ํค๋ฅผ ์ฌ์ผ๋ผ๊ณ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ช ๋ นํ๋ค. ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ๋ ์ฟ ํค๋ฅผ ์ฌ์๊ณ , ๋ ๋ฒ์งธ ์์ฒญ(/favicon.ico)์ ํค๋์ ์ฟ ํค๊ฐ ๋ค์ด์์์ ํ์ธํ ์ ์๋ค.
์์ง๊น์ง๋ ๋จ์ํ ์ฟ ํค๋ง ์ฌ์์ ๋ฟ, ๊ทธ ์ฟ ํค๊ฐ ๋์ธ์ง๋ฅผ ์๋ณํด์ฃผ์ง ๋ชปํ๊ณ ์๋ค. ๋ค์ ์์ ์์ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
์ฟ ํค๋ฅผ ์ค์ ํ ๋ ๋ง๋ฃ ์๊ฐ(Expires)๊ณผ HttpOnly, Path ๊ฐ์ ์ต์ ์ ๋ถ์ฌํ๋ค. ์ฟ ํค๋ ์ค์ ํ ๋ ๊ฐ์ข ์ต์ ๋ค์ ๋ฃ์ ์ ์๋ค. ์ต์ ๊ฐ์๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ๋๋ค.
- ์ฟ ํค๋ช =์ฟ ํค๊ฐ : ๊ธฐ๋ณธ์ ์ธ ์ฟ ํค์ ๊ฐ์ด๋ค. mycookie=test ๋๋ naem=zerocho ๊ฐ์ด ์ค์ ํ๋ค.
- Expires=๋ ์ง : ๋ง๋ฃ ๊ธฐํ์ด๋ค. ์ด ๊ธฐํ์ด ์ง๋๋ฉด ์ฟ ํค๊ฐ ์ ๊ฑฐ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง์ด๋ค.
- Max-age=์ด : Expires์ ๋น์ทํ์ง๋ง ๋ ์ง ๋์ ์ด๋ฅผ ์ ๋ ฅํ ์ ์๋ค. ํด๋น ์ด๊ฐ ์ง๋๋ฉด ์ฟ ํค๊ฐ ์ ๊ฑฐ๋๋ค. Expires๋ณด๋ค ์ฐ์ ํ๋ค.
- Domain=๋๋ฉ์ธ๋ช : ์ฟ ํค๊ฐ ์ ์ก๋ ๋๋ฉ์ธ์ ํน์ ํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ ๋๋ฉ์ธ์ด๋ค.
- Path=URL : ์ฟ ํค๊ฐ ์ ์ก๋ URL์ ํน์ ํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ '/'์ด๊ณ ์ด ๊ฒฝ์ฐ ๋ชจ๋ URL์์ ์ฟ ํค๋ฅผ ์ ์กํ ์ ์๋ค.
- Secure : HTTPS์ผ ๊ฒฝ์ฐ์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋ค.
- HttpOnly : ์ค์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฟ ํค์ ์ ๊ทผํ ์ ์๋ค. ์ฟ ํค ์กฐ์์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์ํ๋ ๋๋ก ๋์ํ๊ธฐ๋ ํ์ง๋ง ์ด ๋ฐฉ์์ ์๋นํ ์ํํ๋ค. ํ์ฌ Application ํญ์์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ์ฟ ํค๊ฐ ๋ ธ์ถ๋์ด ์๋ค. ๋ํ, ์ฟ ํค๊ฐ ์กฐ์๋ ์ํ๋ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฆ ๊ฐ์ ๋ฏผ๊ฐํ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ฟ ํค์ ๋ฃ์ด๋๋ ๊ฒ์ ์ ์ ํ์ง ๋ชปํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ์๋ฒ๊ฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ก ๋ง๋ค ์ ์๋ค.
์ด ๋ฐฉ์์ด ์ธ์ ์ด๋ค. ์๋ฒ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์๋ ์ธ์ ์์ด๋๋ก๋ง ์ํตํ๋ค. ์ธ์ ์์ด๋๋ ๊ผญ ์ฟ ํค๋ฅผ ์ฌ์ฉํด์ ์ฃผ๊ณ ๋ฐ์ง ์์๋ ๋๋ค. ํ์ง๋ง ๋ง์ ์ก ์ฌ์ดํธ๊ฐ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค. ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌผ๋ก ์ค์ ๋ฐฐํฌ์ฉ ์๋ฒ์์๋ ์ธ์ ์ ์์ ๊ฐ์ด ๋ณ์์ ์ ์ฅํ์ง ์๋๋ค. ์๋ฒ๊ฐ ๋ฉ์ถ๊ฑฐ๋ ์ฌ์์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ณ์๊ฐ ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด ์ธ์ ์ ์ ์ฅํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ ์๊ธด๋ค. ๊ทธ๋์ ๋ณดํต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ์ด๋๋ค.
์๋น์ค๋ฅผ ์๋ก ๋ง๋ค ๋๋ง๋ค ์ฟ ํค์ ์ธ์ ์ ์ง์ ๊ตฌํํ ์๋ ์๋ค. ๊ฒ๋ค๊ฐ ์ง๊ธ ์ฝ๋๋ก๋ ์ฟ ํค๋ฅผ ์ ์ฉํ ์ฌ๋ฌ ๊ฐ์ง ์ํ์ ๋ฐฉ์ดํ์ง๋ ๋ชปํ๋ค. ์์ ๋ฐฉ์ ์ญ์ ์ธ์ ์์ด๋ ๊ฐ์ด ๊ณต๊ฐ๋์ด ์์ด ๋์ถ๋๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ๋๋ก ์์ ์ฝ๋๋ฅผ ์ค์ ์๋น์ค์ ์ฌ์ฉํด์๋ ์ ๋๋ค.
'Dev.log > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js ๊ต๊ณผ์] #11. https์ http2 (0) | 2021.07.02 |
---|---|
[Node.js ๊ต๊ณผ์] #10. REST API์ ๋ผ์ฐํ (0) | 2021.06.30 |
[Node.js ๊ต๊ณผ์] #8. ์์ฒญ๊ณผ ์๋ต ์ดํดํ๊ธฐ (0) | 2021.06.29 |
[Node.js ๊ต๊ณผ์] #7. ์์ธ ์ฒ๋ฆฌํ๊ธฐ (0) | 2021.06.29 |
[Node.js ๊ต๊ณผ์] #6. ์ด๋ฒคํธ ์ดํดํ๊ธฐ (0) | 2021.06.29 |