Web
๋ธ๋ผ์ฐ์ ๋์ ๋ฐฉ๋ฒ
"๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์ธ์?"
์น ์ํํ๋ค๋ณด๋ฉด ์ฐ๋ฆฌ๋ ์ฌ๋ฌ url์ ํตํด ์ฌ์ดํธ๋ฅผ ๋์๋ค๋๋ค. ์ด url์ด ์ ๋ ฅ๋์์ ๋ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ์ ์ถ๋ ฅ๋๋๊ฑธ๊น?
web์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ด์ง๋ง ์ค๋ช ํ๊ธฐ ๋ฌด์ง ์ด๋ ต๋ค.. ๋ ๋๋ง..? ํ์ฑ..?
๋ธ๋ผ์ฐ์ ์ฃผ์ ์ฐฝ์http://naver.com์ ์ ๋ ฅํ์ ๋ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ์ ๋ค์ด๋ฒ ํ์ด์ง๊ฐ ํ๋ฉด์ ๋ณด์ด๋ ์ง ์์๋ณด์
์คํ ์์ค ๋ธ๋ผ์ฐ์ (ํฌ๋กฌ, ํ์ด์ดํญ์ค, ์ฌํ๋ฆฌ ๋ฑ)๋ก ์ ์ํ์ ๋๋ก ์ ๋ฆฌ
โจ ๋ธ๋ผ์ฐ์ ์ฃผ์ ๊ธฐ๋ฅ
์ฌ์ฉ์๊ฐ ์ ํํ ์์์ ์๋ฒ์ ์์ฒญ, ๋ธ๋ผ์ฐ์ ์ ํ์
์์์ html ๋ฌธ์, pdf, image ๋ฑ ๋ค์ํ ํํ
์์์ ์ฃผ์๋ URI์ ์ํด ์ ํด์ง
๋ธ๋ผ์ฐ์ ๋ html๊ณผ css ๋ช ์ธ์ ๋ฐ๋ผ html ํ์ผ์ ํด์ํด์ ํ์ํจ
์ด '๋ช
์ธ'๋ ์น ํ์คํ ๊ธฐ๊ตฌ์ธ W3C(World wide web Consortium)
์์ ์ ํด์ง
์์ ๋ธ๋ผ์ฐ์ ๋ค์ ์ผ๋ถ๋ง ๋ช ์ธ์ ๋ฐ๋ผ ๊ตฌํํ๊ณ ๋ ์์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฅํ์
(๊ฒฐ๊ตญ ์ฌ๊ฐํ ํธํ์ฑ ๋ฌธ์ ๋ฐ์... ๊ทธ๋์ ์์ฆ์ ๋๋ถ๋ถ ๋ชจ๋ ํ์ค ๋ช ์ธ๋ฅผ ๋ฐ๋ฆ)
๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง ์ธํฐํ์ด์ค๋ ๋ณดํต ๋น์ท๋น์ทํ ์์๋ค์ด ์กด์ฌ
์๊ฐ์ด ์ง๋๋ฉด์, ์ฌ์ฉ์์๊ฒ ํ์ํ ์๋น์ค๋ค๋ก ์๋ก ๋ชจ๋ฐฉํ๋ฉฐ ๊ฐ์ถฐ์ง๊ฒ ๋ ๊ฒ
URI ์ ๋ ฅํ๋ ์ฃผ์ ํ์ ์ค
์ด์ ๋ฒํผ, ๋ค์ ๋ฒํผ
๋ถ๋งํฌ(์ฆ๊ฒจ์ฐพ๊ธฐ)
์๋ก ๊ณ ์นจ ๋ฒํผ
ํ ๋ฒํผ
โจ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ

โจ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
์ฃผ์ ํ์์ค, ์ด์ /๋ค์ ๋ฒํผ, ๋ถ๋งํฌ ๋ฑ ์ฌ์ฉ์๊ฐ ํ์ฉํ๋ ์๋น์ค๋ค (์์ฒญํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฐฝ์ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ)
โจ ๋ธ๋ผ์ฐ์ ์์ง
์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ ๋๋ง ์์ง ์ฌ์ด์ ๋์ ์ ์ด
โจ ๋ ๋๋ง ์์ง
์์ฒญํ ์ฝํ ์ธ ํ์ (html ์์ฒญ์ด ๋ค์ด์ค๋ฉด? โ html, css ํ์ฑํด์ ํ๋ฉด์ ํ์)
โจ ํต์
http ์์ฒญ๊ณผ ๊ฐ์ ๋คํธ์ํฌ ํธ์ถ์ ์ฌ์ฉ (ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ธ ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑ๋์ด์์)
โจ UI ๋ฐฑ์๋
ํ๋ซํผ์์ ๋ช ์ํ์ง ์์ ์ผ๋ฐ์ ์ธํฐํ์ด์ค. ์ฝค๋ณด ๋ฐ์ค ์ฐฝ๊ฐ์ ๊ธฐ๋ณธ์ ์ฅ์น๋ฅผ ๊ทธ๋ฆผ
โจ ์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํ
โจ ์๋ฃ ์ ์ฅ์
์ฟ ํค ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ์์์ ํ๋ ๋์คํฌ์ ์ ์ฅํ๋ ๊ณ์ธต
โจ ๋ ๋๋ง์ด๋?
์น ๋ถ์ผ๋ฅผ ๊ณต๋ถํ๋ค๋ณด๋ฉด ๋ ๋๋ง์ด๋ผ๋ ๋ง์ ๋ง์ด ๋ณธ๋ค. ๋์ ๊ณผ์ ์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด์
๋ ๋๋ง ์์ง์ ์์ฒญ ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํ์ํด์ค๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก html, xml ๋ฌธ์์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ์ ์์
์ถ๊ฐ๋ก ํ๋ฌ๊ทธ์ธ์ด๋ ๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ผ๋ก pdf ๋ฑ ๋ค๋ฅธ ์ ํ๋ ํ์๊ฐ ๊ฐ๋ฅํจ
(์ถ๊ฐ๋ก ํ์ฅ์ด ํ์ํ ์ ํ์ ๋ฐ๋ก ๋จ์ง ์๊ณ ํ์ ์ผ๋ก ํ์ฅ ์ฌ๋ถ๋ฅผ ๋ฌป๋ ๊ฒ์ ๋ณผ ์ ์์ ๊ฒ์)
โจ ๋ ๋๋ง ์์ง ์ข
๋ฅ
ํฌ๋กฌ, ์ฌํ๋ฆฌ : ์นํท(Webkit) ์์ง ์ฌ์ฉ
ํ์ด์ดํญ์ค : ๊ฒ์ฝ(Gecko) ์์ง ์ฌ์ฉ
์นํท(Webkit) : ์ต์ด ๋ฆฌ๋ ์ค ํ๋ซํผ์ ๋์ํ๊ธฐ ์ํ ์คํ์์ค ์์ง (์ ํ์ด ๋งฅ๊ณผ ์๋์ฐ์์ ์ฌํ๋ฆฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์์ ์ ๋ํ์)
โจ ๋ ๋๋ง ๋์ ๊ณผ์

`๋จผ์ html ๋ฌธ์๋ฅผ ํ์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฝํ ์ธ ํธ๋ฆฌ ๋ด๋ถ์์ ํ๊ทธ๋ฅผ ๋ชจ๋ DOM ๋ ธ๋๋ก ๋ณํํ๋ค.
๊ทธ ๋ค์ ์ธ๋ถ css ํ์ผ๊ณผ ํจ๊ป ํฌํจ๋ ์คํ์ผ ์์๋ฅผ ํ์ฑํ๋ค.
์ด ์คํ์ผ ์ ๋ณด์ html ํ์ ๊ท์น์ ๋ ๋ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅด๋ ๋ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
์ด๋ ๊ฒ ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ ์ ํด์ง ์์๋๋ก ํ๋ฉด์ ํ์๋๋๋ฐ, ์์ฑ ๊ณผ์ ์ด ๋๋ฌ์ ๋ ๋ฐฐ์น๊ฐ ์งํ๋๋ฉด์ ๋ ธ๋๊ฐ ํ๋ฉด์ ์ ํํ ์์น์ ํ์๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ดํ์ UI ๋ฐฑ์๋์์ ๋ ๋ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ๊ฐ๋ก์ง์ผ๋ฉฐ ํ์์ ๋ง๋๋ ๊ทธ๋ฆฌ๊ธฐ ๊ณผ์ ์ด ์งํ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ด ์ ์ง์ ์ผ๋ก ์งํ๋๋ฉฐ, ๋ ๋๋ง ์์ง์ ์ข๋ ๋น ๋ฅด๊ฒ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ํด ๋ชจ๋ html์ ํ์ฑํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐฐ์น์ ๊ทธ๋ฆฌ๊ธฐ ๊ณผ์ ์ ์์ํ๋ค. (๋ง์น ๋น๋๊ธฐ์ฒ๋ผ..?)
์ ์ก์ ๋ฐ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋์์ ๋ฐ์ ๋ด์ฉ์ ๋จผ์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค (์ฐ๋ฆฌ๊ฐ ์นํ์ด์ง์ ์ ์ํ ๋ ํ๊บผ๋ฒ์ ๋จ์ง ์๊ณ ์ ์ ํ๋ฉด์ ๋์ค๋ ๊ฒ์ด ์ด ๋๋ฌธ!!!)`
DOM์ด๋?
Document Object Model(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ)
์นํ์ด์ง ์์ค๋ฅผ ๊น๋ณด๋ฉด <html>, <body>
์ ๊ฐ์ ํ๊ทธ๋ค์ด ์กด์ฌํ๋ค. ์ด๋ฅผ Javascript๊ฐ ํ์ฉํ ์ ์๋ ๊ฐ์ฒด๋ก ๋ง๋ค๋ฉด ๋ฌธ์ ๊ฐ์ฒด
๊ฐ ๋๋ค.
๋ชจ๋ธ์ ๋ง ๊ทธ๋๋ก, ๋ชจ๋ํ๋ก ๋ง๋ค์๋ค๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ์ธ์ํ๋ค๋ผ๊ณ ํด์ํ๋ฉด ๋๋ค.
์ฆ, DOM์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ html ํ์ด์ง๋ฅผ ์ธ์ํ๋ ๋ฐฉ์์ ๋งํ๋ค. (ํธ๋ฆฌ๊ตฌ์กฐ)
โจ ์นํท ๋์ ๊ตฌ์กฐ
์ดํ์น๋จผํธ : ์นํท์ด ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด DOM ๋ ธ๋์ ์คํ์ผ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ๋ ๊ณผ์
์ด์ ์กฐ๊ธ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์งํ ๋ฐฉ์์ด ์ดํด๋๊ธฐ ์์ํ๋ค..ใ ใ
โจ ํ์ฑ๊ณผ DOM ํธ๋ฆฌ ๊ตฌ์ถ
ํ์ฑ์ด๋ผ๋ ๋ง๋ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค.
ํ์ฑ์ ๋ ๋๋ง ์์ง์์ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ด๋ค.
โจ ํ์ฑ(parsing)
๋ฌธ์ ํ์ฑ์, ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ณํํ๋ ๊ฒ
๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ , ์ดํ ๋ถ์๊ณผ ๊ตฌ๋ฌธ ๋ถ์ ๊ณผ์ ์ ๊ฑฐ์ณ ํ์ฑ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ค.
์กฐ๊ธ ๋ณต์กํ๋ฐ, ์ดํ ๋ถ์๊ธฐ๋ฅผ ํตํด ์ธ์ด์ ๊ตฌ๋ฌธ ๊ท์น์ ๋ฐ๋ผ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ค. ์ด ๊ณผ์ ์์ ๊ตฌ๋ฌธ ๊ท์น๊ณผ ์ผ์นํ๋ ์ง ๋น๊ตํ๊ณ , ์ผ์นํ๋ ๋ ธ๋๋ง ํ์ฑ ํธ๋ฆฌ์ ์ถ๊ฐ์ํจ๋ค. (๋๊น์ง ๊ท์น์ด ๋ง์ง ์๋ ๋ถ๋ถ์ ๋ฌธ์๊ฐ ์ ํจํ์ง ์๊ณ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ํฌํจ๋์ด ์๋ค๋ ๊ฒ)
ํ์ ํธ๋ฆฌ๊ฐ ๋์๋ค๊ณ ํด์ ๋์ด ์๋๋ค.
์ปดํ์ผ์ ๊ณผ์ ์ผ ๋ฟ, ๋ค์ ๊ธฐ๊ณ์ฝ๋ ๋ฌธ์๋ก ๋ณํ์ํค๋ ๊ณผ์ ๊น์ง ์๋ฃ๋๋ฉด ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ด ๋์ค๊ฒ ๋๋ค.
๋ณดํต ์ด๋ฐ ํ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฌธ๋ฒ์ ๋ํ ๊ท์น ๋ถ์ฌ ๋ฑ ๋ณต์กํ๊ณ ์ต์ ํํ๊ธฐ ํ๋๋ฏ๋ก, ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ํ์ ์์ฑ๊ธฐ
๋ฅผ ๋ง์ด ํ์ฉํ๋ค.
์นํท์ ํ๋ ์ค(flex)๋ ๋ฐ์ด์จ(bison)์ ์ด์ฉํ์ฌ ์ ์ฉํ๊ฒ ํ์ฑ์ด ๊ฐ๋ฅ
์ฐ๋ฆฌ๊ฐ head ํ๊ทธ๋ฅผ ์ค์๋ก ๋น ๋จ๋ ค๋, ํ์๊ฐ ๋๋ฉด์ ์ค๋ฅ๋ฅผ ์์ ํด์ค ( head ์๋ฆฌ๋จผํธ ๊ฐ์ฒด๋ฅผ ์๋ฌต์ ์ผ๋ก ๋ง๋ค์ด์ค๋ค)
๊ฒฐ๊ตญ ์ด ํ์ฑ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ๊ณ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ DOM ํธ๋ฆฌ๊ตฌ์กฐ๋ก ๋ณํ์์ผ์ฃผ๋ ๊ฒ์ด๋ค!
โจ ์์ฝ
์ฃผ์์ฐฝ์ url์ ์ ๋ ฅํ๊ณ Enter๋ฅผ ๋๋ฅด๋ฉด, ์๋ฒ์ ์์ฒญ์ด ์ ์ก๋จ
ํด๋น ํ์ด์ง์ ์กด์ฌํ๋ ์ฌ๋ฌ ์์๋ค(text, image ๋ฑ๋ฑ)์ด ๋ณด๋ด์ง
์ด์ ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์์์ด ๋ด๊ธด html๊ณผ ์คํ์ผ์ด ๋ด๊ธด css๋ฅผ W3C ๋ช ์ธ์ ๋ฐ๋ผ ํด์ํ ๊ฒ์
์ด ์ญํ ์ ํ๋ ๊ฒ์ด '๋ ๋๋ง ์์ง'
๋ ๋๋ง ์์ง์ ์ฐ์ html ํ์ฑ ๊ณผ์ ์ ์์ํจ. html ํ์๊ฐ ๋ฌธ์์ ์กด์ฌํ๋ ์ดํ์ ๊ตฌ๋ฌธ์ ๋ถ์ํ๋ฉด์ DOM ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถ
๋ค์์ css ํ์ฑ ๊ณผ์ ์์. css ํ์๊ฐ ๋ชจ๋ css ์ ๋ณด๋ฅผ ์คํ์ผ ๊ตฌ์กฐ์ฒด๋ก ์์ฑ
์ด 2๊ฐ์ง๋ฅผ ์ฐ๊ฒฐ์์ผ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ฌ. ๋ ๋ ํธ๋ฆฌ๋ฅผ ํตํด ๋ฌธ์๊ฐ ์๊ฐ์ ์์๋ฅผ ํฌํจํ ํํ๋ก ๊ตฌ์ฑ๋ ์ํ
ํ๋ฉด์ ๋ฐฐ์น๋ฅผ ์์ํ๊ณ , UI ๋ฐฑ์๋๊ฐ ๋ ธ๋๋ฅผ ๋๋ฉฐ ํ์์ ๊ทธ๋ฆผ
์ด๋ ๋น ๋ฅธ ๋ธ๋ผ์ฐ์ ํ๋ฉด ํ์๋ฅผ ์ํด '๋ฐฐ์น์ ๊ทธ๋ฆฌ๋ ๊ณผ์ '์ ํ์ด์ง ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ฐ๊ณ ํ๊บผ๋ฒ์ ์งํ๋์ง ์์. ์์์ ์ ์ก๋ฐ์ผ๋ฉด, ๊ธฐ๋ค๋ฆฌ๋ ๋์์ ์ผ๋ถ๋ถ ๋จผ์ ์งํํ๊ณ ํ๋ฉด์ ํ์ํจ
์ฟ ํค vs ์ธ์
โจ ์ ์ฅ ์์น
์ฟ ํค : ํด๋ผ์ด์ธํธ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํ๋ ๋ฉ๋ชจ๋ฆฌ or ํ๋๋์คํฌ
์ธ์ : ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
โจ ๋ง๋ฃ ์์
์ฟ ํค : ์ ์ฅํ ๋ expires ์์ฑ์ ์ ์ํด ๋ฌดํจํ์ํค๋ฉด ์ญ์ ๋ ๋ ์ง ์ ํ ์ ์์
์ธ์ : ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์์ํ๊ฑฐ๋, ์ค์ ์๊ฐ๋์ ๋ฐ์์ด ์์ผ๋ฉด ๋ฌดํจํ ๋๊ธฐ ๋๋ฌธ์ ์ ํํ ์์ ์ ์ ์์
โจ ๋ฆฌ์์ค
์ฟ ํค : ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ณ ํด๋ผ์ด์ธํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์์ ์ฌ์ฉํ์ง ์์
์ธ์ : ์ธ์ ์ ์๋ฒ์ ์ ์ฅ๋๊ณ , ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ ๋๊ธฐ ๋๋ฌธ์ ์ธ์ ์ด ์๊ธธ ๋๋ง๋ค ๋ฆฌ์์ค๋ฅผ ์ฐจ์งํจ
โจ ์ฉ๋ ์ ํ
์ฟ ํค : ํด๋ผ์ด์ธํธ๋ ๋ชจ๋ฅด๊ฒ ์ ์๋๋ ์ฌ์ดํธ์ ์ํ์ฌ ์ค์ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฟ ํค๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฑธ ๋ง๊ณ ์ ํ ๋๋ฉ์ธ๋น 20๊ฐ, ํ๋์ ์ฟ ํค ๋น 4KB๋ก ์ ํํด ๋
์ธ์ : ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ฉด ์๋ฒ์ ์ํด ์์ฑ๋๋ฏ๋ก ๊ฐ์๋ ์ฉ๋ ์ ํ ์์
HTTP status code
ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ HTTP API๋ฅผ ํตํด ํต์ ํ๋ ๊ฒ์ด ๋๋ถ๋ถ์
์ด๋, ์๋ต ์ํ ์ฝ๋๋ฅผ ํตํด ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ผ๋ฏ๋ก API ๋ฌธ์๋ฅผ ์์ฑํ ๋ ๊ผญ ์์์ผ ํ ๊ฒ์ด HTTP status code๋ค
10x : ์ ๋ณด ํ์ธ
20x : ํต์ ์ฑ๊ณต
30x : ๋ฆฌ๋ค์ด๋ ํธ
40x : ํด๋ผ์ด์ธํธ ์ค๋ฅ
50x : ์๋ฒ ์ค๋ฅ
200๋ฒ๋ : ํต์ ์ฑ๊ณต
300๋ฒ๋ : ๋ฆฌ๋ค์ด๋ ํธ
400๋ฒ๋ : ํด๋ผ์ด์ธํธ ์ค๋ฅ
500๋ฒ๋ : ์๋ฒ ์ค๋ฅ
์น ์๋ฒ์ WAS์ ์ฐจ์ด์
์น ์๋ฒ์ was์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น? ์๋ฒ ๊ฐ๋ฐ์ ์์ด์ ๊ธฐ์ด์ ์ธ ๊ฐ๋ ์ด๋ค.
๋จผ์ , ์ ์ ํ์ด์ง์ ๋์ ํ์ด์ง๋ฅผ ์์๋ณด์

โจ Static Pages
๋ฐ๋์ง ์๋ ํ์ด์ง
์น ์๋ฒ๋ ํ์ผ ๊ฒฝ๋ก ์ด๋ฆ์ ๋ฐ๊ณ , ๊ฒฝ๋ก์ ์ผ์นํ๋ file contents๋ฅผ ๋ฐํํจ
ํญ์ ๋์ผํ ํ์ด์ง๋ฅผ ๋ฐํํจ
image, html, css, javascript ํ์ผ๊ณผ ๊ฐ์ด ์ปดํจํฐ์ ์ ์ฅ๋ ํ์ผ๋ค
โจ Dynamic Pages
์ธ์์ ๋ฐ๋ผ ๋ฐ๋๋ ํ์ด์ง
์ธ์์ ๋ด์ฉ์ ๋ง๊ฒ ๋์ ์ธ contents๋ฅผ ๋ฐํํจ
์น ์๋ฒ์ ์ํด ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ํตํด ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ (Servlet : was ์์์ ๋์๊ฐ๋ ์๋ฐ ํ๋ก๊ทธ๋จ)
๊ฐ๋ฐ์๋ Servlet์ doGet() ๋ฉ์๋๋ฅผ ๊ตฌํํจ
โจ ์น ์๋ฒ์ WAS์ ์ฐจ์ด

โจ ์น ์๋ฒ
๊ฐ๋ ์ ์์ด์ ํ๋์จ์ด์ ์ํํธ์จ์ด๋ก ๊ตฌ๋ถ๋๋ค.
ํ๋์จ์ด : Web ์๋ฒ๊ฐ ์ค์น๋์ด ์๋ ์ปดํจํฐ
์ํํธ์จ์ด : ์น ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ HTTP ์์ฒญ์ ๋ฐ๊ณ , ์ ์ ์ธ ์ปจํ ์ธ (html, css ๋ฑ)๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ
โจ ์น ์๋ฒ ๊ธฐ๋ฅ
Http ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋น์คํ๋ ๊ธฐ๋ฅ์ ๋ด๋น
์์ฒญ์ ๋ง๊ฒ ๋๊ฐ์ง ๊ธฐ๋ฅ ์ค ์ ํํด์ ์ ๊ณตํด์ผ ํ๋ค.
์ ์ ์ปจํ ์ธ ์ ๊ณต
WAS๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์์ ์ ๊ณต
๋์ ์ปจํ ์ธ ์ ๊ณต์ ์ํ ์์ฒญ ์ ๋ฌ
ํด๋ผ์ด์ธํธ ์์ฒญ์ WAS์ ๋ณด๋ด๊ณ , WAS์์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
์น ์๋ฒ ์ข ๋ฅ : Apache, Nginx, IIS ๋ฑ
โจ WAS
Web Application Server์ ์ฝ์
DB ์กฐํ ๋ฐ ๋ค์ํ ๋ก์ง ์ฒ๋ฆฌ ์๊ตฌ์ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ
HTTP๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํด์ฃผ๋ ๋ฏธ๋ค์จ์ด๋ค.
WAS๋ ์น ์ปจํ ์ด๋ ํน์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ผ๊ณ ๋ ๋ถ๋ฆผ
(์ปจํ ์ด๋๋ JSP, Servlet์ ์คํ์ํฌ ์ ์๋ ์ํํธ์จ์ด. ์ฆ, WAS๋ JSP, Servlet ๊ตฌ๋ ํ๊ฒฝ์ ์ ๊ณตํด์ค)
โจ ์ญํ
WAS = ์น ์๋ฒ + ์น ์ปจํ ์ด๋
์น ์๋ฒ์ ๊ธฐ๋ฅ๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๋ ์ญํ
๋ณด์, ์ค๋ ๋ ์ฒ๋ฆฌ, ๋ถ์ฐ ํธ๋์ญ์ ๋ฑ ๋ถ์ฐ ํ๊ฒฝ์์ ์ฌ์ฉ๋จ ( ์ฃผ๋ก DB ์๋ฒ์ ํจ๊ป ์ฌ์ฉ )
โจ WAS ์ฃผ์ ๊ธฐ๋ฅ
1.ํ๋ก๊ทธ๋จ ์คํ ํ๊ฒฝ ๋ฐ DB ์ ์ ๊ธฐ๋ฅ ์ ๊ณต
2.์ฌ๋ฌ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ
3.์ ๋ฌด ์ฒ๋ฆฌํ๋ ๋น์ฆ๋์ค ๋ก์ง ์ํ
WAS ์ข ๋ฅ : Tomcat, JBoss ๋ฑ
๊ทธ๋ผ, ๋์ ๊ตฌ๋ถํ๋ ์ด์ ๋?
โจ ์น ์๋ฒ๊ฐ ํ์ํ ์ด์
์น ์๋ฒ์์๋ ์ ์ ์ปจํ ์ธ ๋ง ์ฒ๋ฆฌํ๋๋ก ๊ธฐ๋ฅ ๋ถ๋ฐฐ๋ฅผ ํด์ ์๋ฒ ๋ถ๋ด์ ์ค์ด๋ ๊ฒ
`ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ์ง ํ์ผ(์ ์ ์ปจํ ์ธ )๋ฅผ ๋ณด๋ผ ๋..
์น ๋ฌธ์(html ๋ฌธ์)๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ง ๋ ์ด๋ฏธ์ง ํ์ผ๊ณผ ๊ฐ์ ์ ์ ํ์ผ์ ํจ๊ป ๋ณด๋ด์ง์ง ์์ ๋จผ์ html ๋ฌธ์๋ฅผ ๋ฐ๊ณ , ์ด์ ํ์ํ ์ด๋ฏธ์ง ํ์ผ๋ค์ ๋ค์ ์๋ฒ๋ก ์์ฒญํด์ ๋ฐ์์ค๋ ๊ฒ
๋ฐ๋ผ์ ์น ์๋ฒ๋ฅผ ํตํด์ ์ ์ ์ธ ํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊น์ง ๊ฐ์ง ์๊ณ ์๋จ์ ๋น ๋ฅด๊ฒ ๋ณด๋ผ ์ ์์!`
โจ WAS๊ฐ ํ์ํ ์ด์
WAS๋ฅผ ํตํด ์์ฒญ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ DB์์ ๊ฐ์ ธ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๊ฒ ๊ทธ๋๋ง๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ณ ์ ๊ณตํ๋ฉด์ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
`๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํด์ผ ํ ๋..
์น ์๋ฒ๋ง์ผ๋ก๋ ์ฌ์ฉ์๊ฐ ์ํ๋ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋ชจ๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์๋น์คํ๊ธฐ์๋ ์์์ด ์ ๋์ ์ผ๋ก ๋ถ์กฑํจ
๋ฐ๋ผ์ WAS๋ฅผ ํตํด ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค DB์ ๋น์ฆ๋์ค ๋ก์ง์ ํตํด ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด ์ ๊ณต!`
โจ ๊ทธ๋ฌ๋ฉด WAS๋ก ์น ์๋ฒ ์ญํ ๊น์ง ๋ค ์ฒ๋ฆฌํ ์ ์๋๊ฑฐ ์๋๊ฐ์?
`WAS๋ DB ์กฐํ, ๋ค์ํ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ง์คํด์ผ ํจ. ๋ฐ๋ผ์ ๋จ์ํ ์ ์ ์ปจํ ์ธ ๋ ์น ์๋ฒ์๊ฒ ๋งก๊ธฐ๋ฉฐ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌ์์ผ ์๋ฒ ๋ถํ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ
๋ง์ฝ WAS๊ฐ ์ ์ ์ปจํ ์ธ ์์ฒญ๊น์ง ์ฒ๋ฆฌํ๋ฉด, ๋ถํ๊ฐ ์ปค์ง๊ณ ๋์ ์ปจํ ์ธ ์ฒ๋ฆฌ๊ฐ ์ง์ฐ๋๋ฉด์ ์ํ ์๋๊ฐ ๋๋ ค์ง โ ํ์ด์ง ๋ ธ์ถ ์๊ฐ ๋์ด๋๋ ๋ฌธ์ ๋ฐ์`
๋ํ, ์ฌ๋ฌ ๋์ WAS๋ฅผ ์ฐ๊ฒฐ์ง์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์น ์๋ฒ๋ฅผ ์ ๋จ์ ๋๊ณ , WAS์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ด์ฉํ์ง ๋ชปํ๊ฒ ๋ง์๋ ๋ค ์ฌ์์ํ์ฌ ํด๊ฒฐํ ์ ์์ (์ฌ์ฉ์๋ ์ค๋ฅ๋ฅผ ๋๋ผ์ง ๋ชปํ๊ณ ์ด์ฉ ๊ฐ๋ฅ)
์์ ์ด์ฉ์ ํจ์จ์ฑ ๋ฐ ์ฅ์ ๊ทน๋ณต, ๋ฐฐํฌ ๋ฐ ์ ์ง ๋ณด์์ ํธ์์ฑ ๋๋ฌธ์ ์น ์๋ฒ์ WAS๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
โจ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ
์น ์๋ฒ๋ฅผ WAS ์์ ๋๊ณ , ํ์ํ WAS๋ค์ ์น ์๋ฒ์ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ค์ ํ๋ฉด ํจ์จ์ ์ธ ๋ถ์ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ

ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋จผ์ ์น ์๋ฒ๊ฐ ๋ฐ์ ๋ค์, WAS์๊ฒ ๋ณด๋ด ๊ด๋ จ๋ Servlet์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
WAS๋ web.xml์ ์ฐธ์กฐํด ํด๋น Servlet์ ๋ํ ์ค๋ ๋๋ฅผ ์์ฑ (์ค๋ ๋ ํ ์ด์ฉ)
์ด๋ HttpServletRequest์ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํด Servlet์๊ฒ ์ ๋ฌ
์ค๋ ๋๋ Servlet์ service() ๋ฉ์๋๋ฅผ ํธ์ถ
service() ๋ฉ์๋๋ ์์ฒญ์ ๋ง๊ฒ doGet()์ด๋ doPost() ๋ฉ์๋๋ฅผ ํธ์ถ
doGet()์ด๋ doPost() ๋ฉ์๋๋ ์ธ์์ ๋ง๊ฒ ์์ฑ๋ ์ ์ ํ ๋์ ํ์ด์ง๋ฅผ Response ๊ฐ์ฒด์ ๋ด์ WAS์ ์ ๋ฌ
WAS๋ Response ๊ฐ์ฒด๋ฅผ HttpResponse ํํ๋ก ๋ฐ๊ฟ ์น ์๋ฒ๋ก ์ ๋ฌ
์์ฑ๋ ์ค๋ ๋ ์ข ๋ฃํ๊ณ , HttpServletRequest์ HttpServletResponse ๊ฐ์ฒด ์ ๊ฑฐ
OAuth
Open Authentification
์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ , ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์์๋ ๊ฐ๋ฐฉํ ํ์ค ๋ฐฉ๋ฒ
์ด๋ฌํ ๋งค์ปค๋์ฆ์ ๊ตฌ๊ธ, ํ์ด์ค๋ถ, ํธ์ํฐ ๋ฑ์ด ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์น์ฌ์ดํธ์ ๊ณ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ์ฉํด์ค๋ค.
โจ ์ฌ์ฉ ์ฉ์ด
์ฌ์ฉ์ : ๊ณ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธ
์๋น์ : OAuth๋ฅผ ์ฌ์ฉํด ์๋น์ค ์ ๊ณต์์๊ฒ ์ ๊ทผํ๋ ์น์ฌ์ดํธ or ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค ์ ๊ณต์ : OAuth๋ฅผ ํตํด ์ ๊ทผ์ ์ง์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์๋น์ ๋น๋ฐ๋ฒํธ : ์๋น์ค ์ ๊ณต์์์ ์๋น์๊ฐ ์์ ์์ ์ธ์ฆํ๊ธฐ ์ํ ํค
์์ฒญ ํ ํฐ : ์๋น์๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ๊ถํ์ ์ธ์ฆ๋ฐ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์
์ ๊ทผ ํ ํฐ : ์ธ์ฆ ํ์ ์ฌ์ฉ์๊ฐ ์๋น์ค ์ ๊ณต์๊ฐ ์๋ ์๋น์๋ฅผ ํตํด ๋ณดํธ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ํค ๊ฐ
ํ ํฐ ์ข ๋ฅ๋ก๋ Access Token๊ณผ Refresh Token์ด ์๋ค.
Access Token์ ๋ง๋ฃ์๊ฐ์ด ์๊ณ ๋๋๋ฉด ๋ค์ ์์ฒญํด์ผ ํ๋ค. Refresh Token์ ๋ง๋ฃ๋๋ฉด ์์ ์ฒ์๋ถํฐ ์งํํด์ผ ํ๋ค.
โจ ์ธ์ฆ ๊ณผ์
์๋น์ <-> ์๋น์ค ์ ๊ณต์
์๋น์๊ฐ ์๋น์ค ์ ๊ณต์์๊ฒ ์์ฒญํ ํฐ์ ์์ฒญํ๋ค.
์๋น์ค ์ ๊ณต์๊ฐ ์๋น์์๊ฒ ์์ฒญํ ํฐ์ ๋ฐ๊ธํด์ค๋ค.
์๋น์๊ฐ ์ฌ์ฉ์๋ฅผ ์๋น์ค์ ๊ณต์๋ก ์ด๋์ํจ๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์ ์ธ์ฆ์ด ์ํ๋๋ค.
์๋น์ค ์ ๊ณต์๊ฐ ์ฌ์ฉ์๋ฅผ ์๋น์๋ก ์ด๋์ํจ๋ค.
์๋น์๊ฐ ์ ๊ทผํ ํฐ์ ์์ฒญํ๋ค.
์๋น์ค์ ๊ณต์๊ฐ ์ ๊ทผํ ํฐ์ ๋ฐ๊ธํ๋ค.
๋ฐ๊ธ๋ ์ ๊ทผํ ํฐ์ ์ด์ฉํด์ ์๋น์์์ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผํ๋ค.
JWT
JSON Web Tokens are an open, industry standard [RFC 7519] method for representing claims securely between two parties. ์ถ์ฒ : <https://jwt.io
>
JWT๋ ์นํ์ค(RFC 7519)์ผ๋ก์ ๋ ๊ฐ์ฒด์์ JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ๊ณ ์๊ฐ์์ฉ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ์ฑ ์๊ฒ ์ ๋ฌํด์ค๋๋ค.
โจ ๊ตฌ์ฑ์์
JWT๋ .
์ ๊ตฌ๋ถ์๋ก 3๊ฐ์ง์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
aaaa.bbbbb.ccccc ์ ๊ตฌ์กฐ๋ก ์๋ถํฐ ํค๋(header), ๋ด์ฉ(payload), ์๋ช (signature)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
1. **ํค๋ (Header)**
ํค๋๋ typ์ alg ๋๊ฐ์ง์ ์ ๋ณด๋ฅผ ์ง๋๊ณ ์์ต๋๋ค. typ๋ ํ ํฐ์ ํ์ ์ ์ง์ ํฉ๋๋ค. JWT์ด๊ธฐ์ "JWT"๋ผ๋ ๊ฐ์ด ๋ค์ด๊ฐ๋๋ค. alg : ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก HMAC, SHA256, RSA๊ฐ ์ฌ์ฉ๋๋ฉด ํ ํฐ์ ๊ฒ์ฆ ํ ๋ ์ฌ์ฉ๋๋ signature๋ถ๋ถ์์ ์ฌ์ฉ๋ฉ๋๋ค.
{ "typ" : "JWT", "alg" : "HS256" }
2. **์ ๋ณด(payload)**
Payload ๋ถ๋ถ์๋ ํ ํฐ์ ๋ด์ ์ ๋ณด๊ฐ ๋ค์ด์์ต๋๋ค. ์ ๋ณด์ ํ ์กฐ๊ฐ์ ํด๋ ์(claim)์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด๋ name / value์ ํ ์์ผ๋ก ์ด๋ค์ ธ์์ต๋๋ค. ํ ํฐ์๋ ์ฌ๋ฌ๊ฐ์ ํด๋ ์๋ค์ ๋ฃ์ ์ ์์ง๋ง ๋๋ฌด ๋ง์์ง๊ฒฝ์ฐ ํ ํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง ์ ์์ต๋๋ค.
ํด๋ ์์ ์ข ๋ฅ๋ ํฌ๊ฒ ์ธ๋ถ๋ฅ๋ก ๋๋์ด์ง๋๋ค.
๋ฑ๋ก๋(registered) ํด๋ ์ ๋ฑ๋ก๋ ํด๋ ์๋ค์ ์๋น์ค์์ ํ์ํ ์ ๋ณด๋ค์ด ์๋, ํ ํฐ์ ๋ํ ์ ๋ณด๋ค์ ๋ด๊ธฐ์ํ์ฌ ์ด๋ฆ์ด ์ด๋ฏธ ์ ํด์ง ํด๋ ์๋ค์ ๋๋ค. ๋ฑ๋ก๋ ํด๋ ์์ ์ฌ์ฉ์ ๋ชจ๋ ์ ํ์ (optional)์ด๋ฉฐ, ์ด์ ํฌํจ๋ ํฌ๋ ์ ์ด๋ฆ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
iss
: ํ ํฐ ๋ฐ๊ธ์ (issuer)sub
: ํ ํฐ ์ ๋ชฉ (subject)aud
: ํ ํฐ ๋์์ (audience)exp
: ํ ํฐ์ ๋ง๋ฃ์๊ฐ(expiration), ์๊ฐ์ NumericDate ํ์์ผ๋ก ๋์ด์์ด์ผ ํ๋ฉฐ ์ธ์ ๋ ํ์ฌ ์๊ฐ๋ณด๋ค ์ดํ๋ก ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.nbf
: Not before์ ์๋ฏธํ๋ฉฐ, ํ ํฐ์ ํ์ฑ ๋ ์ง์ ๋น์ทํ ๊ฐ๋ ์ ๋๋ค. ์ฌ๊ธฐ์๋ NumericDateํ์์ผ๋ก ๋ ์ง๋ฅผ ์ง์ ํ๋ฉฐ, ์ด ๋ ์ง๊ฐ ์ง์ ํ๋ฉฐ, ์ด ๋ ์ง๊ฐ ์ง๋๊ธฐ ์ ๊น์ง๋ ํ ํฐ์ด ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค.iat
: ํ ํฐ์ด ๋ฐ๊ธ๋ ์๊ฐ(issued at), ์ด ๊ฐ์ ์ฌ์ฉํ์ฌ ํ ํฐ์ age๊ฐ ์ผ๋ง๋ ๋์๋์ง ํ๋จ ํ ์ ์์ต๋๋ค.jti
: JWT์ ๊ณ ์ ์๋ณ์๋ก์, ์ฃผ๋ก ์ค๋ณต์ ์ธ ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ์ฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ผํ์ฉ ํ ํฐ์ ์ฌ์ฉํ๋ฉด ์ ์ฉํฉ๋๋ค.
๊ณต๊ฐ(public) ํด๋ ์ ๊ณต๊ฐ ํด๋ ์๋ค์ ์ถฉ๋์ด ๋ฐฉ์ง๋(collision-resistant)์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋, ํด๋ ์ ์ด๋ฆ์ URIํ์์ผ๋ก ์ง์ต๋๋ค.
{ "<https://chup.tistory.com/jwt_claims/is_admin>" : true }
๋น๊ณต๊ฐ(private) ํด๋ ์ ๋ฑ๋ก๋ ํด๋ ์๋ ์๋๊ณ , ๊ณต๊ฐ๋ ํด๋ ์๋ค๋ ์๋๋๋ค. ์ ์ธก๊ฐ์(๋ณดํต ํด๋ผ์ด์ธํธ <-> ์๋ฒ) ํฉ์ํ์ ์ฌ์ฉ๋๋ ํด๋ ์ ์ด๋ฆ๋ค์ ๋๋ค. ๊ณต๊ฐ ํด๋ ์๊ณผ๋ ๋ฌ๋ฆฌ ์ด๋ฆ์ด ์ค๋ณต๋์ด ์ถฉ๋์ด ๋ ์ ์์ผ๋ ์ฌ์ฉํ ๋์ ์ ์ํด์ผํฉ๋๋ค.
3. ์๋ช
(signature)
์๋ช
์ ํค๋์ ์ธ์ฝ๋ฉ๊ฐ๊ณผ ์ ๋ณด์ ์ธ์ฝ๋ฉ๊ฐ์ ํฉ์นํ ์ฃผ์ด์ง ๋น๋ฐํค๋ก ํด์ฌ๋ฅผ ํ์ฌ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ๋ง๋ ํด์ฌ๋ฅผ base64
ํํ๋ก ๋ํ๋ด๊ฒ ๋ฉ๋๋ค.
โจ ๋ก๊ทธ์ธ ์ธ์ฆ์ JWT ์ฌ์ฉ
๋ง์ฝ ์ ํจ๊ธฐ๊ฐ์ด ์งง์ Token์ ๋ฐ๊ธํ๊ฒ๋๋ฉด ์ฌ์ฉ์ ์ ์ฅ์์ ์์ฃผ ๋ก๊ทธ์ธ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ฐ๋๋ก ์ ํจ๊ธฐ๊ฐ์ด ๊ธด Token์ ๋ฐ๊ธํ๊ฒ๋๋ฉด ์ 3์์๊ฒ ํ ํฐ์ ํ์ทจ๋นํ ๊ฒฝ์ฐ ๋ณด์์ ์ทจ์ฝํ๋ค๋ ์ฝ์ ์ด ์์ต๋๋ค. ๊ทธ ์ ๋ค์ ๋ณด์ํ๊ธฐ ์ํด Refresh Token ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. Refresh Token์ Access Token๊ณผ ๋๊ฐ์ JWT์ ๋๋ค. Access Token์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์์ ๋, Refresh Token์ด ์๋ก ๋ฐ๊ธํด์ฃผ๋ ์ด์ ๊ฐ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Refresh Token์ ์ ํจ๊ธฐ๊ฐ์ 1์ฃผ, Access Token์ ์ ํจ๊ธฐ๊ฐ์ 1์๊ฐ์ด๋ผ๊ณ ํ๋ค๋ฉด, ์ฌ์ฉ์๋ Access Token์ผ๋ก 1์๊ฐ๋์ API์์ฒญ์ ํ๋ค๊ฐ ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด Refresh Token์ ์ด์ฉํ์ฌ ์๋กญ๊ฒ ๋ฐ๊ธํด์ค๋๋ค. ์ด ๋ฐฉ๋ฒ๋ํ Access Token์ด ํ์ทจ๋นํ๋คํด๋ ์ ๋ณด๊ฐ ์ ์ถ์ด ๋๋๊ฑธ ๋ง์ ์ ์์ง๋ง, ๋ ์งง์ ์ ํจ๊ธฐ๊ฐ๋๋ฌธ์ ํ์ทจ๋๋ ๊ฐ๋ฅ์ฑ์ด ์ ๋ค๋ ์ ์ ์ด์ฉํ ๊ฒ์ ๋๋ค. Refresh Token๋ํ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ค๋ฉด, ์ฌ์ฉ์๋ ์๋ก ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค. Refresh Token๋ ํ์ทจ ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ ํ ์ ํจ๊ธฐ๊ฐ ์ค์ ์ด ํ์ํฉ๋๋ค.
โจ Access Token + Refresh Token ์ธ์ฆ ๊ณผ์

Authentication and Authorization
โจ API Key
์๋น์ค๋ค์ด ๊ฑฐ๋ํด์ง์ ๋ฐ๋ผ ๊ธฐ๋ฅ๋ค์ ๋ถ๋ฆฌํ๊ธฐ ์์ํ์๋๋ฐ ์ด๋ฅผ์ํด Module์ด๋ Application๋ค๊ฐ์ ๊ณต์ ์ ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค์ด ๋ฑ์ฅํ๊ธฐ ์์ํ๋ค. ๊ทธ ์ค ์ ์ผ ๋จผ์ ๋ฑ์ฅํ๊ณ ๊ฐ์ฅ ๋๋ฆฌ ๋ณดํธ์ ์ผ๋ก ์ฐ์ด๋ ๊ธฐ์ ์ด API Key์ด๋ค.
โจ ๋์๋ฐฉ์
์ฌ์ฉ์๋ API Key๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค. (๋ฐ๊ธ ๋ฐ๋ ๊ณผ์ ์ ์๋น์ค๋ค๋ง๋ค ๋ค๋ฅด๋ค. ์๋ฅผ๋ค์ด ๊ณต๊ณต๊ธฐ๊ด API๊ฐ์ ๊ฒฝ์ฐ์๋ ์ ์ฒญ์ ํ์ํ ์์์ ์ ์ถํ๋ฉด ๊ด๋ฆฌ์๊ฐ ํ์ธ ํ Key๋ฅผ ๋ฐ๊ธํด์ค๋ค.
ํด๋น API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Key์ ํจ๊ป ์์ฒญ์ ๋ณด๋ธ๋ค.
Application์ ์์ฒญ์ด ์ค๋ฉด Key๋ฅผ ํตํด User์ ๋ณด๋ฅผ ํ์ธํ์ฌ ๋๊ตฌ์ Key์ธ์ง ๊ถํ์ด ๋ฌด์์ธ์ง๋ฅผ ํ์ธํ๋ค.
ํด๋น Key์ ์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
โจ ๋ฌธ์ ์
API Key๋ฅผ ์ฌ์ฉ์์๊ฒ ์ง์ ๋ฐ๊ธํ๊ณ ํด๋น Key๋ฅผ ํตํด ํต์ ์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ๊ตฌ๊ฐ์ด ์ํธํ๊ฐ ์ ๋์ด ์๋๋ผ๋ Key๊ฐ ์ ์ถ๋ ๊ฒฝ์ฐ์ ๋๋นํ๊ธฐ ํ๋ค๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ ์ฃผ๊ธฐ์ ์ผ๋ก Key๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฑฐ๋กญ๊ณ ์๊ธฐ์น ๋ชปํ ์ํฉ(ํ์ชฝ๋ง ์ ๋ฐ์ดํธ๊ฐ ์คํ๋์ด ์๋ก ๋งค์น๊ฐ ์๋๋ค๋ ๋ฑ)์ด ๋ฐ์ํ ์ ์๋ค. ๋ํ, Keyํ๊ฐ์ง๋ก ์ ๋ณด๋ฅผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ ๋ณด์๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ดํธ์ด๋ค.
โจ OAuth2
API Key์ ๋จ์ ์ ๋ฉ๊พธ๊ธฐ ์ํด ๋ฑ์ํ ๋ฐฉ์์ด๋ค. ๋ํ์ ์ผ๋ก ํ์ด์ค๋ถ, ํธ์ํฐ ๋ฑ SNS ๋ก๊ทธ์ธ๊ธฐ๋ฅ์์ ์ฝ๊ฒ ๋ณผ ์ ์๋ค. ์์ฒญํ๊ณ ์์ฒญ๋ฐ๋ ๋จ์ํ ๋ฐฉ์์ด ์๋๋ผ ์ธ์ฆํ๋ ๋ถ๋ถ์ด ์ถ๊ฐ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ธ๋ถํ๊ฐ ์ด๋ฃจ์ด์ก๋ค.
โจ ๋์๋ฐฉ์
์ฌ์ฉ์๊ฐ Application์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์์ฒญ์ ๋ณด๋ธ๋ค. (๋ก๊ทธ์ธ ๊ธฐ๋ฅ, ํน์ ์ ๋ณด ์ด๋ ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฐ์ผ ์ ์๋ค. ์ฌ๊ธฐ์์๋ ๋ก๊ทธ์ธ์ผ๋ก ํต์ผํ์ฌ ์ค๋ช ํ๊ฒ ๋ค.)
Application์ ํด๋น ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ด ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ค. ๋ก๊ทธ์ธ์ด ๋์ด ์์ง ์๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ค.
Application์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋์ด ์์ง ์์ผ๋ฉด ์ฌ์ฉ์๋ฅผ ์ธ์ฆ์๋ฒ๋ก Redirectionํ๋ค.
๊ฐ์ ์ ์ผ๋ก Authorize ์์ฒญ์ ๋ฐ์ ์ธ์ฆ์๋ฒ๋ ํด๋น ์ฌ์ฉ์๊ฐ ํ์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ์๋ฒ์ ๋ก๊ทธ์ธ ๋์ด์๋์ง๋ฅผ ํ์ธํ๋ค.
์ธ์ฆ์ ๊ฑฐ์ณค์ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ต์ด์ ์์ฒญ์ ๋ํ ๊ถํ์ด ์๋์ง๋ฅผ ํ์ธํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ Grant๋ผ๊ณ ํ๋๋ฐ ๋์ฒด์ ์ผ๋ก ์ธ์ฆ์๋ฒ๋ ์ฌ์ฉ์์ ์์ง๋ฅผ ํ์ธํ๋ Grant์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๊ณ , ๊ฐ Application์ ๋ค์ ๊ถํ์ ๊ด๋ฆฌ ํ ์๋ ์๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ์์ Grant๊ฐ ํ์ธ์ด ๋์ง์์ผ๋ฉด ๋ค์ ์ฌ์ฉ์์๊ฒ Grant์์ฒญ์ ๋ณด๋ธ๋ค.
Grant๋? Grant๋ ์ธ๊ฐ์๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ์ธ๊ฐ๋ ์๋น์ค ์ ๊ณต์ ์ ์ฅ์์ ์ฌ์ฉ์์ ๊ถํ์ ๋ณด๋ ๊ฒ์ด์ง๋ง, Grant๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์ธ์ฆ์ ๋ณด(๋ณดํต ๊ฐ์ธ์ ๋ณด์ ํด๋นํ๋ ์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ)๋ฅผ Application์ ๋๊ธธ์ง ๋ง์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด๋ค.
์ฌ์ฉ์๊ฐ Grant์์ฒญ์ ๋ฐ๊ฒ๋๋ฉด ์ฌ์ฉ์๋ ํด๋น ์ธ์ฆ์ ๋ณด์ ๋ํ ํ๊ฐ๋ฅผ ๋ด๋ ค์ค๋ค. ํด๋น ์์ฒญ์ ํตํด ๋ค์ ์ธ์ฆ์๋ฒ์ ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค.
์ธ์ฆ์๋ฒ์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ํ ๊ณผ์ ์ด ๋ชจ๋ ์๋ฃ๋๋ฉด Application์๊ฒ ์ธ๊ฐ์ฝ๋๋ฅผ ์ ๋ฌํด์ค๋ค. ์ธ์ฆ์๋ฒ๋ ํด๋น ์ธ๊ฐ์ฝ๋๋ฅผ ์์ ์ ์ ์ฅ์์ ์ ์ฅ์ ํด๋๋ค. ํด๋น ์ฝ๋๋ ๋ณด์์ ์ํด ๋งค์ฐ ์งง์ ๊ธฐ๊ฐ๋์๋ง ์ ํจํ๋ค.
์ธ๊ฐ ์ฝ๋๋ ์งง์ ์๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ด์ Application์ ํด๋น ์ฝ๋๋ฅผ Request Token์ผ๋ก ์ฌ์ฉํ์ฌ ์ธ์ฆ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ฒ๋๋ค.
ํด๋น Request Token์ ๋ฐ์ ์ธ์ฆ์๋ฒ๋ ์์ ์ ์ ์ฅ์์ ์ ์ฅํ ์ฝ๋(7๋ฒ ๊ณผ์ )๊ณผ ์ผ์นํ์ง๋ฅผ ํ์ธํ๊ณ ๊ธด ์ ํจ๊ธฐ๊ฐ์ ๊ฐ์ง๊ณ ์ค์ ๋ฆฌ์์ค ์ ๊ทผ์ ์ฌ์ฉํ๊ฒ ๋ Access Token์ Application์๊ฒ ์ ๋ฌํ๋ค.
์ด์ Application์ Access Token์ ํตํด ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ํด๋น Access Token์ ํตํด ๋ฆฌ์์ค ์๋ฒ(์ธ์ฆ์๋ฒ์๋ ๋ค๋ฆ)์ ์์ฒญ์ ํ๊ฒ๋๋ค. ํ์ง๋ง ์ด ๊ณผ์ ์์๋ ๋ฆฌ์์ค ์๋ฒ๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ์๋ ์ธ์ฆ์๋ฒ์ ์ฐ๊ฒฐํ์ฌ ํด๋น ํ ํฐ์ด ์ ํจํ์ง ํ์ธ์ ๊ฑฐ์น๊ฒ๋๋ค. ํด๋น ํ ํฐ์ด ์ ํจํ๋ค๋ฉด ์ฌ์ฉ์๋ ๋๋์ด ์์ฒญํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๋ค.
โจ ๋ฌธ์ ์
๊ธฐ์กด API Key๋ฐฉ์์ ๋นํด ์ข ๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ๋ฌผ๋ก ๋ง์ ๋ถ๋ถ์ด ๊ฐ์ ๋์๋ค. ํ์ง๋ง ํต์ ์ ์ฌ์ฉํ๋ Token์ ๋ฌด์๋ฏธํ ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํด์ง ๊ท์น์์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ์ฆ๋ช ํ์ธ ํ์ํ๋ค. ๊ทธ๋ ๊ธฐ์ ์ธ์ฆ์๋ฒ์ ์ด๋ค ์์ด๋ DBMS ์ ๊ทผ์ด๋ ๋ค๋ฅธ API๋ฅผ ํ์ฉํ์ฌ ์ ๊ทผํ๋ ๋ฑ์ ์ ํจ์ฑ ํ์ธ ์์ ์ด ํ์ํ๋ค๋ ๊ณต์ฆ ์ฌ๋ถ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฌํ ๊ณต์ฆ์ฌ๋ถ ๋ฌธ์ ๋ฟ๋ง ์๋๋ผ ์ ํจ๊ธฐ๊ฐ ๋ฌธ์ ๋ ์๋ค.
โจ JWT
JWT๋ JSON Web Token์ ์ค์๋ง๋ก ์ธ์ฆ ํ๋ฆ์ ๊ท์ฝ์ด ์๋ Token ์์ฑ์ ๋ํ ๊ท์ฝ์ด๋ค. ๊ธฐ๋ณธ์ ์ธ Access Token์ ์๋ฏธ๊ฐ ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ด Token์ ์ง์๋ ์ ํจ์ฑ์ ๋งค๋ฒ ํ์ธํด์ผ ํ๋ ๊ฒ์์ ๋ฐํ์ฌ, JWT๋ ์ธ์ฆ์ฌ๋ถ ํ์ธ์ ์ํ ๊ฐ, ์ ํจ์ฑ ๊ฒ์ฆ์ ์ํ ๊ฐ ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ ์ ๋ณด ์์ฒด๋ฅผ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์๋ฒ์ ๋ฌป์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋ค. ํ ํฐ์ ๋ํ ์์ธํ ๋ด์ฉ๊ณผ ์ธ์ฆ๋ฐฉ์์ JWT๋ฌธ์๋ฅผ ์ฐธ์กฐํ์.
๋ฌธ์ ์
์๋ฒ์ ์ง์ ์ฐ๊ฒฐํ์ฌ ์ธ์ฆ์ ํ์ธํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ์ฅ์ ๋ค์ด ๋ง๋ค. ํ์ง๋ง ํ ํฐ ์์ฒด๊ฐ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ๋๋ฌธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ธ์ฆ์๋ฒ์ ๋ค์ ์ ์ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๋ก๊ทธ ๋ ๋ฒจ
โจ Logging Level
๋ณดํต log4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ค.
ํฌ๊ฒ ERROR, WARN, INFO, DEBUG๋ก ๋ก๊ทธ ๋ ๋ฒจ์ ๋๋์ด ์์ฑํ๋ค.
ERROR
์๋ฌ ๋ก๊ทธ๋, ํ๋ก๊ทธ๋จ ๋์์ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ผ๋ก ์ฆ์ ๋ฌธ์ ๋ฅผ ์กฐ์ฌํด์ผ ํ๋ ๊ฒ
DB๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํ, ์ค์ ์๋ฌ๊ฐ ๋์ค๋ ์ํฉ
WARN
์ฃผ์ํด์ผ ํ์ง๋ง, ํ๋ก์ธ์ค๋ ๊ณ์ ์งํ๋๋ ์ํ. ํ์ง๋ง WARN์์๋ 2๊ฐ์ง์ ๋ถ๋ถ์์ ์ข ๋ฃ๊ฐ ์ผ์ด๋จ
๋ช ํํ ๋ฌธ์ : ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ ๋ถ๊ฐ, ์บ์๊ฐ ์ฌ์ฉ ๋ฑ
์ ์ฌ์ ๋ฌธ์ : ๊ฐ๋ฐ ๋ชจ๋๋ก ํ๋ก๊ทธ๋จ ์์, ๊ด๋ฆฌ์ ์ฝ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ณดํธ๋์ง ์๊ณ ์ ์ ๋ฑ
INFO
์ค์ํ ๋น์ฆ๋์ค ํ๋ก์ธ์ค๊ฐ ์์๋ ๋์ ์ข ๋ฃ๋ ๋๋ฅผ ์๋ ค์ฃผ๋ ๋ก๊ทธ
~๊ฐ ~๋ฅผ ์คํํ์
DEBUG
๊ฐ๋ฐ์๊ฐ ๊ธฐ๋กํ ๊ฐ์น๊ฐ ์๋ ์ ๋ณด๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ ๋ฒจ
UI ์ UX
๋ง์ด ๋ค์ด๋ดค์ง๋ง, ์ฐจ์ด๋ฅผ ๋งํ๋ผ๊ณ ํ๋ฉด ๋ฉ์นซํ๋ค. ๋ฉด์ ์์๋ ์น์ ํ๋ค๊ณ ํ๋ฉด ๋์ฌ ์ ์๋ ์ง๋ฌธ.
โจ UI
User Interface
์ฌ์ฉ์๊ฐ ์ฑ์ ์ฌ์ฉํ ๋ ๋ง์ฃผํ๋ ๋์์ธ, ๋ ์ด์์, ๊ธฐ์ ์ ์ธ ๋ถ๋ถ์ด๋ค.
๋์์ธ์ ๊ตฌ์ฑ ์์์ธ ํฐํธ, ์๊น, ์ค๊ฐ๊ฒฉ ๋ฑ ์์ธํ ์์๊ฐ ํฌํจ๋๊ณ , ๊ธฐ์ ์ ๋ถ๋ถ์ ๋ฐ์ํ์ด๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ ๋ฑ์ด ํฌํจ๋๋ค.
๋ฐ๋ผ์ UI๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๋ ํฐ ๋ถํธํจ์ด ์์ด์ผํ๋ฉฐ, ๋ง์กฑ๋๋ฅผ ๋์ฌ์ผ ํ๋ค.
โจ UX
User eXperience
์ฑ์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์ ๊ฒฝํ์ ๋ถ์ํ์ฌ ๋ ํธํ๊ณ ํจ์จ์ ์ธ ๋ฐฉํฅ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์งํ๋ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
(ํฐ์น ํ๋ฉด, ์ฌ์ฉ์์ ์ ํ flow ๋ฑ)
UX๋ ํต๊ณ์๋ฃ, ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฑ์ ์ฌ์ฉํ๋ ์ ์ ๋ค์ ํน์ฑ์ ๋ถ์ํ์ฌ ์ํฉ๊ณผ ์์ ์ ๋ง๋๋ก ๋ณํ์ํฌ ์ ์์ด์ผ ํ๋ค.
UI๋ฅผ ํฌ์ฅ๋ฌผ์ ๋น์ ํ๋ค๋ฉด, UX๋ ๊ทธ ์์ ๋ด์ฉ๋ฌผ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
ํฌ์ฅ(UI)์ ์ ๊ฒฝ์ ์ฐ๋ ๊ฒ๋ ์ค์ํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํ ์ฌ๋์ ๋ถ์ํด ์๋ง์ ๋ด์ฉ๋ฌผ(UX)๋ก ์ฑ์์ ์ ๊ณตํด์ผํ๋ค.
CSR & SSR
CSR : Client Side Rendering
SSR : Server Side Rendering
CSR์๋ ๋ชจ๋ฐ์ผ ์๋์ ๋ค์ด์ SPA๊ฐ ๋ฑ์ฅํ๋ค.
โจ SPA(Single Page Applictaion)
์ต์ด ํ ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ฉํ ๋ค, ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
SPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ง ๋ก๋๊ฐ ์๊ณ , ๋ชจ๋ ํ์ด์ง๊ฐ ๋จ์ํ Html5 History์ ์ํด ๋ ๋๋ง๋๋ค.
๊ธฐ์กด์ ์ ํต์ ๋ฐฉ๋ฒ์ธ SSR ๋ฐฉ์์๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์๋ค.
์์ฆ ์น์์ ์ ๊ณต๋๋ ์ ๋ณด๊ฐ ์๋ ๋ง๋ค. ์์ฒญํ ๋๋ง๋ค ์๋ก๊ณ ์นจ์ด ์ผ์ด๋๋ฉด์ ํ์ด์ง๋ฅผ ๋ก๋ฉํ ๋๋ง๋ค ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌ๋ฐ์ ํด์ํ๊ณ , ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ฐฉ์์ธ SSR์ ๋ฐ์ดํฐ๊ฐ ๋ง์ ์๋ก ์ฑ๋ฅ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํ์ฌ ์ฃผ์์์ ๋์ผํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฒํผ์ ๋๋ ์ ๋, ์ค์ ํ์ด์ง์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด๋, ์ธํฐ๋์ ์ด ๋ง์ ํ๊ฒฝ์์ ๋นํจ์จ์ ์ด๋ค. ๋ ๋๋ง์ ์๋ฒ์ชฝ์์ ์งํํ๋ฉด ๊ทธ๋งํผ ์๋ฒ ์์์ด ๋ง์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ํธ๋ํฝ์ด ๋ญ๋น๋๋ค.
CSR ๋ฐฉ์์ ์ฌ์ฉ์์ ํ๋์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ๋ค์ ์ฝ์ด์จ๋ค. ๋ฐ๋ผ์ ์๋ฒ ์ธก์์ ๋ ๋๋งํ์ฌ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ์ฝ์ด๋ค์ด๋ ๊ฒ๋ณด๋ค ๋น ๋ฅธ ์ธํฐ๋ ์ ์ ๊ธฐ๋ํ ์ ์๋ค. ์๋ฒ๋ ๋จ์ง JSONํ์ผ๋ง ๋ณด๋ด์ฃผ๊ณ , HTML์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ ์ธก์์ ์ํํ๋ ๋ฐฉ์์ด๋ค.
๋ทฐ ๋ ๋๋ง์ ์ ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ด๋นํ๊ณ , ๋จผ์ ์น์ฑ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ก๋ํ ๋ค์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ๋ฌ๋ฐ์ ๋ณด์ฌ์ฃผ๋ CSR์ ํธ๋ํฝ์ ๊ฐ์์ํค๊ณ , ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋๋ก ๋์์ค๋ค.
โจ CSR ์ฅ๋จ์
์ฅ์
ํธ๋ํฝ ๊ฐ์
ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฐ๋๋ค
์ฌ์ฉ์ ๊ฒฝํ
์๋ก๊ณ ์นจ์ด ๋ฐ์ํ์ง ์์. ์ฌ์ฉ์๊ฐ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ๊ฒฝํ์ ํ ์ ์์
๋จ์
๊ฒ์ ์์ง
ํฌ๋กฌ์์ ๋ฆฌ์กํธ๋ก ๋ง๋ ์น์ฑ ์์ค๋ฅผ ํ์ธํ๋ฉด ๋ด์ฉ์ด ๋น์ด์์. ์ด์ฒ๋ผ ๊ฒ์์์ง ํฌ๋กค๋ฌ๊ฐ ๋ฐ์ดํฐ ์์ง์ ์ด๋ ค์์ด ์์ ๊ฐ๋ฅ์ฑ ์กด์ฌ
๊ตฌ๊ธ ๊ฒ์์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋ด์ฅ๋์ด์์ง๋ง, ๋ค์ด๋ฒ๋ ๋ค์ ๋ฑ ๊ฒ์์์ง์ ํฌ๋กค๋ง์ ์ด๋ ค์์ด ์์ด SSR์ ๋ฐ๋ก ๊ตฌํํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์ ์กด์ฌ
โจ SSR ์ฅ๋จ์
์ฅ์
๊ฒ์์์ง ์ต์ ํ
์ด๊ธฐ๋ก๋ฉ ์ฑ๋ฅ๊ฐ์
์ฒซ ๋ ๋๋ง๋ HTML์ ํด๋ผ์ด์ธํธ์์ ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ๋ก๋ฉ์๋๋ฅผ ๋ง์ด ์ค์ฌ์ค
๋จ์
ํ๋ก์ ํธ ๋ณต์ก๋
๋ผ์ฐํฐ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ณต์ก๋๊ฐ ๋์์ง ์ ์์
์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ
๋ค์ดํฐ๋ธ ์ฑ & ์น ์ฑ & ํ์ด๋ธ๋ฆฌ๋ ์ฑ
โจ ๋ค์ดํฐ๋ธ ์ฑ (Native App)
ํํ ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํ๋ค.
๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์ต์ ํ๋ ์ธ์ด๋ก ๊ฐ๋ฐ๋ ์ฑ์ผ๋ก ์๋๋ก์ด๋ SDK๋ฅผ ์ด์ฉํ Java ์ธ์ด๋ iOS ๊ธฐ๋ฐ SDK๋ฅผ ์ด์ฉํ Swift ์ธ์ด๋ก ๋ง๋๋ ์ฑ์ด ๋ค์ดํฐ๋ธ ์ฑ์ ์ํ๋ค.
โจ ์ฅ์
์ฑ๋ฅ์ด ์น์ฑ, ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ๋นํด ๊ฐ์ฅ ๋์
๋ค์ดํฐ๋ธ API๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉํจ์ผ๋ก ํ๋ซํผ๊ณผ ๋ฐ์ฐฉ๋์ด์์
Java๋ Swift์ ์ต์ํ ์ฌ์ฉ์๋ฉด ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํจ
โจ ๋จ์
ํ๋ซํผ์ ํ์ ์
์ธ์ด์ ์ ์ฝ์
โจ ๋ชจ๋ฐ์ผ ์น ์ฑ (Mobile Wep App)
๋ชจ๋ฐ์ผ์น + ๋ค์ดํฐ๋ธ ์ฑ์ ๊ฒฐํฉํ ํํ
๋ชจ๋ฐ์ผ ์น์ ํน์ง์ ๊ฐ์ง๋ฉด์๋, ๋ค์ดํฐ๋ธ ์ฑ์ ์ฅ์ ์ ์ง๋ ๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด์ ๋ชจ๋ฐ์ผ ์น๋ณด๋ค๋ ๋ชจ๋ฐ์ผ์ ์ต์ ํ ๋ ์ฑ์ด๋ผ๊ณ ๋งํ ์ ์๋ค.
์น์ฑ์ SPA๋ฅผ ํ์ฉํด ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
์ฝ๊ฒ ๋งํด, PC์ฉ ํํ์ด์ง๋ฅผ ๋ชจ๋ฐ์ผ ์คํฌ๋ฆฐ ํฌ๊ธฐ์ ๋ง์ถฐ ์ค์ฌ ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํจ
โจ ์ฅ์
์น ์ฌ์ดํธ๋ฅผ ๋ณด๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ก ์ค์นํ ํ์X
๋ชจ๋ ๊ธฐ๊ธฐ์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผ ๊ฐ๋ฅ
๋ณ๋ ์ค์น ๋ฐ ์น์ธ ๊ณผ์ ์ด ํ์์น ์์ ์ ์ง๋ณด์์ ์ฉ์ด
โจ ๋จ์
ํ๋ซํผ API ์ฌ์ฉ ๋ถ๊ฐ๋ฅ. ์ค๋ก์ง ๋ธ๋ผ์ฐ์ API๋ง ์ฌ์ฉ๊ฐ๋ฅ
์นํ์ ํฐ์น ์ฑ์ ๊ฐ๋ฐํ๊ธฐ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋ก์
๋ค์ดํฐ๋ธ, ํ์ด๋ธ๋ฆฌ๋ ์ฑ๋ณด๋ค ์คํ ๊น๋ค๋ก์ (๋ธ๋ผ์ฐ์ ์ด๊ฑฐ ๊ฒ์ํด์ ๋ค์ด๊ฐ์ผํจ)
โจ ํ์ด๋ธ๋ฆฌ๋ ์ฑ (Hybrid App)
๋ค์ดํฐ๋ธ + ์น์ฑ
๋ค์ดํฐ๋ธ ์น์, ์น view๋ฅผ ๋์ ์น์ฑ์ ์คํ์ํจ๋ค. ์์ชฝ์ API๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฅ์
โจ ์ฅ์
๋ค์ดํฐ๋ธ API, ๋ธ๋ผ์ฐ์ API๋ฅผ ๋ชจ๋ ํ์ฉํ ๋ค์ํ ๊ฐ๋ฐ ๊ฐ๋ฅ
์น ๊ฐ๋ฐ ๊ธฐ์ ๋ก ์ฑ ๊ฐ๋ฐ ๊ฐ๋ฅ
ํ๋ฒ์ ๊ฐ๋ฐ๋ก ๋ค์ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
โจ ๋จ์
๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ ์ ๊ทผ ์ํด ๊ฐ๋ฐ ์ง์ ํ์
UI ํ๋ ์๋๊ตฌ ์ฌ์ฉ์ํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ UI ์ ์
PWA (Progressive Web App)
์น์ ์ฅ์ ๊ณผ ์ฑ์ ์ฅ์ ์ ๊ฒฐํฉํ ํ๊ฒฝ
์ฑ ์์ค๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์น์์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ชฉ์ !
โจ ํน์ง
ํ์ฅ์ฑ์ด ์ข๊ณ , ๊น์ด ์๋ ์ฑ๊ฐ์ ์น์ ๋ง๋๋ ๊ฒ์ ์งํฅํ๋ค.
์น ์ฃผ์๋ง ์๋ค๋ฉด, ๋๊ตฌ๋ ์ ๊ทผํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ ์ค๋งํธํฐ์ ์ ์ฅ๊ณต๊ฐ์ ์ก์ ๋จน์ง ์์
์๋น์ค ์์ ์(Service Worker) API : ์น์ฑ์ ์ค์ํ ๋ถ๋ถ์ ์บ์ฑํ์ฌ ์ฌ์ฉ์๊ฐ ๋ค์์ ์ด ๋ ๋น ๋ฅด๊ฒ ๋ก๋ฉํ ์ ์๋๋ก ๋์์ค
โ ๋คํธ์ํฌ ํ๊ฒฝ์ด ์ข์ง ์์๋ ๋น ๋ฅด๊ฒ ๊ตฌ๋๋๋ฉฐ, ์ฌ์ฉ์์๊ฒ ํธ์ ์๋ฆผ์ ๋ณด๋ผ ์๋ ์์
โจ PWA ์ ๊ณต ๊ธฐ๋ฅ
ํ๋ก๊ทธ๋์๋ธ : ์ ์ง์ ๊ฐ์ ์ ํตํด ์์ฑ๋์ ์ด๋ค ๋ธ๋ผ์ฐ์ ๋ ์๊ด์์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ ํฉ
๋ฐ์ํ : ๋ฐ์คํฌํฑ, ๋ชจ๋ฐ์ผ, ํ ๋ธ๋ฆฟ ๋ฑ ๋ชจ๋ ํผ factor์ ๋ง์
์ฐ๊ฒฐ ๋ ๋ฆฝ์ : ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํด ์คํ๋ผ์ธ์์๋ ์๋์ด ๊ฐ๋ฅํจ
์์ : HTTPS๋ฅผ ํตํด ์ ๊ณต์ด ๋๋ฏ๋ก ์ค๋ํ์ด ์ฐจ๋จ๋์ด ์ฝํ ์ธ ๊ฐ ๋ณ์กฐ๋์ง ์์
๊ฒ์ ๊ฐ๋ฅ : W3C ๋งค๋ํ์คํธ ๋ฐ ์๋น์ค ์์ปค ๋ฑ๋ก ๋ฒ์ ๋๋ถ์ '์ฑ'์ผ๋ก ์๋ณ๋์ด ๊ฒ์์ด ๊ฐ๋ฅํจ
์ฌ์ฐธ์ฌ ๊ฐ๋ฅ : ํธ์ ์๋ฆผ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ์ฝ๊ฒ ์ฌ์ฐธ์ฌ๊ฐ ๊ฐ๋ฅํจ
CSRF & XSS
โจCSRF
Cross Site Request Forgery
์น ์ดํ๋ฆฌ์ผ์ด์ ์ทจ์ฝ์ ์ค ํ๋๋ก, ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ์์ ์ ์์ง์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์ (modify, delete, register ๋ฑ)๋ฅผ ํน์ ํ ์น์ฌ์ดํธ์ requestํ๋๋ก ๋ง๋๋ ๊ณต๊ฒฉ์ ๋งํ๋ค.
์ฃผ๋ก ํด์ปค๋ค์ด ๋ง์ด ์ด์ฉํ๋ ๊ฒ์ผ๋ก, ์ ์ ์ ๊ถํ์ ๋์ฉํด ์ค์ํ ๊ธฐ๋ฅ์ ์คํํ๋๋ก ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ค์ํ์์ CSRF ๊ณต๊ฒฉ์ ๋ณผ ์ ์๋ ๊ฑด, ํด์ปค๊ฐ ์ฌ์ฉ์์ SNS ๊ณ์ ์ผ๋ก ๊ด๊ณ ์ฑ ๊ธ์ ์ฌ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ ํํ ๋งํ๋ฉด, CSRF๋ ํด์ปค๊ฐ ์ฌ์ฉ์ ์ปดํจํฐ๋ฅผ ๊ฐ์ผ์๊ฑฐ๋ ์๋ฒ๋ฅผ ํดํนํด์ ๊ณต๊ฒฉํ๋ ๊ฒ์ด ์๋๋ค. CSRF ๊ณต๊ฒฉ์ ์๋์ ๊ฐ์ ์กฐ๊ฑด์ด ๋ง์กฑํ ๋ ์คํ๋๋ค.
์ฌ์ฉ์๊ฐ ํด์ปค๊ฐ ๋ง๋ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ํ ๊ฒฝ์ฐ
์์กฐ ์์ฒญ์ ์ ์กํ๋ ์๋น์ค์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ์ํฉ
๋ณดํต ์๋ ๋ก๊ทธ์ธ์ ํด๋ ๊ฒฝ์ฐ์ ์ด๋ฐ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ํ๊ฒ ๋๋ฉด์ ํผํด๋ฅผ ์ ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ํ, ํด์ปค๊ฐ XSS ๊ณต๊ฒฉ์ ์ฑ๊ณต์ํจ ์ฌ์ดํธ๋ผ๋ฉด, ํผ์ฑ ์ฌ์ดํธ๊ฐ ์๋๋๋ผ๋ CSRF ๊ณต๊ฒฉ์ด ์ด๋ฃจ์ด์ง ์ ์๋ค.
โจ ๋์ ๊ธฐ๋ฒ
๋ฆฌํผ๋ฌ(Refferer) ๊ฒ์ฆ
๋ฐฑ์๋ ๋จ์์ Refferer ๊ฒ์ฆ์ ํตํด ์น์ธ๋ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์์๋ง ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
Security Token ์ฌ์ฉ
์ฌ์ฉ์์ ์ธ์ ์ ์์์ ๋์ ๊ฐ์ ์ ์ฅํ๊ณ , ์ฌ์ฉ์์ ์์ฒญ์ ํด๋น ๊ฐ์ ํฌํจํ์ฌ ์ ์ก์ํจ๋ค. ๋ฐฑ์๋ ๋จ์์๋ ์์ฒญ์ ๋ฐ์ ๋ ์ธ์ ์ ์ ์ฅ๋ ํ ํฐ๊ฐ๊ณผ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๋ ํ ํฐ ๊ฐ์ด ์ผ์นํ๋ ์ง ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋ ๋ฐฉ๋ฒ์ด๋ค.
ํ์ง๋ง, XSS์ ์ทจ์ฝ์ ์ด ์๋ค๋ฉด ๊ณต๊ฒฉ์ ๋ฐ์ ์๋ ์๋ค.
โจ XSS
Cross Site Scription
CSRF์ ๊ฐ์ด ์น ์ดํ๋ฆฌ์ผ์ด์ ์ทจ์ฝ์ ์ค ํ๋๋ก, ๊ด๋ฆฌ์๊ฐ ์๋ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๋งํ๋ค.
์ ์์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ์ฌ ์ด๋ฅผ ์ด๋ํ ์ฌ์ฉ์์ ์ฟ ํค๊ฐ ํด์ปค์๊ฒ ์ ์ก์ํค๋ฉฐ, ์ด ํ์ทจํ ์ฟ ํค๋ฅผ ํตํด ์ธ์ ํ์ด์ฌํน ๊ณต๊ฒฉ์ ํ๋ค. ํด์ปค๋ ์ธ์ ID๋ฅผ ๊ฐ์ง ์ฟ ํค๋ก ์ฌ์ฉ์์ ๊ณ์ ์ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
๊ณต๊ฒฉ ์ข ๋ฅ๋ก๋ ์ง์์ฑ, ๋ฐ์ฌํ, DOM ๊ธฐ๋ฐ XSS ๋ฑ์ด ์๋ค.
์ง์์ฑ : ๋ง ๊ทธ๋๋ก ์ง์์ ์ผ๋ก ํผํด๋ฅผ ์ ํ๋ ์ ํ์ผ๋ก, XSS ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ์ฌ ์ด๋ํ ์ฌ์ฉ์์ ์ฟ ํค๋ฅผ ํ์ทจํ๊ฑฐ๋ ๋ฆฌ๋ค์ด๋ ์ ์ํค๋ ๊ณต๊ฒฉ์ ํ๋ค. ์ด๋ ์ฝ์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์์ผ ์ง์์ ์ผ๋ก ๊ณต๊ฒฉ์ ํ๊ธฐ ๋๋ฌธ์ Persistent XSS๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
๋ฐ์ฌํ : ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ ๋ฐ์ ๊ฐ์ ์๋ฒ์์ ๋๋๋ ค ์ฃผ๋ ๊ณณ์์ ๋ฐ์ํ๋ค. ๊ณต๊ฒฉ์๋ ์ ์ ์คํฌ๋ฆฝํธ์ ํจ๊ป URL์ ์ฌ์ฉ์์๊ฒ ๋๋ฅด๋๋ก ์ ๋ํ๊ณ , ๋๋ฅธ ์ฌ์ฉ์๋ ์ด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ๊ณต๊ฒฉ์ ๋นํ๊ฒ ๋๋ ์ ํ์ด๋ค.
DOM ๊ธฐ๋ฐ : ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ URL์ ์ฌ์ฉ์๊ฐ ์์ฒญํ๊ฒ ๋๋ฉด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํด์ํ๋ ๋จ๊ณ์์ ๋ฐ์ํ๋ ๊ณต๊ฒฉ์ด๋ค. ์ด ์คํฌ๋ฆฝํธ๋ก ์ธํด ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋๊ฐ ์๋ ์๋์ ๋ค๋ฅด๊ฒ ์คํ๋๋ค. ์ด๋ ๋ค๋ฅธ XSS ๊ณต๊ฒฉ๊ณผ๋ ๋ฌ๋ฆฌ ์๋ฒ ์ธก์์ ํ์ง๊ฐ ์ด๋ ต๋ค.
โจ ๋์ ๊ธฐ๋ฒ
์ ์ถ๋ ฅ ๊ฐ ๊ฒ์ฆ
XSS Cheat Sheet์ ๋ํ ํํฐ ๋ชฉ๋ก์ ๋ง๋ค์ด ๋ชจ๋ Cheat Sheet์ ๋ํ ๋์์ ๊ฐ๋ฅํ๋๋ก ์ฌ์ ์ ๋๋นํ๋ค. XSS ํํฐ๋ง์ ์ ์ฉ ํ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋์ง ์ง์ ํ ์คํธ ๊ณผ์ ์ ๊ฑฐ์ณ๋ณผ ์๋ ์๋ค,
XSS ๋ฐฉ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ์ฅ์ฑ
Anti XSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํด์ฃผ๋ ํ์ฌ๋ค์ด ๋ง๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ฒ๋จ์์ ์ถ๊ฐํ๋ฉฐ, ์ฌ์ฉ์๋ค์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋๋ก ํ์ฅ์ฑ์ ์ค์นํ์ฌ ๋ฐฉ์ดํ ์ ์๋ค.
์น ๋ฐฉํ๋ฒฝ
์น ๋ฐฉํ๋ฒฝ์ ์น ๊ณต๊ฒฉ์ ํนํ๋ ๊ฒ์ผ๋ก, ๋ค์ํ Injection์ ํ๊บผ๋ฒ์ ๋ฐฉ์ดํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
CORS, SOP ์ค์
CORS(Cross-Origin Resource Sharing), SOP(Same-Origin-Policy)๋ฅผ ํตํด ๋ฆฌ์์ค์ Source๋ฅผ ์ ํ ํ๋๊ฒ์ด ํจ๊ณผ์ ์ธ ๋ฐฉ์ด ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค. ์น ์๋น์ค์ ์ทจ์ฝํ ๋ฒกํฐ์ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ ๊ฒฝ์ฐ, ์น๋ช ์ ์ธ ๊ณต๊ฒฉ์ ํ๊ธฐ ์ํด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ์ ๋ ฅ๊ฐ ์ ํ์ด๋ ๊ธฐํ ์์ธ ๋๋ฌธ์ ๊ณต๊ฒฉ ์ฑ๊ณต์ด ์ด๋ ต๋ค. ๊ทธ๋ฌ๋ ๊ณต๊ฒฉ์์ ์๋ฒ์ ์์นํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์๋ค๋ฉด ์ด๋ ์๋์ ์ผ๋ก ์ฌ์์ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CORS, SOP๋ฅผ ํ์ฉ ํ์ฌ ์ฌ์ ์ ์ง์ ๋ ๋๋ฉ์ธ์ด๋ ๋ฒ์๊ฐ ์๋๋ผ๋ฉด ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ์ ํํด์ผ ํ๋ค.
Last updated