๋ฐฐ๊ฒฝ์ง์
* HTTP: HyperText Transfer Protocol์ ์ฝ์๋ก, ์ธํฐ๋ท์์ ์ ๋ณด๋ฅผ ์ก์์ ํ๋ ํ๋กํ ์ฝ (๊ท์ฝ)์ ๋๋ค. HTML๋ฌธ์ ์ก์์ ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
* REST API: Repersentational State Trasfer API์ ์ฝ์๋ก, REST๋ผ๋ ๊ท์น์ ๋ง์ถฐ ๊ฐ๋ฐ ๋ฐ ์ ๊ณต๋๋ API๋ฅผ ๋งํฉ๋๋ค.
* API: Application Programming Interface์ ์ฝ์๋ก, ํน์ ์๋น์ค๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์์ ๋ค์ ์๋น์ค ๋ด๋ถ์ ๊ธฐ๋ฅ๋ค์ ์ ์ดํ ์ ์๋๋ก ๋ง๋ค์ด๋์ ์ธํฐํ์ด์ค๋ฅผ ๋งํฉ๋๋ค.
Server - Client์ ์ฐ๊ฒฐ์ ์ง
์๋ฒ๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
์ฆ ์๋ฒ๋ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง, ์ด๋ค ํ๋์ ํ๋์ง๋ฅผ ์๋ณํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์๋ณํ์ฌ ๋ณด๋ด์ฃผ์ด์ผ ํฉ๋๋ค. ๋ก๊ทธ์ธ์ด๋ ์ฅ๋ฐ๊ตฌ๋์ ์ํ๋ด๊ธฐ, ํ์๊ฐ์ ๋ฑ์ด ์ด์ ๊ด๋ จ๋ ์์ ์ ํด๋น๋ฉ๋๋ค.
ํ์ง๋ง ์น ์ก์์ ๊ณผ์ ์์ ์ฌ์ฉ๋๋ http๋ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
Connectionless (=๋น์ฐ๊ฒฐ์งํฅ): ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ๋ณด์์ ์ด๋ ์์ ์ ์์ฒญํ๋ฉด, ๊ทธ์ ๋ง๋ ์์ ์ ์๋ฃํ ํ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.Stateless (=์ํ์ ๋ณด ๋น์ ์ง): ํด๋ผ์ด์ธํธ์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ํ๋กํ ์ฝ ์์์ ๊ฐ์ง์ง ์์ต๋๋ค. ์ฆ ์ด์ ํต์ ์์ ์ฃผ๊ณ ๋ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ ํต์ ์ ๊ทธ๋๋ก ์ ์ง๋์ด ์ํฅ์ ๋ฏธ์น๊ฑฐ๋ ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
์ด๋ฐ ํน์ง๋ค์ ๊ต์ฅํ ๊ดด๋ฆฌ์ ์ธ๋ฐ, ๋ก๊ทธ์ธ์ ํ๋ค๊ณ ํด๋ ๋ค์ ํํ๋ฉด์ผ๋ก ๋์๊ฐ๋ฉด ๋ก๊ทธ์ธ์ด ํ๋ ค๋ฒ๋ฆฌ๋ ์ํฉ์ด ๋๋ค๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ฆ ์ํ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ๋๋ค์ ์๋ก์ด ๋ฐฉ๋ฒ์ ๊ณ ์ํฉ๋๋ค
1. ์ฐ๊ฒฐ์ ๋ณด๋ฅผ "ํด๋ผ์ด์ธํธ"๊ฐ ๊ธฐ์ตํ๊ฒ ํ์ (=์ฟ ํค)2. ์ฐ๊ฒฐ์ ๋ณด๋ฅผ "์๋ฒ"๊ฐ ๊ธฐ์ตํ๊ฒ ํ์ (=์ธ์ )
์ฟ ํค (Cookie)
์ฌ์ฉ์๋ฅผ ์๋ณํ๋ ์ ๋ณด๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค.๋ค์๋งํด ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ปดํจํฐ๋ด๋ถ, ์ฆ ์น๋ธ๋ผ์ฐ์ ์์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.์๋ฒ์์ ๋ณ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์๋ฒ๋ฅผ ๊ฑฐ์น๋ฉด์ ์ ๋ณด๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ๋ง์ ์๋น์ค์์๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ณ์กฐ์ ์ํ์ฑ์ด ์์ต๋๋ค.
์ฟ ํค๋ ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ์ผ, ๊ฒฝ๋ก์ ๋ณด๋ก ๊ตฌ์ฑ๋๋ฉฐ,1๊ฐ๋น 4KB, ๋๋ฉ์ธ๋น 20๊ฐ, ํด๋ผ์ด์ธํธ ๋ํฉ 300๊ฐ๊น์ง ์ ์ฅํ ์ ์์ต๋๋ค.
ํต์ ์ ์ฑ ์ ๋ฐ๋ผ ์์น์ ์ผ๋ก ํ์ฌ์ดํธ์ ์ฟ ํค๋ ๋ฐ์์ฌ ์ ์์ต๋๋ค (=> CORS ์ ์ฑ )(๋ง ์ค์ ํ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ํน์ ์ต์ ์ ์ฃผ๋ฉด ์์ ๋ฐ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค (=> cross site cookie))
์ฟ ํค๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ์๋๊ตฌ > ์ดํ๋ฆฌ์ผ์ด์ > ์ฟ ํค์์ ๋ณด์ค ์ ์์ต๋๋ค.๋ง์ฝ js๋ฅผ ํ ์ค ์์ ๋ค๋ฉด, ๊ฐ๋ฐ์๋๊ตฌ์์ ์๋ ๋ช ๋ น์ด๋ก๋ ์ฟ ํค๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.๋ค๋ง, ๋ช ๋ น์ด์ ๊ฒฝ์ฐ HttpOnly๋ก ์ค์ ๋์๋ค๋ฉด ํ์ธํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋๊ตฌ์์ ์ฟ ํค ํ์ธ:
๋ช ๋ น์ด๋ก ์ฟ ํค ํ์ธ:
์ธ์ (Session)
์ฌ์ฉ์๋ฅผ ์๋ณํ๋ ์ ๋ณด๊ฐ ์๋ฒ์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค.
๋ค์๋งํด ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋ฒ์ ํน์ ๋ฆฌ์คํธ์์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
์๋ฒ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ๋น๊ต์ ๋ณ์กฐ์ ์ํ์ฑ์ด ๋ฎ์ต๋๋ค. ํ์ง๋ง ์ฟ ํค์ ๋นํด ์๋๊ฐ ๋๋ฆฌ๊ณ , ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ๋ง์ ์๋น์ค์์๋ ๋นํจ์จ์ ์ ๋๋ค.
์ธ์ ์ ์ฟ ํค์ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด ์ ์ฅ์ฉ๋์ ์ ํ์ด ์์ต๋๋ค. ๋ง์ ์ ๋ณด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ฉด ์ธ์ ์ด ๋ ์ข์ ์๋ ์์ต๋๋ค.
์ธ์ ์ ์ค์ ๋๋ ๊ณผ์ ์ ๋ํ ์ฝ๊ฐ์ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
1. ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์ ์ํ๋ฉด, ์๋ฒ๋ ํด๋น ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ใด ์ด ์ ์ฅ๋๋ ์ ๋ณด๋ ์์์ ํค๊ฐ๊ณผ ๋์๋๋๋ฐ, ์ด ๋์๋๋ ๊ฐ์ ์ธ์ ์ฟ ํค๋ผ๊ณ ํฉ๋๋ค. 2. ์ธ์ ์ฟ ํค๊ฐ ์ค์ ๋ ๋, ์๋ฒ๋ ์ธ์ ์ด ์ค์ ๋์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ session-id๋ฅผ ๋ฐ๊ธํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ณด๋ ๋๋ค. ใด ๋ณด๋ธ session-id๋ 'JSESSIONID'๋ผ๋ ์ด๋ฆ์ผ๋ก ์ธ์ ์ฟ ํค๋ก ๋ง๋ค์ด ์๋ฒ์ ์ ์ฅํฉ๋๋ค.3. ๋ค์ ์์ฒญ๋ถํฐ ํด๋ผ์ด์ธํธ๋ JSESSIONID๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ์ session-id๋ฅผ ์ ๋ฌํ์ฌ ์๋ณํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ธ์ ๋ ์ฟ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด์ฉ๋์ง๋ง, ์๋ฒ์์ ์ ๋ณด๊ฐ ๊ด๋ฆฌ๋๋ค๋ ์ ์ด ํน์ง์ ๋๋ค.
์ฟ ํค vs ์ธ์
\ | ์ฟ ํค (Cookie) | ์ธ์ (Session) |
์ ์ฅ | ํด๋ผ์ด์ธํธ | ์๋ฒ |
ํ์ | ๋ฌธ์์ด | ๊ฐ์ฒด |
์ํ ์ข ๋ฃ | ์ค์ ๋ ์๊ฐ์ด ์ง๋ ๋ | ์ค์ ๋ ์๊ฐ์ด ์ง๋ ๋ or ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋ ๋ (๋น ๋ฅธ์ชฝ) |
์ ํ | 20๊ฐ per ๋๋ฉ์ธ / 4KB per ์ฟ ํค | ์๋ฒ์ฉ๋์ด ํ์ฉํ๋ ํ |
์๋ | ์ฟ ํค > ์ธ์ | |
๋ณด์ | ์ฟ ํค < ์ธ์ |
์๋น์ค ์ฌ์ฉ์์, ์ ์งํ ์ ๋ณด, ์ ์ง๊ธฐ๊ฐ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ ๋์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ต๊ทผ์๋ 2๊ฐ์ง๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
+) JWT
Json Web Token์ ์ฝ์๋ก, ์ธ์ฆ์ ํ์ํ json์ ๋ณด๋ค์ ์ํธํ ์ํจ ํ ํฐ์ ๋งํฉ๋๋ค.
ํ ํฐ์ 3๊ฐ์ง ์์๋ก ์ด๋ฃจ์ด์ง๋๋ค:
Header: ์ ๋ณด์ ๋ํ ์ต์ ๋ค์ ๋ด๊ณ ์์ต๋๋ค. (์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ฑ..)
Payload: ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ๋ด๊ณ ์์ต๋๋ค. (์ ์ ๊ณ ์ ID ๋ฑ..)
Verify Signature: 'Header + Payload + Secret Key'๋ ๊ฐ์ Secret Key๋ก ์ํธํํ ๊ฐ์ด ๋ค์ด๊ฐ๋๋ค.
ํ์์ ์ 3๊ฐ์ง ํ์์ .์ผ๋ก ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋๋ค. Header.Payload.VerifySignatureํํ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
Header์ Payload๋ ๋์ฝ๋ฉ๋งํ๋ฉด ๋ฐ๋ก ํ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฏผ๊ฐ์ ๋ณด๋ ์ฌ๊ธฐ์ ๋ฃ์ผ๋ฉด ์๋ฉ๋๋ค.
(๋ฐ๋ผ์ JWT ๋ํ ์ธ์ฆ์ "์ ์ง"๋ฅผ ์ํ ์๋จ์ผ๋ก ์ด์ฉํด์ผํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๊ฐ ๊ฐ์ ธ์ค๋ "์ ์ฅ์"๋ก ์ด์ฉํ๋ฉด ์๋ฉ๋๋ค.)
Header์ Payload์ ๋ณ์กฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ณํ๋๋๋ผ๋, VerifySignature์ ๊ฒฝ์ฐ ์์ 2๊ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํธํ๋์ด ์์ผ๋ฏ๋ก ์ด ์ ๋ณด๋ฅผ ํตํด JWT๋ฐ์ดํฐ์ ๋ณ์กฐ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
JWT์ ์ฅ์ ์ ์ผ๋จ ์ธ์ ๋ณด๋ค ํจ์ฌ ๊ฐํธํ๋ค๋ ์ ์ ๋๋ค. ๋ณ๋์ ์ ์ฅ์ ๊ด๋ฆฌ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ (์ฟ ํค์ ์ฅ์ ), ๋ฌธ์์ด 1๊ฐ๋ง ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ง๊ณ ์๋๋ค๋ฉด ๋ก๊ทธ์ธ์ด ๊ฐํธํ๊ฒ ์ ์ง๋ฉ๋๋ค(์ธ์ ์ ์ฅ์ ). ๋ํ ์๋ฒ๊ฐ ์์์น๋ชปํ ์ค๋ฅ๋ก ์ธํด ์ข ๋ฃ๋๋ค๊ณ ํ๋๋ผ๋ ์๋ฒ๊ฐ ๋ค์ ์คํ๋์์ ๋ ๋ก๊ทธ์ธ์ด ํ๋ฆฌ์ง ์์ต๋๋ค (๋ฌผ๋ก ์ธ์ ์ ๊ฒฝ์ฐ์๋ ์ธ์ ํ ์ด๋ธ์ ์ ์ฅํ๊ฑฐ๋ ๋ฐฑ์ ์๋ฒ์ ๊ณต์ ํ๋ค๋ฉด ํ๋ฆฌ์ง ์์ต๋๋ค).
ํ์ง๋ง JWT์ ๊ฒฝ์ฐ ํ์ทจ๋นํ์ ๋ ์๋ฒ์ธก์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ ํจ์๊ฐ์ ์ค์ด๊ณ Refresh ํ ํฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํตํด ํผํด๋ฅผ ์ต์ํํด์ผ ํฉ๋๋ค.
'๐จ Dev_BE > ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Server ] CSP (0) | 2021.09.20 |
---|---|
[ Server ] CORS (0) | 2021.09.20 |
[ REST API ] HTTP Methods (0) | 2021.09.11 |