๋ฏธ๋๋ชจ๋ ๋ชจ๋ฐ์ผ ์ด๋์ฅ, ํ์ฌ ํฌ์คํฐ ๋ฑ์ ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ์ฝ๊ฒ ์ ์ํ ์ ์๋ ๋ฏธ๋ ์น ๋น๋์ ๋๋ค.
๐ ๋ฐํ์์ - 3๋ถ ๋ด์ธ์ ๊ฐ๋จํ ๊ธฐ๋ฅ์๊ฐ ๋ถ๋ถ์ ๋๋ค. ์ ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ๋ณด์ค ์ ์์ต๋๋ค.
๐ ๋ฐฐํฌ๋งํฌ: https://www.minimo.life
๐ frontend: https://github.com/minimo-editor/minimo-client
๐ backend: https://github.com/minimo-editor/minimo-server
-
Frontend
- React
- ContextAPI
- ES6
- Styled-components
- Google-Maps-API
- Immer
- AWS-S3
- Jest
- React-testing-library
-
Backend
- Node.js
- Express.js
- MongoDB
- Mongoose
- ๐โโ๏ธ ํ๋ก์ ํธ ๊ฐ์
- ๐ ์์ ๊ธฐ๊ฐ
- ๐น ๊ธฐ๋ฅ
- ๐งโ๐ป TECH ์ด์ผ๊ธฐ
- โ TEST
- ๐ก ํน์ง
- ๐ ํ๋ก์ ํธ ์ฌ์ฉ ๋ฐฉ๋ฒ
- ๐งโ๐ป ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ
๋ฏธ๋๋ชจ๋ ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํธ๋๋ํ ์น์ ๋ง๋ค ์ ์๋ ์น ๋น๋์ ๋๋ค.
์ฒ์์ 3D, ์ค์๊ฐ ์ธํฐ๋ ์ ๋ฑ์ ํฌํจํ ์ฌ๋ฐ๋ ์์๋ค์ ๋ธ๋ก๋จ์๋ก ์ ๊ณตํ๊ณ ์ถ์์ต๋๋ค.
ํ์ง๋ง 2์ฃผ์ ์งง์ ๊ฐ๋ฐ ๊ธฐ๊ฐ ๋๋ฌธ์, ์ด๋ฒ 2์ฃผ ๋์์ ์๋์ ๊ฐ์ ๋ชฉํ๋ฅผ ๊ฐ๊ณ ์งํํ์์ต๋๋ค.
- ์ถํ์ ํธํ๊ฒ ์ถ๊ฐ์ ์ธ ๋ธ๋ก(์๋ํฐ์ ๊ธฐ๋ฅ) ๋ฐ ํ ํ๋ฆฟ์ ์ถ๊ฐํ ์ ์๊ฒ ํ์ฅ์ฑ ์๋ ๊ตฌ์กฐ๋ก ๋ง๋ค๊ธฐ
- ์ ์ ๊ฒฝํ์ ํต์ฌ์ ์ธ ๋๋๊ทธ ์ค ๋๋กญ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ง์ ๋ง๋ค๊ธฐ
- ๊ธฐ๋ณธ์ ์ธ ๋ธ๋ก ์์๋ค(ํ ์คํธ, ๋์์, ์ฌ์ง ๋ฑ)์ด ํฌํจ๋ ์๋ํฐ๋ฅผ ์ ๋ง๋ค๊ธฐ
- ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฌ์ฉ์ฑ ์๊ฒ ํ์ฌ ์ถํ์ ๋ธ๋ก์ ์ถ๊ฐํ ์ ์๊ฒ ๋ง๋ค๊ธฐ
-
๊ธฐํ : 2021/05/03 ~ 2021/05/07 (1์ฃผ)
- ์์ด๋์ด ๋ธ๋ ์ธ์คํ ๋ฐ, ๊ธฐํ, ๊ธฐ์ ๊ฒ์ฆ
- minimo wireframe ์์ฑ
-
๊ฐ๋ฐ : 2021/05/10 ~ 2021/05/21 (2์ฃผ)
- 2์ฃผ์ฐจ
์๋ํฐ๋ฐ๋๋๊ทธ ์ค ๋๋กญ๋ฑ ํต์ฌ ๊ธฐ๋ฅ ๊ตฌํ์ฌ์ฉ์ ์ธ์ฆ,์ ์ญ ์ํ๊ด๋ฆฌ๋ฑ
- 3์ฃผ์ฐจ
์ปดํฌ๋ํธ๋ฐ์ปค์คํ ํ์ฌ์ฌ์ฉ์ฑ ์๊ฒ ๋ฆฌํฉํ ๋ง- ๋๋๊ทธ ๋๋กญ
์ ๋๋ฉ์ด์ ,์ถ๊ฐ ๋ธ๋ก, ๊ธฐ๋ฅ ๋ฑ ์ ๋ ํ ์คํธ๋ฐ๋ฐฐํฌ
- 2์ฃผ์ฐจ
๐ ๋ฐํ์์ - 3๋ถ ๋ด์ธ์ ๊ฐ๋จํ ๊ธฐ๋ฅ์๊ฐ ๋ถ๋ถ์ ๋๋ค. ์ ์ฒด์ ์ธ ํ๋ก์ฐ๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ์ ํํ ์ ์์ต๋๋ค.
- ๋๋๊ทธ ๋๋กญ์ ํตํด ์ฝ๊ฒ ๋ธ๋ก๋ค์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง, ๋์์, ์ ํ๋ธ ์์ ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์์ ๋ฏธ๋์ด ๋ฒํผ์ ๊ฐ์ธ ๋งํฌ๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- ํน์ ์์น๋ฅผ ์ง๋์ ๋งํฌํ์ฌ ์ฃผ์์ ํจ๊ป ํ์ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ํ๋ฉด์ ๋ง๊ฒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์ํ๋ ์ฃผ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
-
์ด๊ธฐ ์ค๊ณ๋จ๊ณ์์๋ ์ ์ญ ์ํ๋ ๋จ์ํ
prop-drilling์ ๋ง๊ธฐ ์ํ ์ ๋์๊ธฐ ๋๋ฌธ์Context API๋ฅผ ์ ํํ์ต๋๋ค. -
๊ตฌํ์ ํ๋ฉด์
Editor(project)์ ์ํ๊ด๋ฆฌ ๋ก์ง์ด ์ปค์ ธ์Redux๋ฅผ ์ฌ์ฉํ ์งContext API + useReducer๋ฅผ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํ๋๋ฐ, ์ ํ๋ก์ ํธ๋Redux๊ฐ ์ ๊ณตํ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ ํ์๊ฐ ์์๊ณ , ์ํ์ ๋ณํ๊ฐ ๊ทธ๋ ๊ฒ ๋น๋ฒํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ดRedux๋ฅผ ๋ฐ์ ๋ฒ๋ค๋ง ์ฌ์ด์ฆ๋ฅผ ๏ฟฝ๏ฟฝ๏ฟฝ์ฐ๊ธฐ ๋ณด๋จContext API + useReducer๋ฅผ ์ ํํ๊ฒ ๋์์ต๋๋ค.
-
์ด๊ธฐ ์ค๊ณ๋จ๊ณ์์๋ ์๋์ '๊ธฐ์กด ์ฝ๋ ๋ฐ๋ชจ'์ฒ๋ผ ๋ธ๋ก๋ค์ ์ด๋ ์ ์ ๋๋ฉ์ด์ ์ด ์์ด๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์์ต๋๋ค. ํ์ง๋ง ๋ง์ ๋ง๋ค์ด๋ณด๋ ์ด๋ ๋ณด๊ธฐ์ ์ด์ํ๊ณ , ์ฌ์ฉ์์ ๊ฒฝํ์ ์ข๊ฒํ๊ธฐ ์ํด ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ๊ธฐ๋ก ํ์ต๋๋ค. ๋ค๋ง ์ด๋ฏธ ๊ฐ๋ฐ ๋ง๋ฌด๋ฆฌ ๋จ๊ณ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์์ฑ๋ ์๋ํฐ ๋ฐ ๋ธ๋ก ๋ก์ง์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ถ์๊ณ ์ ๋๋ฉ์ด์ ๊ด๋ จ ๋ก์ง์ด๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ/๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌ์ํค๊ณ ์ถ์์ต๋๋ค.
๋ฐ๋ผ์ ์๋์
AnimateBlock ์ถ๊ฐํ ์ฝ๋์ฒ๋ผ,AnimateBlock์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ๊ทธchildren์ผ๋ก ๋ธ๋ก๋ค์ ๋ฐ์ ์ ๋๋ฉ์ด์ ์ด ์๊ธฐ๋๋ก ๊ตฌํํ์์ต๋๋ค.AnimateBlock์children์unique key๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ณํ๋ ์๋ฆฌ๋จผํธ๋ง ์ฐพ์ ์ ๋๋ฉ์ด์ ์ ํ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉ์ฑ ์๊ฒ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.ํด๋น ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์ ์ฒ์์ผ๋ก
useLayoutEffect,React.Children๋ฑ์ ์ด์ฉํ์๋๋ฐ, ๊ทธ๋์ ๋ฆฌ์กํธ๋ฅผ ๋ง์ด ๊ณต๋ถํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ์ ํ ๋ชจ๋ฅด๋ ๊ฒ์ด ๋ง๋ค๋ ๊ฒ์ ๋๊ผ๊ณ , ๊ณต์๋ฌธ์๋ฅผ ์์ฃผ ๋ด์ผํ๋ค๋ ๊ฒ ๋ํ ๋๊ผ์ต๋๋ค.
| ๊ธฐ์กด ์ฝ๋ | ๊ธฐ์กด ์ฝ๋ ๋ฐ๋ชจ |
![]() |
![]() |
| AnimateBlock ์ถ๊ฐํ ์ฝ๋ | AnimateBlock ์ถ๊ฐ ํ ๋ฐ๋ชจ |
![]() |
![]() |
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๋ฆฌ์กํธ์์ ๋๋๊ทธ ์ค ๋๋กญ์ ๊ตฌํํ๋ ๊ธ๋ค์ ์ฐพ์๋ณด๋ฉด ๋๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ draggableํ๊ฒ ํ๊ณ ๋๋๊ทธ ์ค ๋๋กญ์ ํฉ๋๋ค.
ํ์ง๋ง ์ด๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. draggable์ปดํฌ๋ํธ ๋ด๋ถ์ text๊ฐ ์์ผ๋ฉด, ๊ฐํ์ ์ผ๋ก ๊ทธ text๊ฐ ๋๋๊ทธ ๋๋ค๋ ๊ฒ์ด์์ต๋๋ค.
์ ์ ๊ฐ ์๋ชปํด์ text๋ฅผ ๋๋๊ทธ ๋๋กญํ๋ฉด text๋ data-transfer์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ง ์์ ์๋ฌ๊ฐ ๋ฌ์ต๋๋ค.
๋ฌผ๋ก ์ด ์๋ฌ๋ ํธ๋ค๋ง์ด ๊ฐ๋ฅํ๋ฉฐ css๋ฅผ ํตํด text์์์ ๋๋๊ทธ๊ฐ ์๋๊ฒ ํ ์๋ ์์์ต๋๋ค.
ํ์ง๋ง ๋๋๊ทธ ํ ๋์์ด text ์ธ์๋ ์ฌ๋ฌ ์์๋๋ฅผ ๋ด๊ณ ์์ ์๋ ์๊ณ , ์ถํ์ ๋ธ๋ก๋ค์ ์ถ๊ฐํ ๋๋ง๋ค ์ ๊ฒฝ์ธ ๊ฒ ๋ง์ ๋ณด์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ ๋ธ๋ก๋ง๋ค ํด๋นํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์ด๋ฏธ์ง๋ฅผ draggableํ๊ฒ ํด์ ํด๊ฒฐํ๊ธฐ๋ก ํ์ต๋๋ค.
์ด๋ฏธ์ง๋ ๋จ์ผ ์ปดํฌ๋ํธ๋ก ๋ด๋ถ์ ๋ค๋ฅธ ์์๋ค์ ๋ด๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ์์ฒ์ ์ผ๋ก ์ฐจ๋จํ ์ ์๋ค๊ณ ์๊ฐํ์ผ๋ฉฐ, ๋ธ๋ก ์ถ๊ฐ๋ ์ฉ์ดํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ํ ๋๋๊ทธ ํ ๋ธ๋ก๋ค์ ์ฌ์ค ๋ณด์ฌ์ฃผ๋ ์ฉ๋์ผ ๋ฟ, ์ค์ ๋ก ์ฌ์ฉํ๋ ์์๊ฐ ์๋๊ธฐ์ ๋ชฉ์ ์๋ ๋ ๋ง๋ ๊ตฌํ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์ด๋ฅผํตํด ๊ผญ ์ฝ๋ฉ์ผ๋ก๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ์๋ ์๋ค๋ ๊ฑธ ๋ฐฐ์ ์ต๋๋ค. ๊ทธ ๋ฌธ์ ์ ๋ณธ์ง์ ํ์ ํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ๊ทธ์ ๋ง๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ฒ์ด ๊ฒฐ๊ตญ ๋ ๋์ ์๋น์ค๋ฅผ ๋ง๋๋๊ฒ ์๋๊น ์๊ฐ์ด ๋ค์์ต๋๋ค.
React Testing Library์Jest๋ฅผ ์ฌ์ฉํ์ฌCustom Hook,util,reducer๋ฑ์ ์ค์ ๋ก์ง์ ์ฐ์ ์ ์ผ๋ก ์ ๋ ํ ์คํธ๋ฅผ ์์ฑํ์ต๋๋ค.
-
WYSIWYG (What You See Is What You Get)
ํ๋ก์ ํธ๋ฅผ ์ ์/ํธ์ง ํ๋ ๊ณผ์ ์์์ ๋ชจ์ต ๊ทธ๋๋ก ๊ฒฐ๊ณผ๋ฌผ์ด ๋์ค๋๋ก ๊ตฌํํ์์ต๋๋ค.
-
Block ๋จ์ ์๋ํฐ
๋ฏธ๋๋ชจ๋ ์ ํต์ ์ธ WYSIWYG ์๋ํฐ์ ๋ค๋ฅด๊ฒ block ๋จ์๋ก ๊ตฌํํ์์ต๋๋ค.
์ ํต์ ์ธ WYSIWYG๋ ํ๋์
contenteditable์์ ์์ ์๋ก๋ค๋ฅธhtml markup์ ์์ฑํ๋ ๋ฐฉ์์ธ๋ฐ, ์ด๋ ํธ์งํ๋ ๊ฐ๊ฐ์ ์์๊ฐ ์๋ก์๊ฒ ์ํฅ์ ์ฃผ๋ ์์ ๋ฒ๊ทธ๊ฐ ์กด์ฌํฉ๋๋ค. ์ ๋ ์ด๋ฌํ ๋ถํธํจ์ ๊ฒช์ด๋ณธ ์ ์ด ์๊ธฐ ๋๋ฌธ์, ๋ฏธ๋๋ชจ๋paragraph,title,image๋ฑ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธcontenteditable์์๋ก์ ํธ์งํ๋๋ก ๊ตฌํํ์ต๋๋ค. -
Clean output data
ํ๋ก์ ํธ์ ๊ฒฐ๊ณผ๋ฌผ์
html markup์ด ์๋jsonํ์์ ๋ฐ์ดํฐ๋ก ์ ์ฅํ์์ต๋๋ค.๋ช๋ช ์๋ํฐ, ๋ธ๋ก๊ทธ ์๋น์ค ๋ฑ์์
html markupํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ๋ง์ ๊ณ ๋ฏผ์ ํ์ง๋ง,jsonํ์์ ์ฅ์ ์ด ๋ ๋ง๋ค๊ณ ์๊ฐํ์ฌjsonํ์์ผ๋ก ์ ์ฅํ์์ต๋๋ค.html markupํ์<section name="0ed1" class="section section--body section--first"> <div class="section-divider"> <hr class="section-divider"> </div> <div class="section-content"> <div class="section-inner sectionLayout--insetColumn"> <h3 name="f8e8" class="graf graf--h3 graf--leading graf--title"> <br> </h3> <p name="83d3" class="graf graf--p graf-after--h3"> So what do we have? </p> </div> </div> </section> <section name="d1d2" class="section section--body"> ... </section>
minimo์
jsonํ์{ "_id": "60a8ac7ec767550586e16766", "address" : "freeboard", "concept": "basic", "blocks" : [ { "type" : "paragraph", "data" : { "contents" : { "texts": "<p>this is free<p>" }, "styles": { "color": "black" } } }, { "type" : "title", "data" : { "contents" : { "texts": "give away alert" }, "styles": { "color": "red" } } }, { "type" : "image", "data" : { "contents" : { "src": "https://minimo.s3.amazonaws.com/project-image/any.png" } } } ], "createdAt": "2021-05-22T07:02:22.401Z" }
์์๊ฐ์
jsonํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ํจ์ผ๋ก์จ, ํ์ฌ ์ฌ์ฉํ๋ minimo ์น ๋ฟ๋ง ์๋๋ผ, native, desktop app, ์ค๋์ค ๋ฆฌ๋, ์ฑ๋ด ๋ฑ์๊ฒ๋ ์ฝ๊ฒ ์ ์ฉํ ์ ์์๊ฑฐ๋ผ ์๊ฐ๋์์ต๋๋ค.๋ํ ๋ฐฑ์๋์์์ validation๋ ๋ ์ฉ์ดํ๊ณ , ํน์ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ง ์ถ์ถํ๋ ๋ฐ์๋ ์์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
-
๋๋ ํ ๋ฆฌ ์ด๋
// client cd minimo-client // server cd minimo-server -
package.json์ ์ ์๋ ํจํค์ง ์ค์น
npm install -
Firebase Realtime Database ์ฌ์ฉ์ ํ์ํ
dotenv์ค์ ๋๋ ํ ๋ฆฌ ์ต์๋จ์
.env.example์.env๋ก ๋ณ๊ฒฝ ํ ์๋์ ๊ฐ๋ค์ ๋ณ๊ฒฝ// client REACT_APP_API_KEY=[FIREBASE_CONFIG_API_KEY] REACT_APP_AUTH_DOMAIN=[FIREBASE_CONFIG_AUTH_DOMAIN] REACT_APP_SERVER_URL=[SERVER_URL] REACT_APP_AWS_ACCESS_KEY=[AWS_S3_ACCESS_KE] REACT_APP_AWS_SECRET_KEY=[AWS_S3_SECRET_KEY] REACT_APP_GOOGLE_API_KEY=[GOOGLE_API_KEY] // server PORT=[PORT_NUMBER] MONGO_URL=[MONGO_DB_URL]
- ์คํ
// client npm start // server npm run dev
-
ํ๋ก์ ํธ๋ฅผ ๋๋ด๊ณ ์ค์ค๋ก ์ํ๋ค๊ณ ์๊ฐํ ์ ์ ํต์ฌ ๊ธฐ๋ฅ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ ๊ฒ ์ ๋๋ค.
์ด์ ํ๋ก์ ํธ์์ 'react-three-fiber'๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ด๋ถ์์ ๋์๊ฐ๋ three.js, canvas, webGL์ ์ ๋ชจ๋ฅธ ์ฑ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ ๊ณ ์ํ๋ ๋๋ก ๊ตฌํํ์ง ๋ชปํ ๋ถ๋ถ๋ ์์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฒ์๋ ํต์ฌ ๊ธฐ๋ฅ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ๋ณธ web api๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ๋ ค ํ์ต๋๋ค. ๋๋ถ์ ์ด๋ ค์ด ์ํฉ์ ๋ง๋ฌ์ ๋, MDN๊ณผ stackoverflow ๋ฑ์ ํตํด ๊ธฐ๋ณธ api์ ํน์ฑ์ ํ์ตํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค. ๋ํ, ์ดํ์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ์์๋ ๋ ๊น๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์์ ๊ฑฐ๋ผ ๊ธฐ๋ํฉ๋๋ค.
-
๋ํ ํ์ฌ์์ ๋์์ด๋๋๊ณผ ์์ ์ ํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ธฐ์ ์ ํธ์๋ฅผ ์ํด ์ด๊ธฐ wireframe์ ๋์์ธ์ ๋ฐ๊พธ์ง ์๊ธฐ๋ก ๋ง์๋จน์๋๋ฐ, ์ด๋ฅผ ์ ์ง์ผ์ ์ด๊ธฐ ๋์์ธ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ ์ ๋ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
-
ํ์ ์์ฐ์ฑ์ด ๋์ ์น์ฑ์ ๊ด์ฌ์ด ๋ง์๋๋ฐ, ์ง์ ๋ง๋ค์ด ๋ณผ ์ ์์ด์ ๋๋ฌด ์ฌ๋ฐ์์ต๋๋ค. ์ถํ์ parallax scroll ์ ๋๋ฉ์ด์ , ์ ๋ฌผ๋ฆฌ์คํธ ๋ฑ ์ฌ๋ฐ๊ณ ์ธํฐ๋ ํฐ๋ธํ ์์๋ค์ ํฌํจํ ๋ธ๋ฝ๋ค์ ๋ ์ถ๊ฐํ ์์ ์ธ๋ฐ ๋๋ฌด ์ฌ๋ฐ์ ๊ฒ ๊ฐ๋ค์. ๐















