๐ 3. Week03 ํ๊ณ (22.10.02 ~ 22.10.09)
๐ ์ฃผํน๊ธฐ์ ์์, React์์ ๋ง๋จ
์ด๋ฒ์ฃผ ๋ถํฐ ์ฃผํน๊ธฐ 3์ฃผ์ฐจ๊ฐ ์์๋์๋ค.
์ด๋ฒ์ฃผ ๋ถํฐ ๋ฐฐ์ฐ๋ Reac๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ์ฐํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๋ฆฌ์กํธ์์๋ "์ปดํฌ๋ํธ"๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๊ณ ๊ณ ๋ฆฝ๋ ์ฝ๋์ ํํธ์ ์ด์ฉํ์ฌ ๋ณต์กํ UI๋ฅผ ๊ตฌ์ฑํ๋๋ก ๋๋๋ค๊ณ ํ๋ค.
์ฝ๊ฒ ์๊ฐํ์๋ฉด, ์๋ html ํ์ผ ์์๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ถํฐ ์์ํด์ ํ ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ตฌ์กฐ๋ฅผ ์ ๋ถ ํ ํ์ผ์ ๋ค ๋ฃ์ด๋จ๋ค๋ฉด, ์ดํ์ ๊ท๋ชจ๊ฐ ์ปค์ง ๊ฒฝ์ฐ์ ์ ๋ณด๋๊ฒ ์๋นํ ํ๋๋
์ด๊ฑธ ๋จ๋ฝ? ๋ณ๋ก ๋๋ ์ ํน์ ๊ฐ๋ง ๋ฐ๊พธ๋ฉด ๋ ๋ ๊ทธ ๋จ๋ฝ์ด ์๋ ํ์ผ๋ก ๊ฐ์ ์์ ํ๋ฉด ๋๋๊ฒ์ด๋ค.
Angular,Vue.js ์ ๋๋ถ์ด ๋ง์ด ์ฐ์ด๊ณ ์๋๋ฐ ์ด๊ฒ ๊ฐ์ฅ ์ธ๊ธฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค.
์ฒ์์๋ ํ ๋งํ๊ฑฐ ๊ฐ์ผ๋ฉด์๋,, ๋๋ฌด ์ด๋ ต๋ค. ์ปดํฌ๋ํธ, props, state ๋ฑ์ ๋ฐฐ์ฐ๋๋ฐ
state ์ด๋ ต๋ค, props๋ ์ด๋ ต๋ค..
๊ทธ ์ฃผ์ ๊ฐ์ธ ๊ณผ์ ๋ก TodoList๋ฅผ ๋ง๋๋ ๊ฒ์ด ์์๋๋ฐ, ๋ด์ฉ์ ๋ ฅํด์ ์ถ๊ฐ๋ฒํผ์ ๋๋ฅด๋ฉด
์ง !
์ด๋ฐ ๋ฅ์ ํฌ๋งท์ ๋ง๋๋ ๊ฒ์ด์๋ค.
์ด๊ฑฐ ํ๋๋ผ,, ๋๋ฌด ํ๋ค์๋ค ๋ผ๋๋ ๋ค ์งฐ๋๋ฐ, ์ด๋ฒคํธ๋ฅผ ๋ง๋ค์ด์ผํ๋ค.
์ด ์ธ๊ฐ์ง๋ฅผ ํฌ๊ฒ ๋ณด์๋ฉด ๊ตฌํํด์ผํ๋๋ฐ,, ์ ๋ง ๊พธ์ญ๊พธ์ญํ๊ฒ๊ฐ๋ค. ๋ญ๊ฐ ๋จธ๋ฆฟ์์๋ ๋ค์ด์ค์ง ์๋๋ฐ ํด์ผํ๋๊น ํ๋๋๋..?
๋น ๋ฏํ๊ณ ๋นก๋นกํ๋ค. ํ์ด๋ค์ง๋ง ํด๋ด์ผ์ง,,
React๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ๋ฐฐ์ฐ๊ฒ ๋ ๊ฐ๋ ์ด ์๋๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก DOM์ด๋ผ๋ ๊ฐ๋ ์ด๋ค.
๐ DOM์ด๋ ?
์ ์ฌ์ง์ ๋ณด๊ณ HTML์ด DOM์ธ๊ฐ? ์ถ๊ฒ ์ง๋ง ์๋๋ผ๊ณ ํ๋ค.
IDE์์ ์์ฑํ HTML์ DOM์ด ์๋๊ณ
์์ฑ๋ HTML ๋ฌธ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ํด ํด์๋์ด ์ค์ ๋ฌธ์๋ฅผ ๋ํ๋ด๋ ๋
ธ๋ ํธ๋ฆฌ๊ฐ DOM
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ํ์ด์ง์ ์ํธ ์์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํด์์ด๋ค.
DOM API๋ JavaScript์ ๊ฐ์ ์คํฌ๋ฆฝํ ์ธ์ด๋ฅผ ์ด์ฉํด์ ํด๋น ๋ฌธ์์ ๋ ธ๋ ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ๋ฑ ์์ ์ ๊ฐ๋ฅ์ผ ํ๋ค.
์ฐ๋ฆฌ๊ฐ Javascript๋ก ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ์ฌ์ฉํ๋ document.getElementById, document.querySelector, document.addEventListener ๋ฑ์ด DOM API
๐ DOM์ ์กฐ์ํ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ํ๋ ๋ฐฉ์
DOM Tree ์์ฑ
๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ์ ๋ฌ ๋ฐ์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ ๋ ์์ง์ด ์ด๋ฅผ ํ์ฑํด์ DOM ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
Render Tree ์์ฑ
DOM ํธ๋ฆฌ์ ๋
ธ๋๋ค์ attach ๋ฉ์๋๊ฐ ์คํ๋๋ค. attach ๋ฉ์๋๋ ์คํ์ผ ์ ๋ณด๋ฅผ ๊ณ์ฐํด์ ๊ฐ์ฒด ํํ๋ก ๋ฐํํฉ๋๋ค. ๋ค์ ๋งํด ๋ ๋ ํธ๋ฆฌ ๊ณผ์ ์์ ๊ฐ ์์๋ค์ ์คํ์ผ์ด ๊ณ์ฐ๋๊ณ ์ด ๊ณ์ฐ๋๋ ๊ณผ์ ์์ ๋ค๋ฅธ ์์๋ค์ ์คํ์ผ ์์ฑ๋ค์ ์ฐธ์กฐํฉ๋๋ค.
Layout (reflow)
๋ ๋ ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๊ณ ๋๋ฉด ๊ฐ ๋
ธ๋๋ค์ ์คํฌ๋ฆฐ์ ์ขํ๊ฐ ์ฃผ์ด์ง๊ณ ์ ํํ ์ด๋์ ๋ํ๋์ผ ํ ์ง ์์น๊ฐ ์ฃผ์ด์ง๋๋ค.
Painting
๋ ๋๋ง๋ ์์๋ค์ ์์ ์
ํ๋ ๊ณผ์ , ํธ๋ฆฌ์ ๊ฐ ๋
ธ๋๋ค์ ๊ฑฐ์ณ๊ฐ๋ฉฐ paint ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
๐ ์๋ฒ๋ฆฌ์ค๋ ๋ฌด์์ธ๊ฐ?
์๋ฒ๋ฆฌ์ค, ์ด๊ฒ์ ์ง์ญํ์๋ฉด "์๋ฒ๊ฐ ์๋ค"๋ผ๋ ์๋ฏธ๊ฐ ์๋ค.
ํ์ง๋ง ์ค์ ๋ก ์๋ฒ๊ฐ ์๋๊ฑด ์๋๋ค.
๋์ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํด ์ปดํจํฐ๋ ๊ฐ์ฅ๋จธ์ ์ ์๋ฒ๋ฅผ ์ค์ ํ๊ณ , ์ด๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋์ ์๋ฏธํ๋ค. ๊ทธ ๋์ , BaaS(Backend as a Servie) ํน์ FaaS(Function as a Service) ์ ์์กดํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ Baas์ Faas๋ฅผ ๋ณด์ํ๋, ์ด๋ฆผ์ง์ํด๋ณด๋ฉด ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ์ฐจ์ด์ธ๊ฐ ์ถ์๋ค.
๊ทผ๋ฐ ๋ฐ๋ง ๋ง์๋๋ผ. Faas๋ ํ๋ก ํธ๋ ์๋๋๋ผ. ์ด์ฏค์์ ๋ด์ฉ ํ ๋ฒ ์ง๊ณ ๋์ด๊ฐ๋ณด์.
โถ๏ธ BaaS (Backend as a Service)
๋ณดํต ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ฐ์ผ์ด๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ฒ ๋ ๋, ๋ฐฑ์๋ ์๋ฒ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋๋ค. ์๋ฒ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๊ณ ๋ คํ ์ฌํญ์ด ๊ฝค ๋ง๋ค. ๋ํ์ ์ผ๋ก ์ ์ ๊ฐ ๋์ด๋๊ฒ ๋๋ฉด ์๋ฒ์ ํ์ฅ๋ ๊ณ ๋ คํด์ผ ํ๊ณ , ๋ณด์์ฑ๋ ๊ณ ๋ คํด์ผ ํ๋ค. ๊ทธ๋์ ํ์ํ ์๋น์ค๊ฐ Firebase ๊ฐ์ BaaS ์ด๋ค.
์ด ์๋น์ค์์๋ ์ฑ ๊ฐ๋ฐ์ ์์ด์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ๋ค (๋ฐ์ดํฐ๋ฒ ์ด์ค, ์์ ์๋น์ค ์ฐ๋, ํ์ผ ์์คํ ๋ฑ)์ API๋ก ์ ๊ณตํด ์ค์ผ๋ก์, ๊ฐ๋ฐ์๋ค์ด ์๋ฒ ๊ฐ๋ฐ์ ํ์ง ์๊ณ ์๋ ํ์ํ ๊ธฐ๋ฅ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌํ ํ ์ ์๊ฒ ํด์ฃผ๊ณ , ๋น์ฉ์ ์ฌ์ฉ ํ ๋งํผ ๋๊ฐ๊ฒ ๋๋ค. ์๋ฒ์ ์ด์ฉ์๊ฐ ์์๊ฐ์ ๋์ด๋๊ฒ ๋์ด๋ ๋ฐ๋ก ๋๋น๋ฅผ ์ํด์ค๋ ์์์ ํ์ฅ์ด ๋๋ค.
BaaS ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถ, ์๋ฒ ํ์ฅ ์์
์ ๋ถํ์ํจ์ด๋ค. ๋ฐ๋ผ์ ๋ฐฑ์๋์ ๋ํ ์ง์์ด ๋ณ๋ก ์๋๋ผ๋, ์์ฃผ ๋น ๋ฅธ ์๋๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ ๋ค๋ฉด BaaS ์ ๋จ์ ์ ๋ฌด์์ธ๊ฐ.
โถ๏ธ ํด๋ผ์ด์ธํธ ์์ฃผ์ ์ฝ๋
ใ
ก> BaaS ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฑ์๋ ๋ก์ง๋ค์ด ํด๋ผ์ด์ธํธ์ชฝ์ ๊ตฌํ์ด ๋๋ค. ๋ฐ์ดํฐ๋จ์ ๋ก์ง์ด ๋ณ๊ฒฝ๋๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋์ ์์ ์ด ์ด๋ฃจ์ด์ง๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ๋ฐฐํฌ๋ฅผ ํด์ผ๋๊ณ ์น์ดํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ฉด JS๋ฅผ ์๋ก ๋ฐ์์ผํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ฐ์ผ ์ฑ์ด๋ผ๋ฉด, ์ฑ ์
๋ฐ์ดํธ๋ฅผ ํด์ผ๋๊ณ ์ํฉ์ ๋ฐ๋ผ ๊ตฌ๋ฒ์ ์ฌ์ฉ์๋ฅผ ๊ฐ์ ์
๋ฐ์ดํธํด์ผ ํ๋ ์ผ์ด ๋ฐ์ ํ ์๋ ์๋ค.
โถ๏ธ ๊ฐ๊ฒฉ
ใ
ก> Firebase ์ ๊ฒฝ์ฐ ์ด๋ฐ์๋ ๋ฌด๋ฃ๋ผ ์๊ท๋ชจ ํ๋ก์ ํธ์๋ ๋งค๋ ฅ์ ์ธ ์ฅ์ ์ด๋ค. ํ์ง๋ง ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๊ฐ๊ฒฉ์ด ๊ฝค ๋น์ธ์ง๋ค. ์ค์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 10G ๊ฐ ์์ด๊ณ , ํ ๋ฌ ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ด 20G ์ ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น์ฉ์ผ๋ก๋ง $70 ๊ฐ ๋ฐ์ํ๋ค. ์ฐธ๊ณ ๋ก ํด๋ผ์ฐ๋ ์ปดํจํ
ํธ์คํ
์ ํด์ฃผ๋ ์๋น์ค Vultr ์ ๊ฐ๊ฒฉ๋๋ฅผ ๋ณด๋ฉด, $10 ์ด๋ฉด 40GB SSD, 2000GB ์ ๋์ญํญ์ ์ฌ์ฉ ํ ์ ์๋ค.
๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํจ
โถ๏ธ FaaS (Function as a Service)
์ฐ๋ฆฌ๊ฐ ๋ฑ๋กํ ํจ์๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋ ์คํ๋๋ค.
โถ๏ธ์ฅ์
๋น์ฉ : ํน์ ์์ ์ ํ๊ธฐ ์ํด ์๋ฒ๋ฅผ ์ค๋นํ๊ณ ํ๋ฃจ์ข ์ผ ์ผ๋๋๊ฒ์ด ์๋๋ผ, ํ์ํ ๋๋ง ํจ์๊ฐ ํธ์ถ๋์ด ์ฒ๋ฆฌ๋๋ฉฐ ํจ์๊ฐ ํธ์ถ๋ ๋งํผ๋ง ๋น์ฉ์ด ๋๋ฏ๋ก, ๋น์ฉ์ด ๋ง์ด ์ ์ฝ๋๋ค.
์ธํ๋ผ ๊ด๋ฆฌ : ๋คํธ์ํฌ, ์ฅ๋น ์ด๋ฐ๊ฒ๋ค์ ๋ํ ๊ตฌ์ฑ ์์
์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค.
ํ์ฅ์ฑ๋ฉด์์ ๋งค์ฐ ๋ฐ์ด๋๋ค.
๋จ์
๋ชจ๋ ์ฝ๋๋ฅผ ํจ์๋ก ์ชผ๊ฐ์ ์์ ํ๋ค๋ณด๋, ํจ์์์ ์ฌ์ฉํ ์ ์๋ ์์์ ์ ํ์ด ์๋ค.
FaaS ์ ๊ณต์ฌ์ ๋งค์ฐ ์์กดํ๋ฏ๋ก AWS, Azure, Google ๋ฑ์ FaaS ์ ๊ณต์ฌ์ ๊ฐํ ์์กด์ ํ๊ฒ ๋๋ค. ๊ฐ์๊ธฐ ์ด ํ์ฌ๋ค์ด ๋งํด๋ฒ๋ฆฌ๋ฉด ๋งค์ฐ ๊ณจ์น ์ํ๊ฒ ๋๋ค.
๋น๊ต์ ์ ๊ธฐ์ ์ด๋ผ ํด์ธ์์๋ ๊ด๋ จ ์๋ฃ๋ค์ ๋ณผ ์ ์๋ ๋ฐ๋ฉด, ๊ตญ๋ด์์๋ ๊ด๋ จ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๊ธฐ ํ๋ค๋ค.
๐ ๋ง์น๋ฉฐ
ํ๊ณ ๋ฅผ ํ๋ฉด ํ ์๋ก ๋ค ๋ด์ฉ์ด ๋ด๊ธฐ์ง ์์ง๋ง, ์ ์ ํ๋ ๋ด์ฉ์ ์ด๋ป๊ฒ๋ ํ ๋ฒ ๋ ๋ณผ์ ์๋ค๋ ์ ์ ์๋นํ ์ข์ ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง, ์ ๋ฒ์ฃผ๋ ์ ๋ฒ์ฃผ๋๋ก ์ด๋ ค์ ๊ณ , ์ด๋ฒ์ฃผ๋ ์ด๋ฒ์ฃผ๋๋ก ์ด๋ ต๊ฒ ์ง..
๊ทธ๋๋ ๊ธฐ์ ๋งค๋์ ๋๋ค๊ณผ ํ์๋ค๊ณผ ํ๋๊น ๊ทธ๋๋ง ์ก๊ณ ์ข ํ ์์๋ ๊ฒ ๊ฐ์๋ฐ
ํผ์์์ผ๋ฉด,, ํ,, ์๋ฌดํผ ์ด๋ฒ์ฃผ๋ ํ์ดํ ํด๋ด์ผ๊ฒ ๋ค.