[250213] TIL
์ค๋ ํ ๊ฒ
๋ธ๋ผ์ฐ์ ๋์ ๋ฐฉ์ ๋ธ๋ก๊ทธ ๊ธ ์์ฑ
Stateful๊ณผ Stateless ์ฐจ์ด
Stateful
ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ๋จ๊ณ์์ ์ ๊ณตํ ๊ฐ์ ์๋ฒ๊ฐ ์ ์ฅํ๊ณ ์ดํ์๋ ์ ์ง
Stateless
ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ๋จ๊ณ์์ ์ ๊ณตํ ๊ฐ์ ์๋ฒ๊ฐ ์ ์ฅํ์ง ์์
HTTP๋ Stateless ํ๋กํ ์ฝ์ด๋ผ๊ณ ํฉ๋๋ค. Stateless์ ์๋ฏธ๋ ๋ฌด์์ด๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ํ๋ ์ธ์ ์ ์ ์งํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํ๋์?
A. Stateless ํ๋กํ ์ฝ์ด๋, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ฅผ ๋ณด์กดํ์ง ์๊ณ ์์ฒญ์ ๋ํ ์๋ต๋ง ๋ณด๋ด์ฃผ๋ ํ๋กํ ์ฝ์ ์๋ฏธํฉ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด์๋ ์ฟ ํค, ์ธ์ , JWT๋ฅผ ์ด์ฉํฉ๋๋ค. ์ฟ ํค๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ฒญ ์๋ง๋ค ์๋ฒ๋ก ์ ์ก๋๋ ๊ฒ์ ๋๋ค. ์ธ์ ์ด๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, JWT๋ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ์๋ฒ์ ์์ฒญํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฟ ํค๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์๋์ผ๋ก ์ ์ฅ๋๊ณ , ์ธ์ ์ ์๋ฒ์์ ์๋์ผ๋ก ์ ์ฅ/๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ ์ ๊ฐ ์ธ์ํ์ง ๋ชปํ ์ฑ ๋์ํฉ๋๋ค. ํ์ง๋ง, JWT๋ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํ ํฐ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค๋ ์ฐจ์ด์ ์ด ์กด์ฌํฉ๋๋ค.
HTTP ๋ฉ์๋๋?
HTTP ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์์ฒญ๊ณผ ์๋ต์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
๋ฉฑ๋ฑ์ฑ(Idempotent)์ด๋?
๋ฉฑ๋ฑ์ฑ์ด๋ ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋ ์ฑ์ง์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ์ซ์์ 1์ ๊ณฑํ๋ ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ํํด๋ ์ฒ์ 1์ ๊ณฑํ ๊ฒ๊ณผ ๊ฐ์ ์ซ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ 1์ ๊ณฑํ๋ ์ฐ์ฐ์ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋ค๊ณ ํ ์ ์๋ค.
HTTP ์ฃผ์ ๋ฉ์๋์ ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ ์ฌ๋ถ
๋ฉ์๋ | ๋ฉฑ๋ฑ์ฑ ์ฌ๋ถ |
---|---|
GET | O |
POST | X |
PUT | O |
PATCH | X |
DELETE | O |
์์ ์ฑ์ด๋?
์๋ฒ์ ์ํ(๋ฐ์ดํฐ)๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค. ์ฆ, ์์ ์ฑ์ ๋ณด์ฅํ๋ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋๋ผ๋ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
HTTP ์ฃผ์ ๋ฉ์๋์ ์์ ์ฑ ๋ณด์ฅ ์ฌ๋ถ
๋ฉ์๋ | ์์ ์ฑ ์ฌ๋ถ |
---|---|
GET | O |
POST | X |
PUT | X |
PATCH | X |
DELETE | X |
Server์ Web Application Server ์ฐจ์ด
์น์๋ฒ WS
- ์ ์ ์ปจํ ์ธ ์ ์ ๋ฌ์ด ํต์ฌ
- ๋ฐ๋ก WAS๊ฐ ํ์ํ๊ฑด ์๋๋๋ค. ์น ์๋ฒ๋ง์ผ๋ก ๋์ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ค์ํ ๋ฐฉ์์ด ์ฌ์ฉ (CGI)
์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ WAS
- ๋์ ์ปจํ ์ธ ์ ์ ๋ฌ์ด ํต์ฌ
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋น์ฆ๋์ค ๋ก์ง์ ํจ์จ์ ์ธ ์คํ์ ์ํด ๋ฑ์ฅํ ๊ฐ๋
- WAS์ ํ์๋ชฉ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ์น ์๋ฒ์์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ๊ฐ์ ์ํค๊ธฐ ์ํจ
์ถ๊ฐ๋ก ์๋ฉด ์ข์ ์
- ๋ณด์ (์ธ๋ถ๋ง๊ณผ ๋ด๋ถ๋ง)
- ๋ก๋๋ฐธ๋ฐ์
- ์น์๋ฒ๋ก๋ ๋์ ์ปจํ ์ธ ์์ฑ์ด ๊ฐ๋ฅํ๋ค
์ ์ ์น ํ์ด์ง์ ๋์ ์น ํ์ด์ง์ ์ฐจ์ด
- ์ ์ ์น ํ์ด์ง๋ ์๋ฒ์์ ๋ฏธ๋ฆฌ ์ ์ ์ธ ์ปจํ ์ธ ๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์
- ๋์ ์น ํ์ด์ง๋ ์๋ฒ์์ ๋์ ์ผ๋ก ์ปจํ ์ธ ๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์
ํ๋ก ๋น๊ต ์ ๋ฆฌ
๊ตฌ๋ถ | ์ ์ ์น ํ์ด์ง | ๋์ ์น ํ์ด์ง |
---|---|---|
๋ฐ์ดํฐ ๋ณ๊ฒฝ | HTML ํ์ผ ์ง์ ์์ ํ์ | ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฐ๊ณต ํ ์ ๊ณต |
์๋ต ์๋ | ๋น ๋ฆ (๊ทธ๋ฅ HTML ์ ๊ณต) | ์๋์ ์ผ๋ก ๋๋ฆผ (์๋ฒ ์ฒ๋ฆฌ ํ์) |
์๋ฒ ๋ถํ | ๊ฑฐ์ ์์ | ์์ฒญ๋ง๋ค ์๋ฒ์์ HTML ์์ฑ ํ์ |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ | ์ฌ์ฉ ์ ํจ | ์ฌ์ฉ ๊ฐ๋ฅ |
๋ณด์์ฑ | ๋์ (๋จ์ HTML ์ ๊ณต) | ์๋์ ์ผ๋ก ๋ฎ์ (๋ณด์ ๊ด๋ฆฌ ํ์) |
์ฌ์ฉ ์์ | ํฌํธํด๋ฆฌ์ค, ์๊ฐ ํ์ด์ง | ์ผํ๋ชฐ, SNS, ๊ฒ์ ์์ง |
JWTํ ํฐ์ด ํ์ทจ ๋นํ์๋ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ
XSS (Cross-Site Scripting) ๊ณต๊ฒฉ
- HttpOnly ์ฟ ํค ์ฌ์ฉ โ JavaScript์์ JWT ์ ๊ทผ์ ์ฐจ๋จํ๋ค.
- CSP(Content Security Policy) ์ ์ฉ โ ์ ์ฑ ์คํฌ๋ฆฝํธ ์คํ์ ๋ฐฉ์งํ๋ค.
- ์
๋ ฅ ๊ฐ ๊ฒ์ฆ ๋ฐ ํํฐ๋ง โ
<script>
ํ๊ทธ ์ฝ์ ์ ๋ฐฉ์งํ๋ค.
MITM (Man-in-the-Middle) ๊ณต๊ฒฉ
- HTTPS ์ฌ์ฉ โ ํต์ ์ํธํ๋ฅผ ํตํด ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
- TLS(Transport Layer Security) ํต์ โ ํต์ ์ํธํ๋ฅผ ํตํด ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
- ์ต์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ โ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ฐํ๋ฅผ ํตํด ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
๋ก์ปฌ ์ ์ฅ์ ์ ์ถ
- HttpOnly ์ฟ ํค ์ฌ์ฉ
- Secure ์ฟ ํค ์์ฑ ์ฌ์ฉ
- JWT ๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ์ง ์๋๋ค.
์๋ชป๋ ํ ํฐ ์ ์ฅ ๋ฐ ๊ณต์
- JWT๋ฅผ URL์ ํฌํจํ์ง ์๊ณ , HTTP ํค๋(Authorization: Bearer โฆ)๋ก ์ ์กํ๋ค.
- ํ ํฐ์ Secure ์ฟ ํค์ ์ ์ฅํ๊ณ , ํ์ํ ๋๋ง ์ ๊ทผํ๋ค.
์ทจ์ฝํ Refresh Token ๊ด๋ฆฌ
- Refresh Token์ HttpOnly & Secure ์ฟ ํค์ ์ ์ฅํ๋ค.
- Refresh Token์ ์ฌ์ฉํ ๋๋ง๋ค ์ฌ๋ฐ๊ธํ๊ณ , ์ด์ Refresh Token์ ํ๊ธฐํ๋ค.
- Refresh Token์ ์๋ฒ์์ ๊ด๋ฆฌํ๊ณ , ์ฌ์ฌ์ฉ ๋ฐฉ์ง(Rotation) ์ ์ฑ ์ ์ ์ฉํ๋ค.
Leave a comment