๐ ์๋ฒ๊ธฐ๋ฐ ์ธ์ฆ(session)
- ์๋ฒ์ ์ธ์ ์ ๋ง๋ค์ด ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ, ๊ด๋ฆฌ ํ๋ค.
- ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์๋ ์ธ์ ID ๋ฅผ ์ ์ฅํ๋ ์ฟ ํค๊ฐ ์์ฑ๋๋ค. ์๋ฒ๋ ์ด ์ธ์ ID๋ฅผ ํตํด ์ฌ์ฉ์๋ฅผ ์๋ณํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ํค๋์ cookie์ ๋ํ ์ธ์ id๋ฅผ ๋ด์ ์ ์ก
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์์ ๋ณด๋ธ ์ธ์ id๋ฅผ ๋์กฐํด ์ธ์ฆ ์ํ๋ฅผ ํ์ธํจ.
์ฅ์
- ์ฟ ํค๊ฐ ๋ ธ์ถ๋๋๋ผ๋ ์ฟ ํค ์์ฒด(์ธ์ ID)๋ ์ ์๋ฏธํ ๊ฐ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
- ์ฌ์ฉ์๋ค์ ๊ฐ๊ฐ ๊ณ ์ ์ ์ธ์ ID๊ฐ์ ๋ฐ๊ธ๋ฐ๊ฒ ๋์ด, ์๋ฒ์์ ์ฟ ํค ๊ฐ์ ๋ฐ์์ ๋ ํ์์ ๋ณด๋ฅผ ํ๋ํ๋ ํ์ธํ ํ์์๋ค.
๋จ์
- ์ฟ ํค๊ฐ ํ์ทจ๋์ด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด ์๋ฒ๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง, ํด์ปค์ธ์ง ๊ตฌ๋ณํ ๋ฐฉ๋ฒ์ด ์๋ค.
๐ ํ ํฐ๊ธฐ๋ฐ ์ธ์ฆ(JWT)
- JSON Web Token ์ ์ฝ์๋ก ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ ๋ปํ๋ค.
- ์ฌ์ฉ์๋ Access Token ์ ํค๋์ ์ค์ด ์๋ฒ๋ก ๋ณด๋ธ๋ค.
- JWT์ ๊ตฌ์กฐ
- ํค๋(Header) - ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ์ ํ๊ณผ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋๊ฐ์ง ์ ๋ณด๋ฅผ JSON ํํ๋ก ๋ด๊ณ ์๋ค.
- ํ์ด๋ก๋(Payload) - ์ฌ์ฉ์์ ์ ๋ณด ํน์ ๋ฐ์ดํฐ ์์ฑ ๋ฑ์ ๋ํ๋ด๋ ํด๋ ์ ์ด๋ผ๋ ์ ๋ณด ๋จ์๋ก ๊ตฌ์ฑ๋๋ค. ํด๋ ์์ ๊ฐ๊ฐ ๋ฑ๋ก๋ ํด๋ ์, ๊ณต๊ฐ ํด๋ ์, ๋น๊ณต๊ฐ ํด๋ ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์๋ช (Signature) - ํน์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ, Base64 ์ธ์ฝ๋ฉ๋ ํค๋์, ํ์ด๋ก๋, ๋น๋ฐํค๋ฅผ ์ด์ฉํ์ฌ ์ํธํํ๋ค.
์ฅ์
- ์๋ฒ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๊ฒฝ์ฐ ๋ณ๋์ ์ ์ฅ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค. ํ์ง๋ง JWT๋ ๋ฐ๊ธํ ํ ๊ฒ์ฆ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ์ ์ฅ์๊ฐ ํ์์๋ค. ( ์๋ฒ์ ํ์ฅ๊ณผ ์ ์ง/๋ณด์ ์ ์ ๋ฆฌํ ๊ฑฐ๋ผ ์๊ฐ๋๋ค)
๋จ์
- ์ด๋ฏธ ๋ฐ๊ธ๋ JWT์ ๋ํด์๋ ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ ๋๊น์ง ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- Payload์ ์ ๋ณด๊ฐ ์ ํ์ ์ด๋ค.(๋๊ตฌ๋ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ฃ์ ์ ์๋ค)
- JWT์ ๊ธธ์ด๊ฐ ๊ธธ์ด ์๋ฒ์ ์์ ๋ญ๋น๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. โ ์๋ฒ์ธ์ฆ๋ฐฉ์์ ๋นํด ์์๋ญ๋น๊ฐ ์๋์ ์ผ๋ก ๋๋ค
Refresh Token
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ํ์
- ์ฒ์ ๋ก๊ทธ์ธ ์ Refresh Token๊ณผ Access Token ์ ๋์์ ๋ฐ๊ธํ๋ค
- AT ํ ํฐ์ ๊ฒฝ์ฐ ๋ง๋ฃ์๊ฐ (5๋ถ์์ 15๋ถ์ฌ์ด) ์ ์ ๊ฒ ์ฃผ๋๋์ RTํ ํฐ์ ๋ง๋ฃ์๊ฐ์ ๊ธธ๊ฒ ์ค๋ค.
- AT ํ ํฐ์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ RTํ ํฐ์ ์ฌ์ฉํด ATํ ํฐ์ ์ฌ๋ฐ๊ธ ๋ฐ์ ์ ์๋ค.
Base64 Encoding
- ์ธ์ฝ๋ฉ์ด๋ ์ ๋ณด์ ํํ๋ ํ์์ ํ์คํ, ๋ณด์, ์ฒ๋ฆฌ ์๋ ํฅ์, ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ์ ์ํด์ ๋ค๋ฅธ ํํ๋ ํ์์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- Base64 Encoding ์ Binary Data๋ฅผ Text๋ก ๋ฐ๊พธ๋ ์ธ์ฝ๋ฉ๋ฐฉ๋ฒ ์ค ํ๋๋ก์จ Character set์ ์ํฅ์ ๋ฐ์ง ์๋ ๊ณตํต ASCII ์์ญ์ ๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ Encoding์ด๋ค.
- Binary Data๋ฅผ 6 bit ์ฉ ์๋ฅธ ๋ค 6 bit์ ํด๋นํ๋ ๋ฌธ์๋ฅผ Base64 ์์ธํ์์ ์ฐพ์ ์นํํ๋ค. (64์ง๋ฒ)
- ๊ทธ๋ผ ์ ์ฐ๋ ?
- ๋ฌธ์๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ค๊ณ๋ Media(Email, HTML)๋ฅผ ์ด์ฉํด ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก Binary Data(์ด๋ฏธ์ง๋ ์ค๋์ค)๋ฅผ ์ ์ก ํ ํ์๊ฐ ์์ ๋, ASCII๋ก Encodingํ์ฌ ์ ์กํ๊ฒ ๋๋ฉด ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ํ์ ์ธ ๋ฌธ์ ๋ ASCII๋ 7 bits Encoding์ธ๋ฐ ๋๋จธ์ง 1bit๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ์์คํ ๋ณ๋ก ์์ดํ๋ค.
- ์ผ๋ถ ์ ์ด๋ฌธ์ (e.g. Line ending)์ ๊ฒฝ์ฐ ์์คํ ๋ณ๋ก ๋ค๋ฅธ ์ฝ๋๊ฐ์ ๊ฐ๋๋ค.
- ์ฆ, Binary Data๊ฐ ์์คํ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ผํ๊ฒ ์ ์ก ๋๋ ์ ์ฅ๋๋๊ฑธ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ ?
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํจํฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ binary๋ก ๋์ด์๋ค.
- 1 ๊ณผ 0๋ง์ ์ฌ์ฉํ์ฌ ์๋ฅผ ๋ํ๋ด๋ ์ง๋ฒ ( 2์ง๋ฒ )
๐ Reference
'Web Development > Back-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nestjs ํ๋์ ๊ธฐ๋ณธ ์ ๋ฆฌ (0) | 2023.05.01 |
---|---|
HTTP & HTTPS & SSL ์ดํดํ๊ธฐ (0) | 2023.05.01 |
Nestjs & Docker & Github Action ํ์ฉ ์๋ ๋ฐฐํฌ ๊ตฌ์ถํ๊ธฐ (2) | 2023.05.01 |
[CICD] Github Action (CI) + CodeDeploy (CD) (0) | 2022.10.10 |
Ubuntu nvm & nodejs ์ต์ ๋ฒ์ ์ค์น (0) | 2022.08.18 |