December 16, 2024
์๋ฌธ : New Architecture is here
์๋ก์ด ์ํคํ ์ฒ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ 0.76์ ์ด์ npm์์ ์ฌ์ฉํ ์ ์์ต๋๋ค!
0.76 ๋ฆด๋ฆฌ์ค ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ์ด๋ฒ ๋ฒ์ ์ ํฌํจ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ ๋ชฉ๋ก์ ๊ณต์ ํ์ต๋๋ค. ์ด๋ฒ ๊ฒ์๋ฌผ์์๋ ์๋ก์ด ์ํคํ ์ฒ ๊ฐ์์ ์ด ์ํคํ ์ฒ๊ฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ๋ฏธ๋๋ฅผ ์ด๋ป๊ฒ ๋ณํ์ํค๋์ง๋ฅผ ์ค๋ช ํฉ๋๋ค.
์๋ก์ด ์ํคํ ์ฒ๋ Suspense, Transitions, ์๋ ๋ฐฐ์น, useLayoutEffect๋ฅผ ํฌํจํ ์ต์ ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ๋ํ, ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ๋ฐ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ ์์คํ ์ ํตํด ๋ธ๋ฆฟ์ง๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค์ ์ง์ ์ก์ธ์คํ์ฌ ํ์ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด ๋ฆด๋ฆฌ์ค๋ 2018๋ ๋ถํฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ฅผ ์์ ํ ์๋ก ์ค๊ณํ๋ ค๋ ๋ ธ๋ ฅ์ ๊ฒฐ๊ณผ์ด๋ฉฐ, ๋๋ถ๋ถ์ ์ฑ์ด ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋๋ก ํน๋ณํ ์ ๊ฒฝ ์ผ์ต๋๋ค. 2021๋ ์๋ ์ปค๋ฎค๋ํฐ์ ํ๋ ฅํ์ฌ ๋ฆฌ์กํธ ์ํ๊ณ ์ ์ฒด๊ฐ ์ํํ๊ฒ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋๋ก ์๋ก์ด ์ํคํ ์ฒ ์์ ๊ทธ๋ฃน์ ๋ง๋ค์์ต๋๋ค.
๋๋ถ๋ถ์ ์ฑ์ ๊ธฐ์กด ๋ฆด๋ฆฌ์ค์ ๋์ผํ ์์ค์ ๋ ธ๋ ฅ์ผ๋ก ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ 0.76์ ์ฑํํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ด๋ฏธ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์ง์ํฉ๋๋ค. ๋ํ, ๊ธฐ์กด ์ํคํ ์ฒ๋ฅผ ๋์์ผ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ญํธํ์ฑ์ ๋ณด์ฅํ๋ ์๋ ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ง๋ ๋ช ๋ ๊ฐ ๊ฐ๋ฐ์ ๊ฑฐ์น๋ฉฐ ํ์ ์๋ก์ด ์ํคํ ์ฒ์ ๋ํ ๋น์ ์ ๊ณต๊ฐ์ ์ผ๋ก ๊ณต์ ํด ์์ต๋๋ค. ๋์ณค๋ค๋ฉด ๋ค์ ๋ฐํ๋ค์ ํ์ธํด ๋ณด์ธ์.
์๋ก์ด ์ํคํ ์ฒ๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ฅผ ๊ตฌ์ฑํ๋ ์ฃผ์ ์์คํ ์ ์์ ํ ์ฌ์ค๊ณํ ๊ฒ์ผ๋ก, ์ปดํฌ๋ํธ ๋ ๋๋ง ๋ฐฉ์, ์๋ฐ์คํฌ๋ฆฝํธ ์ถ์ํ์ ๋ค์ดํฐ๋ธ ์ถ์ํ ๊ฐ ํต์ ๋ฐฉ์, ์ค๋ ๋ ๊ฐ ์์ ์ค์ผ์ค๋ง ๋ฐฉ์์ด ํฌํจ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ด๋ฌํ ๋ด๋ถ ์์คํ ์๋ ๋ฐฉ์์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋์ง๋ง, ์ด ๋ณํ๋ ์ฑ๋ฅ ๊ฐ์ ๊ณผ ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด์ ์ํคํ ์ฒ์์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ๋ค์ดํฐ๋ธ ํ๋ซํผ๊ณผ ๋น๋๊ธฐ ๋ธ๋ฆฟ์ง๋ฅผ ํตํด ํต์ ํ์ต๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ๋ค์ดํฐ๋ธ ํจ์๋ฅผ ํธ์ถํ๋ ค๋ฉด, ํจ์ ํธ์ถ์ ์ง๋ ฌํํ๊ณ ๋ธ๋ฆฟ์ง๋ฅผ ํตํด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด์ผ ํ์ต๋๋ค. ์ด ์ํคํ ์ฒ์ ์ฅ์ ์ ๋ชจ๋ ์์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ํ๋๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ ํจ์ ํธ์ถ์ ์ฒ๋ฆฌํ๋ ๋์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์ฉ์๋ ์ํธ์์ฉ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ด ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ๋๊ปด์ง๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ์ฆ, ์ผ๋ถ ์ ๋ฐ์ดํธ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ํ์ฌ ๋๊ธฐ์์ผ๋ก ๋ ๋๋ง ๋์ด์ผ ํ๊ณ , ์งํ ์ค์ธ ๋ ๋๋ง์ด ์ค๋จ๋ ์๋ ์์์ ์๋ฏธํฉ๋๋ค. ํ์ง๋ง, ๊ธฐ์กด ์ํคํ ์ฒ๋ ๋น๋๊ธฐ์ ์ ๋ฐ์ดํธ๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ์ ์ ๋ฐ์ดํธ์ ๋๊ธฐ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ํ์ฉํ๋๋ก ์ํคํ ์ฒ๋ฅผ ๋ค์ ์์ฑํด์ผ ํ์ต๋๋ค.
๋ํ ๊ธฐ์กด ์ํคํ ์ฒ์์๋ ๋ธ๋ฆฟ์ง๋ฅผ ํตํ ํจ์ ํธ์ถ ์ง๋ ฌํ๊ฐ ์ฆ์ ์ ๋ฐ์ดํธ๋ ํฐ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ณ๋ชฉ ํ์์ด ํฌ๊ฒ ๋ฐ์ํ์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ฑ์ด 60FPS ์ด์์ ์์ ์ ์ผ๋ก ๋ฌ์ฑํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ๋ํ, ๋๊ธฐํ ๋ฌธ์ ๋ ์์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ๋ ์ด์ด๊ฐ ๋๊ธฐํ๋์ง ์์ผ๋ฉด ์ด๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์กฐ์ ํ ์ ์์ด ๋ชฉ๋ก์ ๋น ๊ณต๊ฐ์ด ํ์๋๊ฑฐ๋ ์ค๊ฐ ์ํ ๋ ๋๋ง์ผ๋ก ์ธํด UI๊ฐ ๊ฐ์๊ธฐ ๋ณ๊ฒฝ๋๋ ๋ฑ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๊ธฐ์กด ์ํคํ ์ฒ๋ ๊ธฐ๋ณธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ UI์ ๋จ์ผ ๋ณต์ฌ๋ณธ์ ์ ์งํ๊ณ ๊ทธ ๋ณต์ฌ๋ณธ์ ์ ์๋ฆฌ์์ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ ์ด์์์ ๋จ์ผ ์ค๋ ๋์์๋ง ๊ณ์ฐํ ์ ์์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฐ์ ๊ธด๊ธํ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์๊ณ , ๋ ์ด์์ ํจ๊ณผ๋ฅผ ์ฝ์ด ํดํ์ ์์น๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฑ ๋ ์ด์์์ ๋๊ธฐ์ ์ผ๋ก ์ฝ์ ์ ์์์ต๋๋ค.
์ด ๋ชจ๋ ๋ฌธ์ ๋ ๋ฆฌ์กํธ์ ๋์(concurrent) ๊ธฐ๋ฅ์ ์ ์ ํ ์ง์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ก์ด ์ํคํ ์ฒ๋ ๋ค ๊ฐ์ง ์ฃผ์ ์์๋ฅผ ํฌํจํฉ๋๋ค.
์๋ก์ด ๋ชจ๋ ์์คํ ์ ํตํด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๋ ๋๋ฌ๋ ๋ค์ดํฐ๋ธ ๋ ์ด์ด์ ๋๊ธฐ์ ์ผ๋ก ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ ๋ฐ์ดํธ ์์ฝ, ๋ ์ด์์ ์ฝ๊ธฐ๋ฅผ ๋น๋๊ธฐ์ ์ด๊ฑฐ๋ ๋๊ธฐ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ๋ํ, ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ฐ ๋ก๋ฉ๋๋ฏ๋ก ์ฑ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
์๋ก์ด ๋ ๋๋ฌ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์งํ ์ค์ธ ์ฌ๋ฌ ํธ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ๋ฆฌ์กํธ๋ ๋ฉ์ธ ์ค๋ ๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ฌ๋ฌ ๋์์ฑ ์ ๋ฐ์ดํธ ์ฐ์ ์์๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด UI๊ฐ ๋์ฑ ์๋ต์ฑ์ด ์ข์์ง๊ณ ๋๊น์ด ์๋ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์๋ก์ด ์ด๋ฒคํธ ๋ฃจํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ ๋์ ์์
์ ์ ์ ์๋ ์์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์กํธ๋ ๋ ๋๋ง์ ์ค๋จํ๊ณ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ธด๊ธํ ์ฌ์ฉ์ ์ด๋ฒคํธ๊ฐ ๋ ๋ฎ์ ์ฐ์ ์์์ UI ์ ํ๋ณด๋ค ์ฐ์ ํ๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ์น ์ฌ์๊ณผ๋ ์ผ์นํ๋ฏ๋ก ๋ง์ดํฌ๋ก ํ์คํฌ, MutationObserver
, IntersectionObserver
์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ๋ ์ง์ํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ธ๋ฆฟ์ง๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ๋ฐํ์ ๊ฐ ์ง์ ํต์ ํ ์ ์์ด ์์ ์ ํ ๋น์ฉ์ด ์ต์ํ๋ฉ๋๋ค. ์ด์ ๋ฐ๋ผ ์ค๋ฅ ๋ฆฌํฌํ , ๋๋ฒ๊น ์ด ๊ฐ์ ๋๊ณ ์ ์๋์ง ์์ ๋์์ผ๋ก ์ธํ ์ถฉ๋์ด ์ค์ด๋ญ๋๋ค.
์๋ก์ด ์ํคํ ์ฒ๋ ์ด์ ํ๋ก๋์ ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๋ฉํ์ ํ์ด์ค๋ถ ์ฑ๊ณผ ๊ธฐํ ์ ํ์์ ์ด๋ฏธ ๋๊ท๋ชจ๋ก ์ฌ์ฉ ์ค์ด๋ฉฐ, Quest ๊ธฐ๊ธฐ์ฉ ํ์ด์ค๋ถ ๋ฐ ์ธ์คํ๊ทธ๋จ ์ฑ ๊ฐ๋ฐ์์๋ ์ฑ๊ณต์ ์ผ๋ก ํ์ฉ๋์์ต๋๋ค.
Expensify์ Kraken๊ณผ ๊ฐ์ ํํธ๋๋ค์ ์ด๋ฏธ ๋ช ๋ฌ ๋์ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํด ์ฑ๊ณต์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค. BlueSky์ ์ต์ ๋ฆด๋ฆฌ์ค๋ ํ์ธํด ๋ณด์ธ์.
์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ์์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ํ๋ซํผ ๊ฐ ํต์ ๋ฐฉ์์ ์์ ํ ์ฌ์ค๊ณํ ๊ฒ์ผ๋ก, C++๋ก ์์ฑ๋์ด ๋ค์๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ์์คํ ์์๋ ์ด์ ๋น๋๊ธฐ ๋ธ๋ฆฟ์ง๋ฅผ ์ฌ์ฉํ ํ์ ์์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ธํฐํ์ด์ค(JSI)๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ๋ ์ด์ด๊ฐ ์๋ก ๋๊ธฐ์ ์ผ๋ก ํต์ ํ ์ ์์ต๋๋ค. ์ฆ, ์ด์ ์ฌ์ฉ์ ์ ์ ๋ค์ดํฐ๋ธ ๋ชจ๋์์ ํจ์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๊ณ ๊ฐ์ ๋ฐํํ ๋ค์ ํด๋น ๊ฐ์ ๋ค๋ฅธ ๋ค์ดํฐ๋ธ ๋ชจ๋ ํจ์์ ๋ค์ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ด์ ์ํคํ ์ฒ์์๋ ๋ค์ดํฐ๋ธ ํจ์ ํธ์ถ์ ์๋ต์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ฝ๋ฐฑ์ ์ ๊ณตํด์ผ ํ๊ณ , ๋ฐํ๋ ๊ฐ์ ์ง๋ ฌํํ ์ ์์ด์ผ ํ์ต๋๋ค.
// โ ๋ค์ดํฐ๋ธ ๋ชจ๋์์ ๋๊ธฐํ ์ฝ๋ฐฑ
nativeModule.getValue(value => {
// โ v๊ฐ์ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์์
nativeModule.doSomething(value);
});
์ ์ํคํ ์ฒ์์๋ ๋ค์ดํฐ๋ธ ํจ์์ ๋ํ ๋๊ธฐ์ ํธ์ถ์ ์ํํ ์ ์์ต๋๋ค.
// โ
๋ค์ดํฐ๋ธ ๋ชจ๋์ ๋๊ธฐ ์๋ต
const value = nativeModule.getValue();
// โ
๊ฐ์ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์์
nativeModule.doSomething(value);
์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์นจ๋ด ์๋ฐ์คํฌ๋ฆฝํธ/ํ์ ์คํฌ๋ฆฝํธ API์์ ์ก์ธ์ค ํ๋ฉด์ C++ ๋ค์ดํฐ๋ธ ๊ตฌํ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์๋ก์ด ๋ชจ๋ ์์คํ ์ C++๋ก ์์ฑ๋ ๋ชจ๋์ ์ง์ํ๋ฏ๋ก ๋ชจ๋์ ํ ๋ฒ๋ง ์์ฑํ๋ฉด Android, iOS, Windows, macOS๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋ซํผ์์ ์๋ํฉ๋๋ค. C++๋ก ๋ชจ๋์ ๊ตฌํํ๋ฉด ๋ณด๋ค ์ธ๋ถํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ํ Codegen์ ์ฌ์ฉํ๋ฉด ๋ชจ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ์ธต๊ณผ ๋ค์ดํฐ๋ธ ๊ณ์ธต ๊ฐ์ ๊ฐ๋ ฅํ ํ์ ์์ ๊ณ์ฝ์ ์ ์ํ ์ ์์ต๋๋ค. ๊ฒฝํ์ ํฌ๋ก์ค ํ๋ซํผ ์ฑ์์ ๋ฐ์ํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํฌ๋์ ์์ธ ์ค ํ๋๋ ๊ฒฝ๊ณ ๊ฐ ํ์ ์ค๋ฅ์ ๋๋ค. Codegen์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ์ค๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ชจ๋์ ์ด์ ์ง์ฐ ๋ก๋ฉ๋ฉ๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋๊ฐ ์๋๋ผ ์ค์ ๋ก ํ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฑ ์์ ์๊ฐ์ด ๋จ์ถ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ ธ๋ ์ฑ๋ฅ์ด ์ ์ง๋ฉ๋๋ค.
react-native-mmkv์ ๊ฐ์ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ฌ ์ด์ ์ ๋๋ฆฌ๊ณ ์์ต๋๋ค.
โ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ์์คํ ๋๋ถ์
react-native-mmkv
์ ์ค์ , ์๋ ๋งํฌ ๋ฐ ์ด๊ธฐํ ๊ณผ์ ์ด ํฌ๊ฒ ๋จ์ํ๋์์ต๋๋ค. ์๋ก์ด ์ํคํ ์ฒ ๋๋ถ์react-native-mmkv
๋ ์ด์ ์์ C++ ๋ค์ดํฐ๋ธ ๋ชจ๋๋ก, ๋ชจ๋ ํ๋ซํผ์์ ์๋ํ ์ ์์ต๋๋ค. ์๋ก์ด Codegen์ MMKV์ ์์ ํ ํ์ ์์ ์ฑ์ ๋ถ์ฌํ์ฌ ์ค๋๋NullPointerReference
๋ฌธ์ ๋ฅผ null ์์ ์ฑ์ ๊ฐ์ ์ ์ฉํจ์ผ๋ก์จ ํด๊ฒฐํ์ต๋๋ค. ๋ํ ๋ค์ดํฐ๋ธ ๋ชจ๋ ํจ์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ ์ ์์ด ์ฌ์ฉ์ ์ง์ JSI ์ก์ธ์ค๋ฅผ ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ API๋ก ๋์ฒดํ ์ ์์์ต๋๋ค.โ -react-native-mmkv
์ ๊ฐ๋ฐ์ Marc Rousavy
์ฐ๋ฆฌ๋ ๋ค์ดํฐ๋ธ ๋ ๋๋ฌ๋ฅผ ์์ ํ ์๋ก ์์ฑํ์ฌ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ถ๊ฐํ์ต๋๋ค.
์ ๋ฐ์ดํธ๋ ๋ค์ดํฐ๋ธ ๋ ๋๋ฌ๋ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ถ๋ณ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ ์ฅํฉ๋๋ค. ์ฆ, UI๊ฐ ์ง์ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋์ด ์ค๋ ๋์์ ์์ ํ๊ฒ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์งํ ์ค์ธ ํธ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ค๋ฅธ ๋ฒ์ ์ ๋ํ๋ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, UI๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋๋งํ ์ ์์ผ๋ฉฐ(์: ์ ํ ์ค), ์ฌ์ฉ์ ์ ๋ ฅ์ ์๋ตํ์ฌ ๋ฉ์ธ ์ค๋ ๋์์ ๋ ๋๋ง ํ ์๋ ์์ต๋๋ค.
์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ง์ํจ์ผ๋ก์จ ๋ฆฌ์กํธ๋ ๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ค๋จํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฐ์ ๊ธด๊ธ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋๋ง ํ ๋ค์ ํ์ํ ๋ ๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ๋ฅผ ๋ค์ ์์ํ ์ ์์ต๋๋ค. ์๋ก์ด ๋ ๋๋ฌ๋ ๋ ์ด์์ ์ ๋ณด๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ฝ์ ์ ์์ผ๋ฉฐ ์ฌ๋ฌ ์ค๋ ๋์์ ์ฝ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ณ์ฐ๊ณผ ํดํ ์ฌ๋ฐฐ์น์ ๊ฐ์ ๋๊ธฐ์ ์ฝ๊ธฐ๋ฅผ ์ง์ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ ๋๋ฌ๋ฅผ C++๋ก ๋ค์ ์์ฑํจ์ผ๋ก์จ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด๋ iOS, Android, Windows, macOS ๋ฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ์ง์ํ๋ ๊ธฐํ ํ๋ซํผ์์ ์ผ๊ด๋ ๋ ๋๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ ํ๋ซํผ์ ๋ํด ๋ณ๋๋ก ๊ตฌํํ ํ์๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ์ โ๋ค์ค ํ๋ซํผ ๋น์ (Many Platform Vision)โ์ ํฅํ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ทฐ ํํํ(View Flattening)๋ ๊น์ ๋ ์ด์์ ํธ๋ฆฌ๋ฅผ ํผํ๊ธฐ ์ํ Android ์ ์ฉ ์ต์ ํ์์ต๋๋ค. ๊ณต์ C++ ์ฝ์ด๊ฐ ์๋ ์๋ก์ด ๋ ๋๋ฌ๋ ์ด ๊ธฐ๋ฅ์ iOS์๋ ์ ๊ณตํฉ๋๋ค. ์ด ์ต์ ํ๋ ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ ์ถ๊ฐ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ ์ด์ Suspense ๋ฐ Transition๊ณผ ๊ฐ์ ๋์(concurrent) ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ์ง์ํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ง์ฐ, ๋๊น ๋๋ ์๊ฐ์ ์ ํ ์์ด ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ํฅํ ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ FlatList ๋ฐ TextInput๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ปดํฌ๋ํธ์ ๋ํ ๋ ๋ง์ ๊ฐ์ ์ฌํญ์ ์ ๊ณตํ ์์ ์ ๋๋ค.
Reanimated๊ณผ ๊ฐ์ ์ธ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ ์๋ก์ด ๋ ๋๋ฌ์ ์ด์ ์ ํ์ฉํ๊ณ ์์ต๋๋ค.
โํ์ฌ ๊ฐ๋ฐ ์ค์ธ Reanimated 4๋ ์๋ก์ด ๋ ๋๋ฌ์ ์ง์ ์๋ํ๋ ์๋ก์ด ์ ๋๋ฉ์ด์ ์์ง์ ๋์ ํ์ฌ ์ ๋๋ฉ์ด์ ์ ์ฒ๋ฆฌํ๊ณ ๋ ์ด์์์ ์ฌ๋ฌ ์ค๋ ๋์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ก์ด ๋ ๋๋ฌ์ ์ค๊ณ ๋๋ถ์ ์๋ง์ ์ฐํ ๋ฐฉ๋ฒ์ ์์กดํ์ง ์๊ณ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๋ํ C++๋ก ๊ตฌํ๋๊ณ ํ๋ซํผ ๊ฐ์ ๊ณต์ ๋๊ธฐ ๋๋ฌธ์ Reanimated์ ํฐ ๋ถ๋ถ์ ํ ๋ฒ ์์ฑ๋์ด ํ๋ซํผ๋ณ ๋ฌธ์ ๋ฅผ ์ต์ํํ๊ณ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ค์ด๋ฉฐ ํ๋ซํผ ์ฑํ์ ๊ฐ์ํํ ์ ์์ต๋๋ค.โ - Reanimated์ ๊ฐ๋ฐ์ Krzysztof Magiera
์๋ก์ด ์ํคํ ์ฒ๋ ์ด RFC์์ ์ค๋ช ๋ ๋๋ก ์ ์ ์๋ ์ด๋ฒคํธ ๋ฃจํ ์ฒ๋ฆฌ ๋ชจ๋ธ์ ๊ตฌํํ ์ ์๋๋ก ํ์ต๋๋ค. ์ด RFC๋ HTML ํ์ค์ ์ค๋ช ๋ ์ฌ์์ ๋ฐ๋ฅด๋ฉฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ ๋์์ ์์ ์ ์ํํ๋ ๋ฐฉ์์ ์ค๋ช ํฉ๋๋ค.
์ ์ ์๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๊ตฌํํ๋ฉด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ๋ฆฌ์กํธ DOM ๊ฐ์ ๊ฐ๊ทน์ ์ค์ผ ์ ์์ต๋๋ค. ์ด์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ด ๋ฆฌ์กํธ DOM ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์๊ณผ ๋ ์ ์ฌํด์ ธ ํ ๋ฒ ํ์ตํ๋ฉด ์ด๋์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
๋ฆฌ์กํธ๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ์ ๋ฐ์ดํธ์ ์ด๋ฒคํธ์ ์์๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ธด๊ธ ์ฌ์ฉ์ ์ด๋ฒคํธ๋ก ์ค๋จํ๊ณ ์ ๋ ๋๋ฌ๋ฅผ ์ฌ์ฉํด ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ํ์ด๋จธ์ ๊ฐ์ ์ด๋ฒคํธ ๋ฐ ์์ ์ ๋์์ ์น ์ฌ์๊ณผ ์ผ์นํ๋๋ก ์กฐ์ ํ์ฌ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ์น์์ ์ต์ํ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ํ๊ณ ๋ฆฌ์กํธ DOM๊ณผ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๊ฐ์ ์ฝ๋ ๊ณต์ ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ด๋ ๋ง์ดํฌ๋กํ์คํฌ(microtasks), MutationObserver
๋ฐ IntersectionObserver
์ ๊ฐ์ ์น ํ์ค ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํ๋ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์์ง ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์์ ์ฌ์ฉํ ์ ์์ง๋ง, ํฅํ ์ง์ํ ์ ์๋๋ก ์์
์ค์
๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ด๋ฒคํธ ๋ฃจํ์ ์๋ก์ด ๋ ๋๋ฌ์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๋ ์ด์์์ ๋๊ธฐ์ ์ผ๋ก ์ฝ์ ์ ์๊ฒ ์ง์ํ์ฌ, ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ useLayoutEffect
๋ฅผ ์ ๋๋ก ์ง์ํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ์ด์์ ์ ๋ณด๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ฝ๊ณ ๊ฐ์ ํ๋ ์ ๋ด์์ UI๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ด๋ก์จ ์ฌ์ฉ์์๊ฒ ํ์๋๊ธฐ ์ ์ ์์๋ค์ ์์น๋ฅผ ์ ํํ๊ฒ ์ง์ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ useLayoutEffect ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ก์ด ์ํคํ ์ฒ์์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ๋ธ๋ฆฟ์ง ์ข ์์ฑ์ ์์ ํ ์ ๊ฑฐํ๊ณ JSI(JavaScript Interface)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ ์ง์ ์ ์ด๊ณ ํจ์จ์ ์ธ ํต์ ์ ๊ตฌํํ์ต๋๋ค.
๋ธ๋ฆฟ์ง๋ฅผ ์ ๊ฑฐํ๋ฉด ์ด๊ธฐํ ๊ณผ์ ์ด ์๋ต๋์ด ์ฑ ์์ ์๊ฐ์ด ๋นจ๋ผ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ์ํคํ ์ฒ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ญ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋์ ์ด๊ธฐํํด์ผ ํ๊ณ , ์ด๋ก ์ธํด ์ฑ ์์ ์๊ฐ์ ์ฝ๊ฐ์ ์ง์ฐ์ด ๋ฐ์ํ์ต๋๋ค.
// โ ๋๋ฆฐ ์ด๊ธฐํ
import { NativeTimingModule } from 'NativeTimingModule';
global.setTimeout = timer => {
NativeTimingModule.setTimeout(timer);
};
// App.js
setTimeout(() => {}, 100);
์ ์ํคํ ์ฒ์์๋ C++์์ ๋ฉ์๋๋ฅผ ์ง์ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
// โ
C++์์ ์ง์ ์ ์ธ ์ด๊ธฐํ
runtime.global().setProperty(runtime, "setTimeout", createTimer);
// App.js
setTimeout(() => {}, 100);
์ด๋ฒ ์ฌ์ค๊ณ๋ฅผ ํตํด ํนํ ์ฑ ์์ ์ ๋ฐ์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ถฉ๋์ ๋ํ ์ค๋ฅ ๋ณด๊ณ ๋ฅผ ๊ฐ์ ํ๊ณ ์ ์๋์ง ์์ ๋์์ผ๋ก ์ธํ ์ถฉ๋์ ์ค์ ๋๋ค. ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์๋ก์ด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ๋๋ฒ๊น ์ ๊ฐ์ํํ๊ณ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์ง์ํฉ๋๋ค.
๋ธ๋ฆฟ์ง๋ ์ ์ํคํ ์ฒ๋ก์ ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ํ๊ธฐ ์ํด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋จ์ ์์ต๋๋ค. ํฅํ ๋ธ๋ฆฟ์ง ์ฝ๋๋ ์์ ํ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค.
๋๋ถ๋ถ์ ์ฑ์ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค์ ๋์ผํ ๋ ธ๋ ฅ์ผ๋ก 0.76์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์์ต๋๋ค.
0.76์ผ๋ก ์ฑ์ ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์๋ก์ด ์ํคํ ์ฒ์ React 18์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์๋ก์ด ์ํคํ ์ฒ์ ๋ชจ๋ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํคํ ์ฒ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋๋ก ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํฉ๋๋ค.
์ฒ์ ์ ๊ทธ๋ ์ด๋ ํ ์ฑ์ ์๋ ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์ํคํ ์ฒ์ ํจ๊ป ์๋ก์ด ์ํคํ ์ฒ์์ ์คํ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ์ฑ์์๋ ๋ณ๊ฒฝ ์์ด ์๋ํ์ง๋ง, ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด๋ ์ฌ์ฉ์ ์ ์ Shadow Node ๋๋ ๋์์ฑ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ๋ฑ ์๋ ค์ง ์ ํ์ฌํญ์ด ์์ต๋๋ค.
๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฑ์ด ๋ฆฌ์กํธ์ ๊ท์น(Rules of React)์ ๋ฐ๋ฅด๊ณ Concurrent ๋ฆฌ์กํธ๋ฅผ ์ง์ํ๋๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ฆฌ์กํธ 18๊ณผ ๊ทธ ์๋ฏธ ์ฒด๊ณ์ ๋ง๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ค๋ฉด ๋ฆฌ์กํธ 18 ์ ๊ทธ๋ ์ด๋ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์ฒด์ ์ธ ์ ๋ต์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ํ์ง ์๊ณ ์ฑ์ ์๋ก์ด ์ํคํ ์ฒ์์ ์คํํ๋๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ์ดํ ์ฑ์ ์ํ๋ ์๋๋ก ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ชจ๋์ ์๋ก์ด ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์๋ก์ด ํ๋ฉด์์๋ ๋์์ฑ ๊ธฐ๋ฅ์ ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ์กด ํ๋ฉด์์๋ ๋์์ฑ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ ์ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ชจ๋์ ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ฅํ์ฌ ์๋ก์ด ์ํคํ ์ฒ ์ง์์ ๋ณด์ฅํ์ต๋๋ค. ํ์ฌ 850๊ฐ ์ด์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฏธ ํธํ๋์์ผ๋ฉฐ, ์ฃผ๊ฐ ๋ค์ด๋ก๋ ์๊ฐ 20๋ง ํ ์ด์์ธ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ค์ด๋ก๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ 10%)๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ก์ด ์ํคํ ์ฒ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธํ์ฑ์ reactnative.directory ์น์ฌ์ดํธ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๊ทธ๋ ์ด๋์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ์ ์ฐธ์กฐํ์ธ์.
์๋ก์ด ์ํคํ
์ฒ๋ ๋ฆฌ์กํธ 18, ๋์์ฑ ๊ธฐ๋ฅ ๋ฐ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ useLayoutEffect
๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ๋ฆฌ์กํธ 18 ๊ธฐ๋ฅ์ ์ ์ฒด ๋ชฉ๋ก์ ๋ฆฌ์กํธ 18 ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ธ์.
์ ํ์ ๋ฆฌ์กํธ 18์์ ๊ธด๊ธ ์ ๋ฐ์ดํธ์ ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌ๋ถํ๋ ์๋ก์ด ๊ฐ๋ ์ ๋๋ค.
๊ธด๊ธ ์ ๋ฐ์ดํธ๋ ๋ฌผ๋ฆฌ์ ๊ฐ์ฒด์ ๋์ ๋ฐฉ์์ ๋ํ ์ฐ๋ฆฌ์ ์ง๊ด๊ณผ ์ผ์นํ๋๋ก ์ฆ๊ฐ์ ์ธ ๋ฐ์์ด ํ์ํฉ๋๋ค. ๋ฐ๋ฉด, ์ ํ ์ ๋ฐ์ดํธ๋ ์ฌ์ฉ์๊ฐ ๋ชจ๋ ์ค๊ฐ ์ํ๋ฅผ ํ๋ฉด์์ ๋ณผ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ก์ด ์ํคํ ์ฒ์์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ๊ธด๊ธ ์ ๋ฐ์ดํธ์ ์ ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ณ๋๋ก ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ต์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ค๋ฉด ํ๋์ ์ฌ์ฉ์ ์
๋ ฅ์ด ๊ธด๊ธ ์
๋ฐ์ดํธ์ ๋น๊ธด๊ธ ์
๋ฐ์ดํธ ๋ชจ๋๋ฅผ ํธ๋ฆฌ๊ฑฐํด์ผ ํฉ๋๋ค. ReactDOM๊ณผ ์ ์ฌํ๊ฒ, press
๋ change
์ ๊ฐ์ ์ด๋ฒคํธ๋ ๊ธด๊ธ ์ด๋ฒคํธ๋ก ์ฒ๋ฆฌ๋์ด ์ฆ์ ๋ ๋๋ง๋ฉ๋๋ค. ๋ํ, ์
๋ ฅ ์ด๋ฒคํธ ๋ด์์ startTransition
API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์กํธ์ ์ด๋ค ์
๋ฐ์ดํธ๊ฐ โ์ ํโ์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฐ๊ธฐ๋ ์ ์๋์ง๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
import { startTransition } from 'react';
// ๊ธด๊ธ ์
๋ฐ์ดํธ: ์ฌ๋ผ์ด๋ ๊ฐ์ ํ์
setCount(input);
// ์ ํ์ผ๋ก ์ํ ์
๋ฐ์ดํธ ํ์
startTransition(() => {
// ์ ํ ์
๋ฐ์ดํธ: ๊ฒฐ๊ณผ ํ์
setNumberOfTiles(input);
});
๊ธด๊ธ ์ด๋ฒคํธ์ ์ ํ์ ๋ถ๋ฆฌํ๋ฉด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋ ๋ฐ์์ ์ผ๋ก ๋๊ณ , ์ฌ์ฉ์ ๊ฒฝํ์ด ๋์ฑ ์ง๊ด์ ์ผ๋ก ๋ฉ๋๋ค.
๋ค์์ ์ ํ์ ์ง์ํ์ง ์๋ ์ด์ ์ํคํ
์ฒ์ ์ ํ์ ์ง์ํ๋ ์๋ก์ด ์ํคํ
์ฒ์ ๋น๊ต์
๋๋ค. ๊ฐ ํ์ผ์ด ๋จ์ํ ๋ฐฐ๊ฒฝ์ ๋ทฐ๊ฐ ์๋๋ผ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ๋ณต์กํ ์ปดํฌ๋ํธ๋ผ๊ณ ์์ํด ๋ณด์ธ์. useTransition
์ ์ฌ์ฉํ๋ฉด ์ฑ์ด ์
๋ฐ์ดํธ๋ก ์ธํด ๊ณผ๋ถํ ๋๊ฑฐ๋ ๋ค์ฒ์ง๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
transitions๋ฅผ ์ง์ํ์ง ์์๊ฒฝ์ฐ | transitions์ ์ง์ํ๋ ๊ฒฝ์ฐ |
---|---|
![]() |
![]() |
์ด์ : ์ ํ์ผ๋ก ํ์ํ์ง ์๊ณ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค | ์ดํ: ์งํ ์ค์ธ ๋ ๋๋ง์ ์ค๋จํ๋ ํธ๋์ง์ ์ด ์๋ ํ์ผ์ ๋ ๋๋ง ํ์ฌ ์ค๋๋ ์ํ์ ๋ ๋๋ง์ ์ค๋จํฉ๋๋ค. |
์์ธํ ๋ด์ฉ์ ๋์์ฑ ๋ ๋๋ฌ ๋ฐ ๊ธฐ๋ฅ ์ง์์ ์ฐธ์กฐํ์ธ์.
์๋ก์ด ์ํคํ ์ฒ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด ๋ฆฌ์กํธ 18์ ์๋ ๋ฐฐ์น ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ ๋ฐฐ์น์ ๋ฆฌ์กํธ๊ฐ ๋ ๋๋ง ์ ๋ ๋ง์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ๋๋ก ๋ฌถ์ด ์ค๊ฐ ์ํ์ ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ ๊ฐ๋ฐ์๊ฐ ์ถ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์์ด ๋ ๋น ๋ฅด๊ณ ์ง์ฐ์ด ์ ์ ์ํ๋ก ์๋ํฉ๋๋ค.
๋ ๊ฑฐ์ ๋ ๋๋ฌ | ๋ฆฌ์กํธ 18 ๋ ๋๋ฌ |
---|---|
![]() |
![]() |
์ด์ : ๋ ๊ฑฐ์ ๋ ๋๋ฌ๋ก ๋น๋ฒํ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋๋ง ํ์ต๋๋ค. | ์ดํ: ์๋ ์ผ๊ด ์ฒ๋ฆฌ๋ก ๋น๋ฒํ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๋๋ง ํฉ๋๋ค. |
์ด์ ์ํคํ ์ฒ์์๋ ๋ ๋ง์ ์ค๊ฐ ์ํ๊ฐ ๋ ๋๋ง ๋์์ผ๋ฉฐ, ์ฌ๋ผ์ด๋๊ฐ ๋ฉ์ถ๋๋ผ๋ UI๊ฐ ๊ณ์ ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ์๋ก์ด ์ํคํ ์ฒ์์๋ ์๋ ๋ฐฐ์น ๋๋ถ์ ์ค๊ฐ ์ํ๊ฐ ์ ๊ฒ ๋ ๋๋ง ๋๊ณ ๋ ๋๋ง์ด ํจ์ฌ ๋นจ๋ฆฌ ์๋ฃ๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋์์ฑ ๋ ๋๋ฌ ๋ฐ ๊ธฐ๋ฅ ์ง์์ ์ฐธ์กฐํ์ธ์.
์ด๋ฒคํธ ๋ฃจํ์ ๋๊ธฐ์ ์ผ๋ก ๋ ์ด์์์ ์ฝ์ ์ ์๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก, ์๋ก์ด ์ํคํ
์ฒ์์๋ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ useLayoutEffect
์ ๋ํ ์ ์ ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค.
์ด์ ์ํคํ
์ฒ์์๋ onLayout
์ด๋ฒคํธ(๋น๋๊ธฐ)๋ก ๋ทฐ์ ๋ ์ด์์ ์ ๋ณด๋ฅผ ์ฝ์ด์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ ์ด์์์ ์ฝ๊ณ ์
๋ฐ์ดํธํ ๋๊น์ง ์ต์ ํ ํ๋ ์ ๋์ ์๋ชป๋ ๋ ์ด์์์ด ํ์๋์ด ํดํ์ด ์๋ชป๋ ์์น์ ํ์๋๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
// โ ์ปค๋ฐ ํ ๋น๋๊ธฐ onLayout
const onLayout = React.useCallback(event => {
// โ ๋ ์ด์์์ ์ฝ๊ธฐ ์ํ ๋น๋๊ธฐ ์ฝ๋ฐฑ
ref.current?.measureInWindow((x, y, width, height) => {
setPosition({ x, y, width, height });
});
}, []);
// ...
<ViewWithTooltip onLayout={onLayout} ref={ref} position={position} />;
์๋ก์ด ์ํคํ
์ฒ์์๋ useLayoutEffect
๋ด์์ ๋ ์ด์์ ์ ๋ณด๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
// โ
์ปค๋ฐ๋์ ๋๊ธฐ layout effect
useLayoutEffect(() => {
// โ
๋ ์ด์์์ ์ฝ๊ธฐ ์ํ ๋๊ธฐ ํธ์ถ
const rect = ref.current?.getBoundingClientRect();
setPosition(rect);
}, []);
// ...
<ViewWithTooltip ref={ref} position={position} />;
์ด ๋ณ๊ฒฝ์ ํตํด ๋ ์ด์์ ์ ๋ณด๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ฝ๊ณ ๋์ผํ ํ๋ ์์์ UI๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์์๊ฐ ํ์๋๊ธฐ ์ ์ ์ ํํ ์์น๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ onLayout | ๋๊ธฐ useLayoutEffect |
---|---|
![]() |
![]() |
์ด์ ์ํคํ
์ฒ์์๋ ๋ ์ด์์์ onLayout ์์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์๊ธฐ ๋๋ฌธ์ ํดํ์ ์์น๊ฐ ์ง์ฐ๋์์ต๋๋ค. |
์ ์ํคํ
์ฒ์์๋ ๋ ์ด์์์ useLayoutEffect ์์ ๋๊ธฐ์์ผ๋ก ์ฝ์ด์ ํ์ํ๊ธฐ ์ ์ ํดํ ์์น๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. |
์์ธํ ๋ด์ฉ์ ๋๊ธฐ์ ๋ ์ด์์ ๋ฐ ํจ๊ณผ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Suspense๋ฅผ ์ฌ์ฉํ๋ฉด ์์ง ํ์ ์ค๋น๊ฐ ๋์ง ์์ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์ผ๋ถ์ ๋ํด ์ ์ธ์ ์ผ๋ก ๋ก๋ฉ ์ํ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
<Suspense fallback={<Spinner />}>
<Comments />
</Suspense>
๋ช ๋ ์ ์ ํ๋ ๋ฒ์ ์ Suspense๋ฅผ ๋์ ํ์ผ๋ฉฐ ๋ฆฌ์กํธ 18์์๋ ์์ ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ Suspense์ ๋ํ ๋์์ฑ ๋ ๋๋ง์ ์ง์ํ์ง ์์์ต๋๋ค.
์๋ก์ด ์ํคํ ์ฒ๋ ๋ฆฌ์กํธ 18์ ๋์ ๋ Suspense๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ์ด์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์์ Suspense๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ์ ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ๋ก๋ฉ ์ํ๊ฐ ํ์๋๋ ๋์ ์ค๋จ๋ ์ฝํ ์ธ ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ ๋๋ง๋ฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด ํ์๋ ์ฝํ ์ธ ์ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ฌ ๋์ฑ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ฆฌ์กํธ 18์ Suspense RFC๋ฅผ ์ฐธ์กฐํ์ธ์.
0.76์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ฉด ๋ฆด๋ฆฌ์ค ํฌ์คํธ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์. ์ด๋ฒ ๋ฆด๋ฆฌ์ค๋ ๋ฆฌ์กํธ 18๋ก๋ ์ ๊ทธ๋ ์ด๋๋๋ฏ๋ก ๋ฆฌ์กํธ 18 ์ ๊ทธ๋ ์ด๋ ๊ฐ์ด๋๋ฅผ ํจ๊ป ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ์ฑ์ ๊ธฐ์กด ์ํคํ ์ฒ์์ ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด ๋๋ถ์ ์ด๋ฌํ ๋จ๊ณ๋ง์ผ๋ก ์๋ก์ด ์ํคํ ์ฒ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ก์ด ์ํคํ ์ฒ์ ๋ชจ๋ ์ด์ ์ ํ์ฉํ๊ณ ๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ๋ฐ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ API๋ฅผ ์ง์ํ๋๋ก ์ฌ์ฉ์ ์ ์ ๋ค์ดํฐ๋ธ ๋ชจ๋ ๋ฐ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ๋ง์ด๊ทธ๋ ์ด์ ํ์ง ์์ผ๋ฉด ๊ณต์ C++ ์ฝ๋, ๋๊ธฐ ๋ฉ์๋ ํธ์ถ, Codegen์ ํตํ ํ์ ์์ ์ฑ ๋ฑ์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ์ง ์์ผ๋ฉด ๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์๋ก์ด ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
์ฐธ๊ณ : ํฅํ ๋ฆด๋ฆฌ์ค์์๋ ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด๊ฐ ์ ๊ฑฐ๋๋ฉฐ, ๋ชจ๋ ๋ชจ๋์ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค.
์ฑ ๊ฐ๋ฐ์๋ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์์ ํ ์ง์ํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ฌ์ฉ์ ์ง์ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ ๋ฐ ์ฌ์ฉ์ ์ง์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ ๊ทธ๋ ์ด๋ํ์ฌ ์ ์ํคํ ์ฒ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํด์ผ ํฉ๋๋ค.
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ํ์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ฅํ์ฌ ์๋ก์ด ์ํคํ ์ฒ ์ง์์ ๋ณด์ฅํ์ต๋๋ค. ์๋ก์ด ์ํคํ ์ฒ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธํ์ฑ์ reactnative.directory ์น์ฌ์ดํธ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ฑ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง ํธํ๋์ง ์์ ๊ฒฝ์ฐ ๋ค์์ ์๋ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ด๋ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ํธ ์ด์ฉ์ฑ(interop) ๋ ์ด์ด ๋๋ถ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฌธ์ ์์ด ์๋ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ํ์ง๋ง, ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๊ณ ๋์์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋๊ณผ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ API๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋ค์ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ผ ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์๋ก์ด ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ธ์.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ง ๊ด๋ฆฌ์๋ ๋จผ์ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ํธ ์ด์ฉ์ฑ ๋ ์ด์ด์ ํจ๊ป ์๋ํ๋์ง ํ ์คํธํด์ผ ํฉ๋๋ค. ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ์๋ก์ด ์ํคํ ์ฒ ์์ ๊ทธ๋ฃน(New Architecture Working Group)์ ์ด์๋ฅผ ์ด์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ์ธ์.
์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์์ ํ ์ง์ํ๋ ค๋ฉด ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ก์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ ๋ฐ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ API๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ ์๋ก์ด ์ํคํ ์ฒ์ ๋ชจ๋ ์ด์ ์ ๋๋ฆฌ๊ณ ๋์์ฑ ๊ธฐ๋ฅ์ ์ง์ํ ์ ์์ต๋๋ค.
๋ค์ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ฌ ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์๋ก์ด ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
์๋ก์ด ์ํคํ ์ฒ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ, ๋ค์ ํ์ฑํํ ์ค๋น๊ฐ ๋ ๋๊น์ง ๋นํ์ฑํ ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ๋นํ์ฑํํ์ธ์.
android/gradle.properties
ํ์ผ์ ์์ ํ๊ณ newArchEnabled
ํ๋๊ทธ๋ฅผ ๋๋๋ค.-newArchEnabled = true + newArchEnabled = false;
RCT_NEW_ARCH_ENABLED=0 bundle exec pod install
์๋ก์ด ์ํคํ ์ฒ๋ฅผ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋ ๊ฐ์ ์ฐ๊ตฌ์ ๊ฐ๋ฐ์ ๊ฑฐ์น ๋๊ท๋ชจ ํ๋ก์ ํธ์์ต๋๋ค. ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ ์ค ํ์ฌ์ ๊ณผ๊ฑฐ์ ๋ชจ๋ ๋ฆฌ์กํธ ํ์๋ค์๊ฒ ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค.
๋ํ ์ด๋ฅผ ์ํด ํ๋ ฅํด ์ฃผ์ ๋ชจ๋ ํํธ๋์ฌ์๊ฒ๋ ๊น์ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค. ํนํ ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ค๊ป ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค.
react-native-windows
๋ฐ react-native-macos
๋ฅผ ์ํ ์๋ก์ด ์ํคํ
์ฒ ๊ตฌํ์ ์ถ๊ฐํ๊ณ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ถ๊ฐํด์ฃผ์ ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.๐ ํ๊ตญ์ด๋ก ๋ ํ๋ฐํธ์๋ ์ํฐํด์ ๋น ๋ฅด๊ฒ ๋ฐ์๋ณด๊ณ ์ถ๋ค๋ฉด Korean FE Article(https://kofearticle.substack.com/)์ ๊ตฌ๋ ํด์ฃผ์ธ์!