๐Ÿคญ 2024๋…„ 6์›”ํšŒ๊ณ 

@Troy ยท June 30, 2024 ยท 21 min read

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๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

[ Batchinator ์ฝ”๋“œ]

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ํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

pan responder ์ฃผ์„
pan responder ์ฃผ์„

์ด๋ฅผ ๊ทผ๊ฑฐ๋กœ ์ž์„ธํ•œ ๋™์ž‘๊ณผ ์ถฉ๋Œ ๊ณผ์ •์€ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์ด๋ฏธ์ง€๋ฅผ ๋Œ์–ด๋‹น๊ฒจ ์ข…๋ฃŒํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ํ›„ 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๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ ๋‘๊ฐ€์ง€ ์žฅ์ ์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์ž‘์—…์„ ๋ฐœ์ œํ–ˆ๋‹ค.

  1. Async Storage ๋ณด๋‹ค ๋น ๋ฅธ ์†๋„ (์œ ์ € ๊ฒฝํ—˜ ํ–ฅ์ƒ)
  2. Async Storage ์‚ฌ์šฉ์‹œ ํ•„์š”ํ–ˆ๋˜ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์  ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค (๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ)

์œ„ ๋‘๊ฐ€์ง€ ์žฅ์ ์„ ๊ธฐ๋Œ€ํ•˜๋ฉฐ 7์›”๋ถ€ํ„ฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๊ณ , ์ฑ•ํ„ฐ์›๋ถ„๋“ค์˜ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ mmkv๋Œ€์‹  ๋‹ค๋ฅธ op-sqlite์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ๊ฐ™์ด ๊ณ ๋ฏผํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…”์„œ, ๋จผ์ € ์กฐ์‚ฌ ํ›„์— ๊ธฐ๋Œ€ํ•˜๋Š” ํšจ๊ณผ๋“ค์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•ด์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด๋ ค ํ•œ๋‹ค.

7์›”์˜ action item ์ •๋ฆฌ

6์›”๋„ ์—ญ์‹œ ๋ชฉํ‘œํ–ˆ๋˜ ๋งŒํผ ๋‹ค ์™„๋ฃŒํ•˜์ง€๋Š” ๋ชปํ•ด ์•„์‰ฝ์ง€๋งŒ, ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ, Native Stack ์ ์šฉ๊ณผ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ ์ž‘์—…๋“ค์„ ๋งˆ๋ฌด๋ฆฌํ–ˆ๊ณ  ์ด์–ด์„œ ๋‹ค์Œ ์ผ๊ฐ์œผ๋กœ ๊ธฐํšํ–ˆ๋˜ ์ž‘์—…๋„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์–ด 2๋ถ„๊ธฐ๋ฅผ ์ž˜ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

7์›”์˜ ๋ชฉํ‘œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Native Stack ์ ์šฉ ๊ธ€ ์ž‘์„ฑํ•˜๊ธฐ
  • ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ์ถ”๊ฐ€ ์ž‘์—… ์ง„ํ–‰ํ•˜๊ธฐ
  • ํŽ˜์ด์ง€๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฌธ์ œ ๊ณ ๋ฏผํ•˜๊ณ  ๋…ผ์˜ํ•˜๊ธฐ
  • Async Storage ๋Œ€์ฒดํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒ€ํ†  ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ
  • ์ œํ’ˆ ๋‚ด ๋กœ๋”ฉ ์ƒํƒœ ๊ฐœ์„ ํ•˜๊ธฐ

๋งˆ์ง€๋ง‰ ๋กœ๋”ฉ ์ƒํƒœ ๊ฐœ์„ ์€ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ ์ ์šฉ ์ดํ›„์—, ๊ณ ๋ฏผํ•œ ์ž‘์—…์œผ๋กœ ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉ์ด ์ง„ํ–‰๋  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ๊นœ๋นก์ž„์ฒ˜๋Ÿผ ๋Š๋ผ๊ฒŒ ํ•ด, ์œ ์ €๊ฒฝํ—˜์„ ํ•ด์น˜๊ณ  ์žˆ๋‹ค๊ณ  ๋Š๋ผ๊ฒŒ ๋˜์–ด 3๋ถ„๊ธฐ ์ผ๊ฐ์œผ๋กœ ๋ฐœ์ œํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ˜„์žฌ ์ž‘์—… ๋ฐฉ์‹์€ ์ผ์ •ํ•œ ๊ธฐ์ค€ ์‹œ๊ฐ„์„ ์ •ํ•ด์„œ ๋กœ๋”ฉ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋ ์ง€๋Š” ์กฐ๊ธˆ ๋” ๊ณ ๋ฏผ์„ ํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์šฐ์„  ์ด๋ ‡๊ฒŒ 5๊ฐ€์ง€๋กœ action item์„ ์ •ํ–ˆ๊ณ , 7์›”์— ๋‹ค์‹œ ํ•œ๋ฒˆ ํšŒ๊ณ ๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜๋ฉด ์ข‹์„์ง€, ์–ด๋–ค ๋ถ€๋ถ„์„ ๋” ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์„์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

@Troy
๋งค์ผ์˜ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฐœ๋ฐœ์ผ์ง€์ž…๋‹ˆ๋‹ค.