๐ข ์ด๋ฒ ํญํด๋?
๋ฆฌ์กํธ ์ ๋ฌธ ์ฃผ์ฐจ ๋์ ์ด๋ ธ๋ฒ ์ด์ ์บ ํ์์ ์ง๊ธ๋ฐ์ ๋ฆฌ์กํธ ๊ธฐ์ด๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ์ ํจ์ ์ปดํฌ๋ํธ hooks ๋ฑ ๋ฆฌ์กํธ์ ๊ธฐ์ด ๋ฐ ๋ก๋ฉ ์คํผ๋, ํ๋ก๊ทธ๋ ์ค ๋ฐ ๊ฐ์ ํ๋ค๊ณผ AWS S3, ํ์ด์ด๋ฒ ์ด์ค ํธ์คํ ์ ํตํ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๋ค. ํนํ ๋ฆฌ๋์ค์ ํ์ด์ด์คํ ์ด์ ์ค์ ์ ๋์ด ๊ณต๋ถํ๋๋ฐ, ์ด๋ ต๊ฒ๋ง ์๊ฐํ๋ ๋ฆฌ๋์ค๋ฅผ ๊ฐ์๋ฅผ ํตํด ๋ฐฐ์ด ํ ํ ๋งํ๋ค๊ณ ๋๊ปด์ ธ์ ๋ฐ๋ก ํ์ฉํด๋ณด๊ณ ์ถ์๋ค.
https://firebase.google.com/products/firestore?hl=ko
๊ทธ๋ฌ๋ค ๋ง์นจ ์ข์ ๊ธฐํ๋ก ์๋ ๋ถ๊ณผ MBTI ํ ์คํธ์ ๋ฐ๋ฅธ ์นํฐ ์ถ์ฒ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ๋์ด์ ๋ฆฌ๋์ค๋ฅผ ์ ์ฉํด๋ณผ ์ ์์๋ค. ํ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ฅธ ๋ชจ๋์ ๋ง๋ค๊ณ ์คํ ์ด๋ฅผ ์์ฑํด ์ปดํฌ๋ํธ์ ์ ์ฉํ๋ค๋ณด๋ ๋์ค ๊ตฌ์กฐ์ ์ต์ํด์ง๋ ๊ฒ์ ๋๊ผ๋ค. ๋ชจ๋์์ ๋ง๋ ์ก์ ํฌ๋ฆฌ์์ดํฐ๋ฅผ ์ปดํฌ๋ํธ์ ๋ถ๋ฌ์ค๊ณ , ์ก์ ๊ฐ์ฒด๋ฅผ ๋์คํจ์นํด์ ๋ฆฌ๋์๋ฅผ ํตํด ์ํ๋ ๋๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ๋ช ๋ฒ ๋ฐ๋ณตํ๋ ๋ฆฌ๋์ค์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ์ ๊ธ๋ฐฉ ์ ์ํ ์ ์๊ฒ ๋์๋ค.
์ด๋ฒ ์ฃผ๋ฅผ ํ๊ณ ํ๋ฉฐ DOM๊ณผ ์๋ฒ๋ฆฌ์ค์ ๋ํด ๋ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๐ฒ DOM์ด๋?
DOM(Document Object Model)์ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด HTML ๋ฌธ์๋ฅผ ํ์ฑํ๋ฉด HTML ์์๋ค(eliments)์ ๋ฐ์ดํธ(2์ง์) ํํ์ ์ง์ ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์(์: UTF-8)์ ๋ฐ๋ฅธ ๋ฌธ์์ด, ๊ทธ๋ฆฌ๊ณ ๋ฌธ๋ฒ์ ์๋ฏธ์ ์ต์ ๋จ์์ธ ํ ํฐ ํํ๋ฅผ ๊ฑฐ์น ๋ค ์ต์ข ์ ์ผ๋ก ๋ ธ๋(node) ๊ฐ์ฒด๋ก ๋ณํ๋์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ DOM์ด ์์ฑ๋๋ค. ๋ ธ๋๋ DOM์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์์ด๋ฉฐ, ํ ํฐ์ ๋ด์ฉ์ ๋ฐ๋ผ ๋ฌธ์ ๋ ธ๋, ์์ ๋ ธ๋, ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋, ํ ์คํธ ๋ ธ๋๋ก ๋๋๊ฒ ๋๋ค.
HTML ์์์ ์์ ํ๊ทธ(start tag)์ ์ข ๋ฃ ํ๊ทธ(end tag) ์ฌ์ด์ธ ์ฝํ ์ธ ์์ญ์๋ ํ ์คํธ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ HTML ์์๋ ํฌํจ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ ์ค์ฒฉ ๊ด๊ณ์ ์ํด ๊ณ์ธต์ ์ธ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค. DOM์ HTML ๋ฌธ์์ ์ด๋ฌํ ๊ณ์ธต์ ๊ตฌ์กฐ์ ์ ๋ณด๋ฅผ ๋ฐ์ํด ๋ชจ๋ ๋ ธ๋ ๊ฐ์ฒด๋ค์ด ๋น์ ํ(nonlinear) ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ทธ๋์ DOM ํธ๋ฆฌ๋ผ๊ณ ๋ ํ๋ค.
DOM์ ๊ตฌ์ฑํ๋ ๋ ธ๋ ๊ฐ์ฒด๋ ECMAScript ์ฌ์์ ์ ์๋ ํ์ค ๋นํธ์ธ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ถ๊ฐ์ ์ผ๋ก ์ ๊ณตํ๋ (W3C ํ์ค) ํธ์คํธ ๊ฐ์ฒด๋ค. ํ์ง๋ง ๋ ธ๋ ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ด๋ฏ๋ก ํ๋กํ ํ์ ์ ์ํ ์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
DOM API์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์์ ์กด์ฌํ๋ DOM์ ์ ๊ทผํ๊ณ ๋ณ๊ฒฝํ ์ ์๋๋ฐ, ๋ ธ๋ ๊ฐ์ฒด์ ๋ถ๋ชจ, ํ์ , ์์์ ํ์ํ๊ฑฐ๋ ์ํ๋ ๋ ธ๋์ ์ดํธ๋ฆฌ๋ทฐํธ์ ํ ์คํธ๋ฅผ ์กฐ์ํ ์ ์๋ค. ์ด๋ ๊ฒ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ DOM์ ๋ ๋๋ง์ ๋ฐ์๋๋ค.
๐จ๐ป ์๋ฒ๋ฆฌ์ค๋?
์๋ฒ๋ฆฌ์ค๋ ์๋ฒ๊ฐ ์๋ ๋ฐฑ์๋๊ฐ ์๋๋ผ, ์๋ฒ๋ฅผ ์ง์ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ์ํคํ ์ฒ๋ฅผ ์๋ฏธํ๋ค.
> ๋ถ๋ฅ
ํด๋ผ์ฐ๋ ์ปดํจํ ๋ชจ๋ธ์ ๋ณดํต ์๋น์ค ํํ(# as-a-Service)์ ๋ฐ๋ผ SaaS(์๋น์ค๋ก ์ ๊ณต๋๋ ์ํํธ์จ์ด), PaaS(์๋น์ค๋ก ์ ๊ณต๋๋ ํ๋ซํผ), IaaS(์๋น์ค๋ก ์ ๊ณต๋๋ ์ธํ๋ผ)๋ก ๋๋๋๋ฐ, ์๋ฒ๋ฆฌ์ค ์ปดํจํ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก BaaS(์๋น์ค๋ก ์ ๊ณต๋๋ ๋ฐฑ์๋)์ FaaS(์๋น์ค๋ก ์ ๊ณต๋๋ ํจ์)๋ก ๋ถ๋ฅํ ์ ์๋ค. ๋ณดํต ์๋ฒ๋ฆฌ์ค๋ผ๊ณ ๋ถ๋ฅด๋ฉด FaaS๋ฅผ ์ผ์ปซ๋๋ค.
> FaaS์ BaaS์ ์ฐจ์ด
FaaS๋ ๊ฐ๋ฐ์๊ฐ ์๋ฒ์์ ์ํ๋ ํจ์๋ค์ ์ง์ ๋ง๋ค์ด์ ์ฌ๋ฆฌ๋ฉด ์๋น์ค ์ ์ฒด์์ ๊ด๋ฆฌํ๋ ์๋ฒ ์ปจํ ์ด๋(stateless) ์์์ ํน์ ์ด๋ฒคํธ(ํธ๋ฆฌ๊ฑฐ)๊ฐ ๋ฐ์ํ ๋ ํจ์๊ฐ ํธ์ถ๋๋๋ก ํ๋ ๊ฒ์ด๊ณ , BaaS๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐฑ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์๊ณ ์๋น์ค ์ ์ฒด์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค(๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ ์์คํ , ์ฌ์ฉ์ ์ธ์ฆ, ์์ ์๋น์ค, ๋ฉ์์ง ๋ฑ)์ ๋ฐฑ์๋ API๋ฅผ ํตํด ์ฌ์ฉํ๋ค๋ ์ฐจ์ด์ ์ด ์๋ค. ๋ํ์ ์ผ๋ก Firebase๊ฐ BaaS์ ํด๋น๋๋ค.
> ์๋ฒ๋ฆฌ์ค์ ์ฅ๋จ์
์๋ฒ๋ฆฌ์ค์ ํ์ ๋ฐฐ๊ฒฝ์ ํด๋ผ์ฐ๋ ์ปดํจํ ์ด ์ค์ฌ์ฉ๋๊ณผ๋ ๊ด๊ณ์์ด ์ ํํ ์ฉ๋์ ๋ํ ์๊ธ์ ๋ฏธ๋ฆฌ ๊ฒฐ์ (PaaS, IaaS)ํด์ผ ํ๋ค๋ ์ ๊ณผ, ํ ๋น ์๋ฒ๋ง ๋น๋ ค์ค๊ธฐ ๋๋ฌธ์ ์ํํธ์จ์ด์ ์ธ ๋ถ๋ถ์ ์ง์ ๊ด๋ฆฌํด์ค์ผ ํ๋ ๋ถํธํจ์์ ์์๋์๋ค.
์๋ฒ๋ฆฌ์ค๋ ์๋น์ค ์ ์ฒด(AWS, Microsoft Azure Functions, Google Cloud Functions ๋ฑ)๊ฐ ์ปดํจํ ๋ฆฌ์์ค์ ์คํ ๋ฆฌ์ง๋ฅผ ๋์ ์ผ๋ก ๊ตฌ์ฑํ ๋ค์, ํจ์๋ฅผ ์คํํ ํ์ ๋ฐ ์๊ฐ์ ๋ฐ๋ผ ์ฌ์ฉ๋ ๋ฆฌ์์ค์ ๋ํ ๋น์ฉ๋ง์ ์ฒญ๊ตฌํ๋ ํด๋ผ์ฐ๋ ์คํ ๋ชจ๋ธ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฉ ์ ๊ฐ์ ํจ๊ณผ๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ๋ฆฌ์ค์ ๋ํ์ ์๋น์ค์ธ AWS Lambda์ ๊ฒฝ์ฐ, 100๋ง ๊ฐ์ ํจ์๋ฅผ ์คํํ๋ ๋ฐ 20์ผํธ์ ๋น์ฉ์ด ์ฒญ๊ตฌ๋๋ค.
๋ํ ์๋ฒ๋ฆฌ์ค๋ฅผ ํ์ฉํ๋ฉด ๋ฐฑ์๋๋ฅผ ์์ ํจ์ ๋จ์ผ๋ก ์ชผ๊ฐ์ ์ฌ๋ฆฌ๋๋ฐ, ์ด๋ ์๋ฒ๋ ์๋น์ค ์ ์ฒด๊ฐ ์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ์๋ฒ์ ์ค์ผ์ผ๋ง, ์ ๋ฐ์ดํธ, ๋ณด์ ๋ฑ์ ๋ฐํ์ ๊ด๋ฆฌ์ ์ด์์ ๋ํด ์ ๊ฒฝ ์ธ ํ์ ์์ด ํต์ฌ ์ ํ์ ์ง์คํ ์ ์์ผ๋ฉฐ, ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง ํจ์๊ฐ ๊ณ์ ๊ฐ๋๋์ง ์๊ณ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ์๊ฐ ํด๋ฉด์์ ๋ฒ์ด๋ ์คํ๋๊ธฐ ๋๋ฌธ์ PaaS๋ IaaS ๋ชจ๋ธ๊ณผ ๋น๊ตํ์ ๋ ์๋ต ์ง์ฐ์ด ๋ฐ์ํ๋ค (cold start). ๊ทธ๋ฌ๋ฏ๋ก ์๋น์ค์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฑฐ๋ ๋น ๋ฅธ ์๋ต์ ์๊ตฌํ๋ ์ค์๊ฐ ์๋น์ค์ผ ๊ฒฝ์ฐ ์๋ฒ๋ฆฌ์ค๋ ์ ํฉํ์ง ์์ ์ ์๋ค. ๋ํ ์ ์ฐ์ฑ๊ณผ ์ปค์คํฐ๋ง์ด์ง ์์ค์ ์ ํ์ ๋ฐ๊ณ , ๋ฒค๋ ์ข ์์ฑ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์๋ค.
Reference >
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive p.665-667, 677-679
- https://medium.com/๊ฐ๋ฐ์์ํ๊ฒฉ/๋ธ๋ผ์ฐ์ ์-๋ ๋๋ง-๊ณผ์ -5c01c4158ce
- https://sst.dev/chapters/ko/what-is-serverless.html
- https://inpa.tistory.com/entry/WEB-๐-์๋ฒ๋ฆฌ์คServerLess-๊ฐ๋ -๐ฏ-์ด์ ๋ฆฌ-BaaS-FaaS
- https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless