2๋ถ๊ธฐ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ฉด์ 6์ ํ๋ฌ ๊ฐ ์งํํ๋ ์ค์ฟผ๋ ์ ๋ฌด, ์ฑํฐ ์ ๋ฌด ๋ฐ 5์๋ฌ์ action item๋ค์ ์ ๋ฆฌํด๋ณด๊ณ ๋ค์ ๋ถ๊ธฐ๋ฅผ ์ํด ์ด๋ค ๋ถ๋ถ๋ค์ ๋ ๊ณต๋ถํ๋ฉด ์ข์์ง ๊ฐ์ ํ๋ฉด ์ข์์ง ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
5์ ํ๊ณ ๋์๋ณด๊ธฐ
5์์ ์ผ์๋ action item๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- ํ๋ฉด์ ํ ๊ฐ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด Native Stack ๋์ ๋ฐ ์ฑ๋ฅ ๋ถ์๋ฐฉ๋ฒ ์ฐพ์๋ณด๊ธฐ
- ์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์กฐ๊ธ ๋ ์ฑํฐ์๋ค์ด ์ฝ๊ฒ ์ ์ฉํ๋ ๋ฐฉ๋ฒ ๊ณ ๋ฏผํด๋ณด๊ธฐ
- ์ปดํฌ๋ํธ ์ค๊ณ ์ ๋ฆฌ
- ๋ชปํ๋ ์์ ์งํํด๋ณด๊ธฐ: ๋ฆฌ์กํธ ๋ด๋ถ ์ฝ๋ ๋ถ์, UI ํจํด๋ณ ์ต์ ํ ์ ๋ฆฌํด๋ณด๊ธฐ
- 3๋ถ๊ธฐ ์ผ๊ฐ ๋ฐ์ ํ๊ธฐ: ์ ์ธ์ ์ผ๋ก ์ธ์ฆ/์ธ๊ฐ ๊ด๋ฆฌํ๊ธฐ, Async Storage ๋์ฒดํ๊ธฐ
์ด์ค ๋ฆฌ์กํธ ๋ด๋ถ ์ฝ๋ ๋ถ์์ Native Stack ์ ์ฉ์ ์ํด React Navigation๊ณผ React Native Screens ํจํค์ง๋ฅผ ๋ถ์ํ๋๋ฐ ์๊ฐ์ ์๋ค๋ณด๋ ํ์ง๋ชปํ๋ค. 3๋ถ๊ธฐ ์ผ๊ฐ์ผ๋ก ์๊ฐํ๋ ์ ์ธ์ ์ผ๋ก ์ธ์ฆ/์ธ๊ฐ ๊ด๋ฆฌํ๊ธฐ๋ ์ด๋ณด๋ค Native Stack์ ์ ์ฉํ๋ฉด์ ์ฌ๋ฌ ํผ๋๋ค์ ๊ฒช์ผ๋ฉด์ ํ๋ฉด์ ํ๊ฐ ๋ก๋ฉ์ ๊ฐ์ ํ๋๊ฒ ์กฐ๊ธ ๋ ์ ์ ๊ฒฝํ์ ๋์์ด ๋ ๊ฒ ๊ฐ์ ๋ฏธ๋ฃจ๊ฒ ๋์๋ค. ๋์ Async Storage๋ฅผ mmkv๋ก ๋์ฒดํ๋ ์ผ๊ฐ์ ์ฑํฐ์ ๋ฌด๋ก ๋ฐํ๋์ด 3๋ถ๊ธฐ์ ๋ด๋น์๋ก ์งํํ๊ฒ ๋์๋ค.
์ด์ 5์์ action item๋ค์ ์งํํ๋ 6์์ ์์ ๋ค์ ์ ๋ฆฌํด๋ณด์.
6์์ ์์ ๋ค
๐ Native Stack ์ ์ฉํ๊ธฐ
React Navigation์ Stack Navigator์์ Native Stack Navigator๋ฅผ ์ ์ฉํด ํ๋ฉด์ ํ๊ฐ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ์์ ์ผ๋ก 6์ 26์ผ ๋ฐฐํฌ๋๋ฉด์ ๋ง๋ฌด๋ฆฌํ๊ฒ ๋์๋ค. ์๋ ๋ฐฐํฌ๋ 6์ 12์ผ๋ก ์์ ๋์ด ์์์ง๋ง, QA๊ณผ์ ์์ ์ ๋๋ฉ์ด์ ์ด ๋๊ธฐ๋ ์ด์์ gesture handler๋ก ์ฌ์ง์ ๋์ด๋น๊ฒจ ๋ซ์ ์ดํ์, ์์ฒญ์ ํ๋ฉด์์ 10๊ฐ์ ์ง๋ฌธ๋ง ๋ ๋๋ง๋๋ ์ด์๊ฐ ์์ด ๋กค๋ฐฑํ๊ฒ ๋์๋๋ฐ ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ๊ณ ๋ค์ ๋ฐฐํฌํ๊ฒ ๋์๋ค. ํด๋น ์ด์๋ค์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
์ ๋๋ฉ์ด์ ๋๊น ์ด์
์ ๋๋ฉ์ด์ ์ด ๋๊ฒผ๋ ์ด์๋ overlay๊ฐ ์๋ ํ์๊ฐ์ ์๋ด ๋ชจ๋ฌ ํ๋ฉด์์ ๋ฐ์ํ๊ฒ ๋์๋ค. ํด๋น ํ๋ฉด์ transparent modal๋ก ๋์ด์์๋๋ฐ Card๋ก ๋ ๋ค์ ํ๋ฉด์ผ๋ก ์ ํํ ๋ ์ ๋๋ฉ์ด์ ์ด ๋๊ธฐ๋ ๋ฏํ ํ์์ด ๋ํ๋ฌ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ transparent modal ๋์ ๋ฐํ ์ํธ๋ฅผ ์ฌ์ฉํด ํ๋ฉด์ ๊ตฌํํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๊ณ , ํด๋น ์ด์๋ฅผ ํตํด Native Stack์์ transparent modal์ ๊ฒฝ์ฐ ๋ค์ ํ๋ฉด์ด ์ด๋ค ๊ฒ์ธ์ง์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ด ๋๊ฒจ๋ณด์ผ ์ ์์ด, bottomTab์ด ์๋ ํ ํ๋ฉด์ด ์๋๋ฉด ๋ฐํ ์ํธ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
gesture handler๋ก ์ฌ์ง ๋์ด๋น๊ฒจ ๋ซ๊ธฐ ์ด์
์ด๋ฏธ์ง๋ฅผ ๋ณด๊ณ ๋์ด๋น๊ฒจ ์ข ๋ฃํ ํ์, ์ ํ ๋ด ๋ฉ์ธ ํผ๋ ์ค ํ๋์ธ ์์ฒญ์ ์์ฑํ๋ฉด์์ ์ง๋ฌธ์ด 10๊ฐ๋ง ๋ ๋๋ง๋๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ํด๋น ์ด์๋ ๋กค๋ฐฑ์ ํ๊ฒ ๋๋ ๊ฐ์ฅ ํฐ ์ด์ ๊ฐ ๋ ์ด์๋ก, React Native์ Interaction Manager์ ๊ด๋ จ๋ ์ด์์๋ค.
์ด๋ฏธ์ง๋ฅผ ๋์ด๋น๊ฒจ ์ข ๋ฅํ ์ ์๊ฒ ํ๊ธฐ ์ํด PanResponder๋ก ๊ตฌํํ๋๋ฐ, PanResponder๋ก ๋์ด๋น๊น ์ด๋ฒคํธ๊ฐ ์ข ๋ฃ๋๋ ์์ ์ navigation.pop์ ์งํํ๋ฉด์ StackNavigator์์๋ ๋ฐ์ํ์ง ์์๋ ์ด์๊ฐ Native Stack์์ ๋ฐ์ํ๋ค. ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์์ FlatList๋ก ๊ตฌํ๋ ์์ฒญ์ ์์ฑํ๋ฉด์ ์์๊ฐ Flatlist์ initialNumToRender prop์ default ๊ฐ์ฒ๋ผ ๋ฑ 10๊ฐ๋ง ํญ์ ๋ ๋๋ง๋๋ ๊ฒ์ ๊ทผ๊ฑฐ๋ก ์ผ์ ๋ด๋ถ ์ฝ๋๋ฅผ ํ์ธํด๋ณด๊ฒ ๋์๋ค.
Flatlist๋ VirtualizedList๋ฅผ ์์๋ฐ์ ๊ตฌํ๋์ด ์๊ณ , VirtualizedList๋ ๋ค์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ Batchinator๋ฅผ ์ด์ฉํด ๋ค์ ๋ชฉ๋ก์ ๋ฐ์์ค๊ฒ๋๋ค. ์ด๋ Batchinator๋ InteractionManager๋ฅผ ์ด์ฉํด InteractionManager.runAfterInteractions๋ฅผ ์ด์ฉํด ๋ค์ ๋ชฉ๋ก์ ๋ฐ์์ค๊ฒ ๋๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
class Batchinator {
_callback: () => void;
_delay: number;
_taskHandle: ?{cancel: () => void, ...};
constructor(callback: () => void, delayMS: number) {
this._delay = delayMS;
this._callback = callback;
}
/*
* Cleanup any pending tasks.
*
* By default, if there is a pending task the callback is run immediately. Set the option abort to
* true to not call the callback if it was pending.
*/
dispose(options: {abort: boolean, ...} = {abort: false}) {
if (this._taskHandle) {
this._taskHandle.cancel();
if (!options.abort) {
this._callback();
}
this._taskHandle = null;
}
}
schedule() {
if (this._taskHandle) {
return;
}
const timeoutHandle = setTimeout(() => {
this._taskHandle = InteractionManager.runAfterInteractions(() => {
// Note that we clear the handle before invoking the callback so that if the callback calls
// schedule again, it will actually schedule another task.
this._taskHandle = null;
this._callback();
});
}, this._delay);
this._taskHandle = {cancel: () => clearTimeout(timeoutHandle)};
}
}
module.exports = Batchinator;
์ด๋ฏธ์ง๋ฅผ ๋์ด๋น๊ฒจ ์ข ๋ฃํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ PanResponder ๋ํ ๋ด๋ถ ์ ์ผ๋ก InteractionManager๋ฅผ ์ด์ฉํ๋๋ฐ ์ด๋ gesture ๋ฐฉํด๋ฅผ ๋ง๊ธฐ์ํด JS ์ด๋ฒคํธ๋ฅผ blockingํ๊ฒ ๊ตฌํ๋์ด ์๋ค.
์ด๋ฅผ ๊ทผ๊ฑฐ๋ก ์์ธํ ๋์๊ณผ ์ถฉ๋ ๊ณผ์ ์ ํ์ ํ์ง ๋ชปํ์ง๋ง ์ด๋ฏธ์ง๋ฅผ ๋์ด๋น๊ฒจ ์ข ๋ฃํ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ ํ Interaction Manager๊ฐ blocking๋์ด FlatList์ InteractionManager๊ฐ ๋์ํ์ง ๋ชปํ๊ฒ ๋ง์์ ๋ฐ์ํ๋ ์ด์๋ก ์ถ์ธกํ ์ ์์๋ค. ๊ทธ๋์ Pan responder์ interaction ๋์ค์ navigation.pop์ด ์งํ๋๊ฒ ํ๋๊ฒ ์๋๋ผ Interaction์ด ๋ชจ๋ ๋๋ ํ์ ์งํ๋๊ฒ ํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
const panResponder = useRef(
PanResponder.create({
...,
onPanResponderGrant: () => {
// PanGesture๊ฐ ์๋ฃ๋๊ณ ๋ ์ดํ์ ํ๋ฉด ์ด๋์ ๋์์์ผ InteractionManager๊ฐ ์ถฉ๋์ ๋ง์ต๋๋ค.
InteractionManager.runAfterInteractions(() => {
navigation.goBack();
});
},
}),
).current;
์ด๋ ๊ฒ ๋๊ฐ์ง ์ถ๊ฐ ์ด์๋ฅผ ๋ชจ๋ ๋ง์น ์ดํ์ 6์ 26์ผ ๋ฐฐํฌ๋ฅผ ์งํํ๊ฒ ๋์๋ค.
์ฑ๋ฅ ๋ถ์ํ๊ธฐ
์ผ๊ฐ์ ๋ชฉํ๊ฐ ํ๋ฉด์ ํ๊ฐ ์ฑ๋ฅ๊ฐ์ ์ด์๋ค๋ณด๋, ์ด๋ป๊ฒ ์ธก์ ๊ธฐ์ค์ ์ก์์ผํ ์ง ๋ง๋งํจ์ด ์์๋ค. ์๋ํ๋ฉด ๋๋ถ๋ถ์ ์ํฉ์์๋ JS ์ค๋ ๋์์ ์ ๋๋ฉ์ด์ ์ ์งํํ๋ UI ์ค๋ ๋์์ ์ ๋๋ฉ์ด์ ์ ์งํํ๋ ํฐ ์ฐจ์ด๊ฐ ๋ณด์ด์ง ์์ ๊ฒ์ผ๋ก ์์๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์์น์ ์ผ๋ก ๋ํ๋ผ ์ ์์๊น ๊ณ ๋ฏผ๋์ ํ๋ฉด์ ํ๊ณผ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ๊ฒ์ ์๋์ง๋ง CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋น๊ตํด๋ณด๊ธฐ๋ก ํ๋ค.
์ธก์ ๋ฐฉ๋ฒ์ FlashLight์ maestro๋ฅผ ์ด์ฉํ e2e ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ค.FlashLight๋ ํ์ฌ ์๋๋ก์ด๋๋ง ์ง์ํ๊ณ ์์ด ์๋๋ก์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก, ์ ํ ๋ด ๊ณ ๊ฐ, ๊ณ ์ ๋ถ๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํผ๋๋ค์ ์ฌ์ฉํ๋ค. ์ด 30ํ ๋ฐ๋ณต ์ธก์ ์ ์งํํ๊ณ , ์๋๋ ์ธก์ ํ ๋ฐ์ ๊ฒฌ์ ๋ชฉ๋ก ๋๋ฉ์ธ์ ํ๋ฉด ์ ํ๊ฐ ์ฑ๋ฅ์ ์ธก์ ํ ๊ฒฐ๊ณผ์ด๋ค.
์ฌ์ง์ ์ธก์ ํ ํผ๋ ์ค ํ๋์ ํผ๋ ๋ฐ์ดํฐ์ด์ง๋ง, ์ด 4๊ฐ์ง ํผ๋์ ์ธก์ ํ์ ๋ CPU ์ฌ์ฉ๋๊ณผ RAM ์ฌ์ฉ๋์ ์ ๋ฐ์ ์ผ๋ก ๊ฐ์๋์๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ๋ค๋ณด๋ ์งง์ ํผ๋์ผ ๋๋ณด๋ค ํผ๋์ด ๊ธธ์ด์ง ์๋ก ์ฐจ์ด๊ฐ ๋ ์ฌํด์ง๋ ๊ฒ์ ์๊ฒ๋์ด, ํ์ด์ง๊ฐ ๋ง์์ ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์ก์ ๋ ์ ๋๋ฉ์ด์ ์ด ์ ์์ ์ ๋์ํ๋์ง ๋ณด๊ธฐ ์ํด Stress ํ ์คํธ๋ ์ถ๊ฐ๋ก ์งํํ๋ค.
์ธก์ ๋ฐฉ๋ฒ์ stack์ ์ต๋ 100๊ฐ๊น์ง ํ๋ฉด์ด ์์ฌ์๋ ๊ฒฝ์ฐ์ 101๋ฒ์งธ ํ๋ฉด์ผ๋ก ์ง์ ํ ๋ ์ ๋๋ฉ์ด์ ์ ์์์ผ๋ก ์ฐ์ด๋ณด์๋ค. ์์ ์๋จ์ ์ซ์๋ Navigator์ ์์ฌ์๋ ํ์ด์ง ์ซ์๋ฅผ ์๋ฏธํ๋ค.
[ํ์ด์ง๊ฐ stack์ 10๊ฐ/100๊ฐ๊ฐ ์์์ ๋ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ]
Stack Navigator | Native Stack Navigator |
---|---|
stack Navigator์ ๊ฒฝ์ฐ 100๊ฐ๊ฐ ๋์์ ๋ ํด๋ฆญ ์ด๋ฒคํธ์ฒ๋ฆฌ๋ถํฐ ํ๋ฉด์ ํ๊น์ง 10๊ฐ ๋์ ๋น๊ตํด ๋์ ๋๊ฒ ๋๋ ค์ง ๊ฒ์ ๋ณผ ์ ์์๊ณ , ๊ทธ์ ๋ฐํด Native Stack Navigator์ ๊ฒฝ์ฐ ํฐ ์ฐจ์ด ์์ด ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์ถ๊ฐ๋ก ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ๊ธฐ๊ธฐ์ ๋ฐ์ด๊ฐ์ ๋๋ ์ ์์๋๋ฐ ์ด๋ stack Navigator์ ๊ฒฝ์ฐ ํ๋ฉด์ด ๋ง์์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๋ฉด์ CPU ์ฌ์ฉ๋์ด ๋์ด๋๊ฒ ๋์ด ๋ฐ์ด์ด ๋๊ปด์ง๋ ๊ฒ์ผ๋ก ์ถ์ธก๋๋ค. ๋ ์์ธํ ๋ฐ์ดํฐ๋ Native Stack์ ์ฃผ์ ๋ก ๊ธ์ ์์ฑํ๋ฉฐ ํจ๊ป ๊ณต์ ํ ์์ ์ด๋ค.
Native Stack์ ์ ์ฉ์ ๋ง์น๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฑํฐ์ ๋ถ๋ค๊ป ๊ณต์ ๋๋ ธ์ ๋, ๋ฐ์๋ ์ง๋ฌธ์ด ๋ช๊ฐ์ง ์์๋ค.
- React Navigation์์ React-native-screens๊ฐ ์ฌ์ฉ๋๋ ๋ฐฉ์
- ์ค์ Native ์์๊ฐ ์ฌ์ฉ๋๋ ๊ฒ๊ณผ RN์ View๋ก ํ๋ฉด์ ๋ง๋ค์์ ๋ ์ฐจ์ด์
๋น์ ๋ต๋ณ์ ๋๋ฆฌ์ง ๋ชปํ๊ณ , ๊ฐ์ธ์ ์ผ๋ก๋ ๊ถ๊ธํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๋ต๋ณ๋ค์ ๊ณ์ํด์ ์ฐพ์ผ๋ฉฐ ๊ณต๋ถํด๋ณด๊ณ ์๊ณ , Native Module์ ๋ํ ๊ณต๋ถ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์งํํด์ ๊ฐ๋จํ ํจํค์ง๋ฅผ mimicํด์ ๋ง๋ค์ด ๊ธ๊ณผ ํจ๊ป ์ ๋ฆฌํด๋ณผ ์์ ์ด๋ค.
2๋ถ๊ธฐ ์ฑํฐ OKR์ด์๋ Native Stack ์ ์ฉ์ ์ ๋ง๋ฌด๋ฆฌํด์ ๊ธฐ์๊ณ , ์ ๋ง๋ฌด๋ฆฌํ ์ ์์๋ ์ด์ ๋ ์ฒซ ๋ฐฐํฌ ๋น์ ์ด์ ํ์ ์ ์ํด ๋ง์ ์ฑํฐ์๋ถ๋ค๊ป์ ํจ๊ป ๋์์ฃผ์ ์ ์ดํ์ ๋๋ฒ์งธ ๋ฐฐํฌ๋๋ ๋ฌธ์ ์์ด ์์ ์ ์ผ๋ก ๋ฐฐํฌ๋ ์ ์์๋ค. ๊ฐ์ธ์ ์ผ๋ก React Navigation์ ๋ํด ๋ง์ด ๊ณต๋ถํ ์ ์์๊ณ , Native ์ฝ๋๋ ๋ง์ด ๋ณด๊ณ ๋์์ ์ดํดํ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
์กฐ๊ธ ์์ฌ์ ๋ ๋ถ๋ถ์ ๊ฐ์ ๋ ๊ฒฐ๊ณผ๋ฅผ ์ซ์๋ก ํํํ๊ธฐ ์ด๋ ค์์ด ์์๋ค๋ ์ ์ด์๋ค. ์ ๋๋ฉ์ด์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ/CPU์ฌ์ฉ๋์ ๋ํ ๊ด๊ณ๋ฅผ ๋ ์ ๊ณต์ ํ๊ณ , ์ด๋ฅผ ์ธก์ ํ๋ ์์ ๋ค์ ์ ํํ๋ค๋ฉด ์ฑ๊ณผ๋ถ์์ ๋ ์ข์์ ๊ฒ์ด๋ผ๋ ์์ฌ์๋ ๋จ์๋ค.
์๋ฌ ๋ฐ์ด๋๋ฆฌ ์ ์ฉ์์ ๋ง๋ฌด๋ฆฌ
๋๋์ด ์๋ฌ๋ฐ์ด๋๋ฆฌ ์ ์ฉ์์ ๋ ์๋ฃํ๋ค. 5์์ ๊ณ ๋ฏผํ๋ ์๋ก์ด ํ๋ฉด๋ค์ด ์ถ๊ฐ๋์์ ๋ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์์์ง ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ์ํ ์์ ๋ค๋ ์ถ๊ฐ๋ก ์งํํ๋ค. ํ์ฌ ์ ์ฉ๋ ํ๋ฉด๊ณผ ์ ์ฉ๋์ง ์์ ํ๋ฉด๋ค์ ํ์ ํ ์ ์๋ script๋ฅผ ์ถ๊ฐํ๊ณ , ์๋ก์ด ํ๋ฉด์ ์์ฑํ ๋ ์๋์ผ๋ก ์๋ฌ๋ฐ์ด๋๋ฆฌ๊ฐ ์ ์ฉ๋๋๋ก ํ๋ ์์ ์ ์งํํ๋ค. ์์ธํ ์ํ์ฐฉ์ค๋ค์ ์๋ฌ๋ฐ์ด๋๋ฆฌ ๋์ ํ๊ธฐ์ ์์ฑํด๋ณด์๋ค.
ํ๋์ ํ๋ฉด์ ์ ์ฉํ๋ ์์ ์ ๊ฐ๋จํ์ง๋ง ์ ํ ์ ์ฒด์ ์ ์ฉํ๋ฉด์ ๋ค์ํ ์ผ์ด์ค๋ค์ ๊ณ ๋ฏผํ๊ณ ์ ์ฉํ๋ ๊ฒ์ ์๊ฐ๋ณด๋ค ์ด๋ ค์ด ์์ ์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฃ์ ํ์ต๋น์ฉ์ ์ค์ด๊ธฐ ์ํ ๊ณ ๋ฏผ๋ค์ ํ๋ฉด์, ์ง์์ ์ธ ๊ณต์ ๊ฐ ํ์ํ ์ด์ ๋ฅผ ๋๋ ์ ์์๋ค.
๊ทธ๋๋ 3๋ถ๊ธฐ์ ๊ฑฐ์ณ ํด์จ ์๋ฌ/์์ธ์ฒ๋ฆฌ ๊ณ ๋ํ ์์ ์ ๋ง๋ฌด๋ฆฌํ๋ฉด์ ๊ธด ํธํก์ ํ๋์ ์์ ์ ์๋ฃํ๋ค๋ ์ ์ ๋ฟ๋ฏํจ์ ๋๋ ์ ์์๋ค.
์ปดํฌ๋ํธ ์ค๊ณ
5์์ ์์ ํ๋ composition ์ปดํฌ๋ํธ ์ค๊ณ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ ์ฉํ ๊ณ ์ ํ๋กํ ์ปดํฌ๋ํธ๋ฅผ ๋๋ฃ๋ถ๋ค๊ป ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์๊ณ ์ด๋ค ์ ์ ๊ณ ๋ คํด์ ๋ฆฌํฉํ ๋งํ๋์ง ์ ๋ฌ๋๋ฆฌ๋ ค ํ์ง๋ง, Native Stack๊ณผ ์๋ฌ๋ฐ์ด๋๋ฆฌ ์ ์ฉ์์ ์ ๋ง์ ์๊ฐ์ ์ฐ๋ค๋ณด๋, ์์ฐ์ค๋ฝ๊ฒ ํ์์๋ก ๋ฐ๋ฆฌ๊ฒ ๋์๋ค.
๋คํํ ์ค์ฟผ๋ ์์ ์ ์งํํ๋ฉด์ ์์ ํ ์ปดํฌ๋ํธ๋ฅผ ๋ด๊ฐ ์ง์ ์ฌ์ฉํ๊ฒ ๋์๋ค. ์์ ๋น์์๋ ์ด๋ ๊ฒ ์ฌ์ฉ๋๋ฉด ์ข๊ฒ ๋ค ํ๋ฉฐ ์ค๊ณํ๋ ๋ถ๋ถ์ด ๊ธฐ์กด์ ์๋ ์๊ตฌ์ฌํญ์ ์ ์ฉํ๋ฉด์ ์ด๋ ค์์ ๋ง๋ค๊ธฐ๋ ํ๋ค. 1์ฐจ๋ก๋ ์๋ฃํ์ง๋ง ์์ง ๊ฐ์ ํด์ผํ ๋ถ๋ถ๋ค์ด ๋ง์ ์กฐ๊ธ ๋ ๊ณต๋ถํ๊ณ ์ ์ฉํด์ 8์ ๋ด๋ก ๊ผญ ์ ๋ฌํด๋ณด๋ ค ํ๋ค.
UI ํจํด๋ณ ์ต์ ํ ์ ๋ฆฌํ๊ธฐ
์ค์ฟผ๋ ์์
์ ์งํํ๋ฉด์ ์ ๊ท ํผ ํ๋ฉด์ ๊ตฌํํ๊ฒ ๋์๋ค. ์ฌ๋ฌ๊ฐ์ง ์คํ
์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ผ๊ณ ๋ง์ง๋ง์ ์ ๋ฌํ๋ ์ค๋ฌธ์กฐ์ฌ ํจํด
์ผ๋ก ์์ ํ ์ค ์ฌ๋์ ๋ฐํ๋ฅผ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ ๋ด์ฉ์ ์ ์ฉํด๋ ค ํ๋ค.
ํ์ง๋ง ๊ธฐ์กด ์ฑํฐ ๋ด ์ปจ๋ฒค์
์ ์ ์ญ ์ํ์ ํ๋ฉด๋ค๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด์ ์ต๋ํ ์คํฌ๋ฆฐ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฌธ์กฐ์ฌ ํจํด์ ์ ์ฉํ๊ธฐ๋ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ์ฐ์ ์ ๊ฐ ์คํ ๋ณ ํ๋ฉด์์ ๋ฐ์ดํฐ๋ฅผ param์ผ๋ก ์ ๋ฌํ๋ ๊ธฐ์กด ๋ฐฉ์๋๋ก ๊ตฌํ์ ํ๊ณ , 3๋ถ๊ธฐ์ ๊ธฐ์กด ํํธํ๋์ด์๋ ํ๋ฉด๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์์ ๋ค์ด ์์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ์ฉ ์๊ฒฌ๋ค์ ์ ์ํด๋ณด๊ณ ๋ค์ ์ ์ฉํด๋ณด๋ คํ๋ค.
์ถ๊ฐ์ ์ผ๋ก๋ input ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฉํ๋ฉด์ ํค๋ณด๋์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์คํฌ๋กค์ ๊ด๋ฆฌํ ์ง, ๊ฐ์ข ์๋ฌ ์ํฉ, ๋ก๋ฉ์ํฉ ๋ฑ ๋ค์ํ ์ ์ฆ์ผ์ด์ค๋ค์ ์ ๋ฆฌํ๋ฉด์ ์ ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ง์ ๊ณ ๋ฏผ๋ค์ ํด๋ณด๋ ค ํ๋ค.
Async Storage ๋์ฒดํ๊ธฐ
3๋ถ๊ธฐ ์ฑํฐ ์ ๋ฌด๋ฅผ ๊ธฐํํ๋ฉด์ 5์์ ๊ณ ๋ฏผํ๋ Async Storage๋ฅผ mmkv๋ก ์ ์ฉํ๋ ์์ ์ ๋ฐ์ ํ๋ค. mmkv๋ฅผ ์ ์ฉํ์ ๋ ๋๊ฐ์ง ์ฅ์ ์ ๊ธฐ๋ํ๊ณ ์์ ์ ๋ฐ์ ํ๋ค.
- Async Storage ๋ณด๋ค ๋น ๋ฅธ ์๋ (์ ์ ๊ฒฝํ ํฅ์)
- Async Storage ์ฌ์ฉ์ ํ์ํ๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ์ ์ฝ๋๋ก ๋ณ๊ฒฝํด ๋ฐ์ดํฐ ํ๋ฆ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค (๊ฐ๋ฐ์ ๊ฒฝํ ํฅ์)
์ ๋๊ฐ์ง ์ฅ์ ์ ๊ธฐ๋ํ๋ฉฐ 7์๋ถํฐ ์์ ์ ์งํํ ์์ ์ด๊ณ , ์ฑํฐ์๋ถ๋ค์ ํผ๋๋ฐฑ์ผ๋ก mmkv๋์ ๋ค๋ฅธ op-sqlite์ ๊ฐ์ ๋ค๋ฅธ ์คํ ๋ฆฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ๊ฐ์ด ๊ณ ๋ฏผํ๋ฉด ์ข๊ฒ ๋ค๊ณ ๋ง์ํด์ฃผ์ ์, ๋จผ์ ์กฐ์ฌ ํ์ ๊ธฐ๋ํ๋ ํจ๊ณผ๋ค์ ๋ชจ๋ ๋ง์กฑํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํด์ ์์ ์ ์งํํด๋ณด๋ ค ํ๋ค.
7์์ action item ์ ๋ฆฌ
6์๋ ์ญ์ ๋ชฉํํ๋ ๋งํผ ๋ค ์๋ฃํ์ง๋ ๋ชปํด ์์ฝ์ง๋ง, ์ฐ์ ์์์ ๋ฐ๋ผ, Native Stack ์ ์ฉ๊ณผ ์๋ฌ ๋ฐ์ด๋๋ฆฌ ์์ ๋ค์ ๋ง๋ฌด๋ฆฌํ๊ณ ์ด์ด์ ๋ค์ ์ผ๊ฐ์ผ๋ก ๊ธฐํํ๋ ์์ ๋ ๋ด๋นํ๊ฒ ๋์ด 2๋ถ๊ธฐ๋ฅผ ์ ๋ง๋ฌด๋ฆฌ ํ ์ ์์๋ค.
7์์ ๋ชฉํ๋ ์๋์ ๊ฐ๋ค.
- Native Stack ์ ์ฉ ๊ธ ์์ฑํ๊ธฐ
- ์ปดํฌ๋ํธ ์ค๊ณ ์ถ๊ฐ ์์ ์งํํ๊ธฐ
- ํ์ด์ง๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๋ฌธ์ ๊ณ ๋ฏผํ๊ณ ๋ ผ์ํ๊ธฐ
- Async Storage ๋์ฒดํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒํ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ
- ์ ํ ๋ด ๋ก๋ฉ ์ํ ๊ฐ์ ํ๊ธฐ
๋ง์ง๋ง ๋ก๋ฉ ์ํ ๊ฐ์ ์ ์๋ฌ ๋ฐ์ด๋๋ฆฌ ์ ์ฉ ์ดํ์, ๊ณ ๋ฏผํ ์์ ์ผ๋ก ๋๋ฌด ๋น ๋ฅด๊ฒ ๋ก๋ฉ์ด ์งํ๋ ๊ฒฝ์ฐ ์คํ๋ ค ๊น๋นก์์ฒ๋ผ ๋๋ผ๊ฒ ํด, ์ ์ ๊ฒฝํ์ ํด์น๊ณ ์๋ค๊ณ ๋๋ผ๊ฒ ๋์ด 3๋ถ๊ธฐ ์ผ๊ฐ์ผ๋ก ๋ฐ์ ํ๊ฒ ๋์๋ค. ํ์ฌ ์์ ๋ฐฉ์์ ์ผ์ ํ ๊ธฐ์ค ์๊ฐ์ ์ ํด์ ๋ก๋ฉ์ ์งํํ๋ ๋ฐฉ์์ ๊ณ ๋ฏผํ๊ณ ์์ง๋ง, ์ด๋ป๊ฒ ์งํ๋ ์ง๋ ์กฐ๊ธ ๋ ๊ณ ๋ฏผ์ ํด๋ณด๋ ค ํ๋ค.
์ฐ์ ์ด๋ ๊ฒ 5๊ฐ์ง๋ก action item์ ์ ํ๊ณ , 7์์ ๋ค์ ํ๋ฒ ํ๊ณ ๋ฅผ ํตํด ์ด๋ค ๋ถ๋ถ์ ๊ฐ์ ํ๋ฉด ์ข์์ง, ์ด๋ค ๋ถ๋ถ์ ๋ ๊ณต๋ถํ๋ฉด ์ข์์ง ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.