Skip to content

daechidongVibe/Rice-coco-frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Rice Coco

  • Rice coco๋Š” ๋‚ด ์ฃผ๋ณ€ ์ต๋ช…์˜ ์‚ฌ๋žŒ๋“ค๊ณผ์˜ ์‹์‚ฌ ์•ฝ์† ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”, ์œ„์น˜๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์•ฑ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • Rice coco๋Š” Rice์™€ ๋™๋ฃŒ๋ฅผ ์˜๋ฏธํ•˜๋Š” co์˜ ํ•ฉ์„ฑ์–ด ์ž…๋‹ˆ๋‹ค.
  • ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์ด 3์ฃผ๊ฐ„(1์ฃผ-Idea Brainstorming & Planning, 2์ฃผ-Development) 3๋ช…์˜ ์ธ์›(์ด๋™๊ทœ, ์ด์œค์•„, ๊น€์ฐฌ์ค‘)์ด ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.(์ด๋™๊ทœ ํŒ€์›์€ ์ทจ์—…์œผ๋กœ ์ธํ•ด 2์ฃผ์ฐจ์— ์ค‘๋„ ํ•˜์ฐจ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.)
  • ์‹œ์—ฐ ์˜์ƒ(ํ”„๋กœ์ ํŠธ ๋ฐœํ‘œ ไธญ)

https://media.giphy.com/media/tB5mJXpAqzs4BVkU3C/giphy.gif https://media.giphy.com/media/fK63SyS8LVpsnOzsMx/giphy.gif

Table Contents

  • Features
  • Tech Stack
  • Requirements
  • Installation
  • Deploy
  • How to use
  • Project Process
  • Collaboration principle
  • Challenges
  • Things to do

๐Ÿ’ก Features

  • Expo Facebook & JWT ํ† ํฐ์„ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„
  • ์›ํ•˜๋Š” ์ƒ๋Œ€ ์กฐ๊ฑด ์„ค์ • ๋ฐ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Google Map Marker๋ฅผ ์ด์šฉํ•œ ๋‚ด ์œ„์น˜ ๋ฐ˜๊ฒฝ 3km ๋‚ด ๋Œ€๊ธฐ์ค‘์ธ ๋ฏธํŒ… ํ‘œ์‹œ ๊ฐ€๋Šฅ
  • Google Place API๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๊ฒฝ 3km ๋‚ด ์Œ์‹์  ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
  • Socket.io๋ฅผ ํ†ตํ•œ ์„ ํƒํ•œ ์Œ์‹์ ์—์„œ ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ์ƒ๋Œ€๋ฐฉ ์‹ค์‹œ๊ฐ„ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ
  • ๋Œ€๊ธฐ๋ฐฉ ์ƒ์„ฑ ํ›„ 1์‹œ๊ฐ„ ๋™์•ˆ ์ƒ๋Œ€๋ฐฉ๊ณผ์˜ ๋ฏธํŒ…์ด ์„ฑ์‚ฌ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋ฐฉ์ด ์‚ญ์ œ๋˜๋Š” ํƒ€์ž„์•„์›ƒ ๊ธฐ๋Šฅ
  • ๋งค์นญ ์„ฑ์‚ฌ ํ›„, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ์œ„์น˜ ํ™•์ธ ๋ฐ ์ฑ„ํŒ… ๊ธฐ๋Šฅ
  • ๋งค์นญ ์ข…๋ฃŒ ํ›„, ์นœ๊ตฌ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
  • IAMPORT๋ฅผ ์ด์šฉํ•œ ํฌ์ธํŠธ ๊ฒฐ์ œ๊ธฐ๋Šฅ
  • ๋‚ด์ •๋ณด ์ˆ˜์ • ๋ฐ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ

๐Ÿ›  Tech Stack

Frontend

  • ES2015+
  • React Native for component-based-architecture
  • Redux for state management
  • Styled Component
  • Socket.io for real-time communication
  • Jest for unit-test
  • Enzyme for component-test

Backend

  • Node.js
  • Express
  • MongoDB / MongoDB Atlas for data persistence
  • Moongoose
  • JSON Web Token Authentication
  • Socket.io
  • Chai / Sinon for unit-test

๐Ÿ“Œ Requirements

  • Android ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“€ Installation

Local ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์„ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Client

Root ๋””๋ ‰ํ† ๋ฆฌ์— environment.jsํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

// in environment.js in Root directory

import Constants from 'expo-constants';

const ENV = {
  dev: {
    REACT_NATIVE_ANDROID_SERVER_BASE_URL: <YOUR_SERVER_BASE_URL>
    REACT_NATIVE_GOOGLE_PLACES_API_KEY: <YOUR_GOOGLE_PLACES_API_KEY>
    REACT_NATIVE_FACEBOOK_APP_ID: <YOUR_FACEBOOK_API_ID>,
  },
  staging: {
    REACT_NATIVE_ANDROID_SERVER_BASE_URL: http://api.rice-coco.life,
    REACT_NATIVE_GOOGLE_PLACES_API_KEY: <YOUR_GOOGLE_PLACES_API_KEY>,
    REACT_NATIVE_FACEBOOK_APP_ID: <YOUR_FACEBOOK_API_ID>',
  },
};

const getEnvVars = (env = Constants.manifest.releaseChannel) => {
  if (__DEV__) {
    return ENV.dev;
  } else if (env === 'staging') {
    return ENV.staging;
  }
};

export default getEnvVars;
git clone https://github.com/daechidongVibe/Rice-coco-frontend.git
cd Rice-coco-frontend
npm install
npm start

Server

Root ๋””๋ ‰ํ† ๋ฆฌ์— .envํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

// in .env in your directory
PORT=<YOUR_PORT_NUMBER>
DB_URL=<YOUR_MONGODB_URL>
JWT_SECRET=<YOUR_JWT_SECRET>
IAMPORT_KEY=<YOUR_IAMPORT_KEY>
IAMPORT_SECRET=<YOUR_IAMPORT_SECRET>
git clone https://github.com/daechidongVibe/Rice-coco-backend.git
cd Rice-coco-backend
npm install
npm run dev

๐ŸŒ Deploy

Client

Server

  • AWS Elastic Beanstalk (EB)
  • AWS Code Pipeline for Deployment automation

๐Ÿ•น How to use

  • Facebook ์†Œ์…œ ๋กœ๊ทธ์ธ ํ›„, ์‚ฌ์šฉ์ž๋Š” 5๊ฐœ์˜ ํฌ์ธํŠธ๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋งŒ๋‚จ์„ ํฌ๋งํ•˜๊ณ ์žํ•˜๋Š” ์ƒ๋Œ€๋ฐฉ์˜ ์ง์—…๊ตฐ, ๋‚˜์ด, ์„ฑ๋ณ„์„ ์„ค์ •์„ ํ†ตํ•ด ํ•„ํ„ฐ๋ง์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(์‚ฌ์šฉ์ž๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ง ๋ฉ๋‹ˆ๋‹ค.)
  • ์„ค์ • ์™„๋ฃŒ ํ›„, ๋‚ด ์œ„์น˜ ๊ธฐ์ค€ ์ฃผ๋ณ€ 3km ์ด๋‚ด์— ํ•„ํ„ฐ๋ง๋œ ์œ ์ €๋“ค์ด ์‹ ์ฒญํ•ด๋†“์€ ์Œ์‹์ ๋“ค์˜ ์œ„์น˜๊ฐ€ ๋ฐฅ ๋ชจ์–‘์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€๋„ ์šฐ์ธก ํ•˜๋‹จ์— ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ํ•ด๋‹น ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹ ์ฒญ๋˜์–ด์žˆ๋Š” ์Œ์‹์ ๋“ค์ด ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ์Œ์‹์ (๋ฐฅ ๋ชจ์–‘)์„ ํด๋ฆญํ•˜๋ฉด ์Œ์‹์ ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…๊ณผ ๋Œ€๊ธฐ ์ค‘์ธ ์ƒ๋Œ€๋ฐฉ์˜ ๋‹‰๋„ค์ž„์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • [๋ผ์ด์Šค์ฝ”์ฝ” ๋งŒ๋‚˜๋Ÿฌ๊ฐ€๊ธฐ] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋งค์นญ์ด ์„ฑ์‚ฌ๋˜๊ณ  ์ด ๋•Œ ํฌ์ธํŠธ 1๊ฐœ๊ฐ€ ๊ฐ์†Œ๋ฉ๋‹ˆ๋‹ค.
  • ํƒญ ์ค‘์•™์— Search ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ๋‚ด ์ฃผ๋ณ€ 3km ์ด๋‚ด์— ์Œ์‹์ ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์Œ์‹์ ์—์„œ์˜ ๋งŒ๋‚จ์„ ์‹ ์ฒญ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ๋‚จ์„ ์‹ ์ฒญํ•  ๊ฒฝ์šฐ, ํฌ์ธํŠธ๊ฐ€ 1๊ฐœ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
  • (๋Œ€๊ธฐ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ) ๊ฒ€์ƒ‰ํ•œ ์Œ์‹์ ์— ๋Œ€๊ธฐ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ๋Œ€๊ธฐ์ž์™€์˜ ๋งค์นญ ์ˆ˜๋ฝ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋˜๊ณ  ์ˆ˜๋ฝ ์ฆ‰์‹œ ๋งค์นญ์ด ์„ฑ์‚ฌ๋ฉ๋‹ˆ๋‹ค.
  • (๋Œ€๊ธฐ์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ) ๋งŒ๋‚จ ์‹ ์ฒญ ํ›„ 1์‹œ๊ฐ„ ๋™์•ˆ ํƒ€์ž„์•„์›ƒ์ด ์‹คํ–‰๋˜๊ณ  ์ต๋ช…์˜ ์ƒ๋Œ€๋ฐฉ์œผ๋กœ๋ถ€ํ„ฐ ์ˆ˜๋ฝ์„ ๋ฐ›์œผ๋ฉด, ์ฆ‰์‹œ ๋งค์นญ์ด ์„ฑ์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜๋ฝ์„ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • ๋งค์นญ์ด ์„ฑ์‚ฌ๋˜๋ฉด, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์„œ๋กœ์˜ ์œ„์น˜๊ฐ€ ๋งต์— ํ‘œ์‹œ๋˜๊ณ  30๋ถ„์˜ ํƒ€์ž„์•„์›ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ์šฐ์ธก ํ•˜๋‹จ์— ๋Œ€ํ™” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ƒ๋Œ€๋ฐฉ๊ณผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ„ํŒ…๋ฐฉ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ์•ˆ์— ์Œ์‹์  50m ๋ฐ˜๊ฒฝ ์ด๋‚ด์— ๋„์ฐฉํ•˜๋ฉด [๋„์ฐฉ ๋ฒ„ํŠผ]์ด ์ƒ์„ฑ๋˜๊ณ , ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํฌ์ธํŠธ๊ฐ€ 1๊ฐœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์–‘์ž๊ฐ€ ๋„์ฐฉ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ์ƒํ™ฉ์—์„œ ํƒ€์ž„์•„์›ƒ์ด ์ข…๋ฃŒ๋˜๋ฉด, ์ƒ๋Œ€๋ฐฉ์„ ์นœ๊ตฌ๋กœ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ฐฝ์ด ๋‚˜์˜ค๊ณ ,์ถ”๊ฐ€ํ•˜๋ฉด ์ƒ๋Œ€๋ฐฉ์„ ์นœ๊ตฌ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚ด ์ •๋ณด ์ฐฝ์—์„œ ๋‚˜์˜ ๋‹‰๋„ค์ž„๊ณผ ์ง์—…์„ ๋‹ค์‹œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์„ ํ˜ธํ•˜๋Š” ์ƒ๋Œ€๋ฐฉ์˜ ์กฐ๊ฑด์„ ์žฌ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ์ง€๋„์—๋Š” ํ•ด๋‹น ์žฌ์„ค์ •ํ•œ ์กฐ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค.
  • ํฌ์ธํŠธ๊ฐ€ 0๊ฐœ๊ฐ€ ๋˜๋ฉด ๋” ์ด์ƒ ๋งŒ๋‚จ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋งŒ๋‚จ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํŽ˜์ด์ง€ ๊ฒฐ์ œ ์ •๋ณด์ฐฝ์„ ํ†ตํ•ด ํฌ์ธํŠธ๋ฅผ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(ํ˜„์žฌ๋Š” ๋„ค์ด๋ฒ„ํŽ˜์ด๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.)

๐Ÿ—“ Project Process

1์ฃผ์ฐจ

2์ฃผ์ฐจ

  • React native Navigation ๊ตฌ์กฐ ์„ค๊ณ„
  • Social Login & JWT ํ† ํฐ ๋กœ๊ทธ์ธ ๊ตฌํ˜„
  • ์œ ์ € ์ •๋ณด ๋“ฑ๋ก ๋ฐ ์„ ํ˜ธํ•˜๋Š” ํŒŒํŠธ๋„ˆ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง DB ์ฟผ๋ฆฌ ์ž‘์—…
  • Google API๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ํ™•์ธ ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฐ ์œ„์น˜ ์ •๋ณด ๊ณต์œ ๋ฅผ ์œ„ํ•œ Socket ์—ฐ๊ฒฐ
  • WebView ๋ฐ Iamport๋ฅผ ํ†ตํ•œ ํฌ์ธํŠธ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

3์ฃผ์ฐจ

  • Refactoring & Debugging
  • ํ”„๋ก ํŠธ App Build ๋ฐ ๋ฐฐํฌ
  • AWS Elastic Beanstalk๋ฅผ ํ™œ์šฉํ•œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋ฐฐํฌ
  • Front & Backend Test code ์ž‘์„ฑ

๐Ÿค Collaboration principle

Principle

  1. ๊นƒ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ†ต์ผํ•˜๊ธฐ (์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ Reference)
  2. ํ•˜๋‚˜์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์—๋Š” ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค๋ฐ‹ํ•˜๊ธฐ
  3. ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ์ „๊นŒ์ง€ ํƒ€์ธ์˜ ๋ณ€์ˆ˜๋ช… ์ž„์˜ ๋ณ€๊ฒฝ ๊ธˆ์ง€ํ•˜๊ธฐ
  4. ํŒ€๋‚ด์—์„œ ์ •ํ•œ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ์ง€ํ‚ค๊ธฐ(ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, single quote, return๋ฌธ ์ „ blank ๋“ฑ)
  5. ๊ฐ์ž ํ•˜๋ฃจ์— ๋งก์€ ํ…Œ์Šคํฌ ๋‹ค์Œ๋‚  ์˜ค์ „์— ํŒ€์›์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก Pull request ํ•ด๋†“๊ธฐ
  6. ํŒ€์› Pull Request์‹œ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐํ•ด์ฃผ๊ธฐ
  7. Pull Request์ „ ๋ถˆํ•„์š”ํ•œ ์ฝ˜์†” ๋ฐ ์ฃผ์„ ์ œ๊ฑฐํ•˜๊ธฐ

Evaluation after project by โญ•๏ธ, ๐Ÿ”บ, โŒ

  1. (โญ•๏ธ) ๊นƒ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋Š” ํ•˜๋‚˜์˜ ๊ตฌ์ฒด์ ์ธ refernce(์œ„ ๋งํฌ)๋ฅผ ์ •ํ•˜๊ณ  ์‹œ์ž‘ํ•˜์—ฌ, ๋Œ€์ฒด์ ์œผ๋กœ ํ†ต์ผ๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋ฉ”์„ธ์ง€๊ฐ€ ๋Œ€๋ถ€๋ถ„ Add, Fix ๋“ฑ ํŠน์ • ๋‹จ์–ด์—๋งŒ ๋งŽ์ด ์น˜์ค‘๋˜์–ด ์‚ฌ์šฉ๋˜๋Š” ํ˜„์ƒ์ด ์žˆ์–ด ๋” ๋‹ค์ฑ„๋กœ์šด ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์•„์‰ฌ์›€์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ฐจํ›„์—๋Š” ํ•ด๋‹น ์ปค๋ฐ‹ ์ƒํ™ฉ์— ๋” ์•Œ๋งž๊ณ  ๊ตฌ์ฒด์ ์ธ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.
  2. (๐Ÿ”บ) ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ๊ธฐ์œ„ํ•ด ํ•ด๋‹น ์›์น™์„ ์ •ํ•˜์˜€๊ณ , ์ดˆ๋ฐ˜์—๋Š” ์ž˜ ์ง€์ผœ์กŒ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ์ค‘๋ฐ˜~ํ›„๋ฐ˜ ์ง€๋‚˜๊ณ ์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ๋ฐ˜์˜๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ํ•˜๋‚˜์˜ ์ปค๋ฐ‹๋ฉ”์„ธ์ง€๋กœ ์••์ถ•๋˜๋‹ค ๋ณด๋‹ˆ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๋”๋ผ๋„ ํŒ€์›์—๊ฒŒ ๊ธฐ๋Šฅ๋ณ„ ํ˜น์€ ๋‹จ์œ„๋ณ„ ๊ตฌ์ฒด์ ์ธ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ ํ˜‘์—…์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฒ ์› ์Šต๋‹ˆ๋‹ค.
  3. (โญ•๏ธ) ๋ณ€์ˆ˜๋ฅผ ์ž‘๋ช…ํ•  ๋•Œ๋งˆ๋‹ค ํŒ€์›์—๊ฒŒ ์ผ์ผ์ด ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด ๋น„ํšจ์šธ์ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์—ฌ, ์ค‘๊ฐ„ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํŒ€์›์˜ ๋ณ€์ˆ˜๋ช…์„ ์ž„์˜๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ๋‹ค๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์›์น™ ์ž์ฒด๋Š” ์ž˜ ์ง€์ผœ์กŒ์œผ๋‚˜, ์ฐจํ›„ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ํฐ ํฌ์…˜์„ ์ฐจ์ง€ํ•˜๋Š” ๋ณ€์ˆ˜๋ช…์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ, ๋ฒ„๊ทธ ๋ฌธ์ œ๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•˜๊ณค ํ•˜์—ฌ ์›์น™ ์ž์ฒด์— ์•ฝ๊ฐ„์˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์•ฑ์— ์ค‘์š”ํ•œ ํฌ์…˜์„ ์ฐจ์น˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จ๋˜๋Š” ๋ณ€์ˆ˜๋ช…์€ ๋น„๋ก ์ฐจํ›„์— ๋ณ€๊ฒฝ๋ ์ง€๋ผ๋„ ์ฆ‰๊ฐ์ ์ธ ํŒ€์›๊ณผ ์ƒ์˜๋ฅผ ํ†ตํ•ด ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๊ณ  ํšŒ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  4. (โญ•๏ธ) ์ฝ”๋“œ์˜ ํ†ต์ผ์„ฑ์„ ์œ„ํ•ด ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒํ–ˆ๋˜ ๋Œ€๋กœ ์ดˆ๋ฐ˜์—๋Š” ๊ฐ์ž์˜ ์ฝ”๋“œ ์Šคํƒ€์ผ๋Œ€๋กœ ์ž‘์„ฑ์„ ํ•˜์˜€์ง€๋งŒ, ์ง€์†์ ์œผ๋กœ ํŒ€์—์„œ ์ •ํ•œ ์ปจ๋ฒค์…˜์„ ํ”ผ๋“œ๋ฐฑํ•ด์ฃผ์–ด ์ฝ”๋“œ ์ปจ๋ฒค์…˜์€ ํ”„๋กœ์ ํŠธ ๋๊นŒ์ง€ ๋Œ€์ฒด๋กœ ์ž˜ ์ง€์ผœ์กŒ๋‹ค๊ณ  ํ‰๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  5. (โŒ) ํ•ด๋‹น ์›์น™์€ ํ•˜๋ฃจ์— ๊ฐ์ž ๋งก์€ Task๊ฐ€ ์ตœ๋Œ€ํ•œ ๋ฐ€๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด, ๊ทธ๋ฆฌ๊ณ  6๋ฒˆ ์›์น™๊ณผ ์—ฐ๊ฒฐ๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜์—๋Š” ์ž˜ ์ง€์ผœ์กŒ์œผ๋‚˜, ๊ฐ์ž์˜ ์—ญ๋Ÿ‰๊ณผ ๋งก์€ Task์˜ ๋‚œ์ด๋„์—์„œ ์˜ค๋Š” ์ฐจ์ด๋กœ ์ธํ•ด ํ”„๋กœ์ ํŠธ ์ดˆ์ค‘๋ฐ˜๋ถ€ํ„ฐ ์ง€์ผœ์ง€์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์›์น™ ์ž์ฒด์˜ ์ทจ์ง€๋Š” ํ”„๋กœ์ ํŠธ ์ข…๋ฃŒ ์ดํ›„์ธ ์ง€๊ธˆ๊นŒ์ง€๋„ ํŒ€์› ๋ชจ๋‘๊ฐ€ ๊ณต๊ฐํ•˜์ง€๋งŒ, Task ๋ถ„๋ฐฐ์— ์›์ธ์ด ์žˆ์—ˆ๋‹ค๊ณ  ๋ถ„์„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฐจํ›„์— ๊ฐ™์€ ์›์น™์„ ์„ธ์šด๋‹ค๋ฉด Task ๋ถ„๋ฐฐ์—์„œ๋ถ€ํ„ฐ ์‹ ์ค‘ํžˆ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ„ํšํ•ด์•ผ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
  6. (โŒ) ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ์„œ๋กœ์˜ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ๊ตฌํ˜„ํ•œ ๋กœ์ง์„ ์ดํ•ดํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑํ•˜๋ฉด์„œ ๋„˜์–ด๊ฐ€์ž๋ผ๋Š” ์ทจ์ง€๋กœ ๋งŽ์€ ์›์น™์ด์—ˆ์ง€๋งŒ, 5๋ฒˆ ์›์น™๊ณผ์˜ ์—ฐ์žฅ์„ ์œผ๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์€ ํ”„๋กœ์ ํŠธ ์ดˆ์ค‘๋ฐ˜ ์ดํ›„๋กœ ์ง€์ผœ์ง€์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜ ์ž ๊น pull request์— ๋Œ€ํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐํ•ด์ฃผ๋Š” ๊ฒฝํ—˜ ์ž์ฒด๋Š” ๋ฐฐ์šฐ๋Š” ์ ์ด ๋งŽ์•˜๋‹ค๋Š” ๊ฒƒ์ด ํŒ€์›์˜ ํ‰๊ฐ€์ž…๋‹ˆ๋‹ค.
  7. (๐Ÿ”บ) ์ดˆ๋ฐ˜์—๋Š” ์ž˜ ์ง€์ผœ์ง€์ง€ ์•Š์•˜์ง€๋งŒ, ์ค‘๋ฐ˜ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ตœ๋Œ€ํ•œ console๊ณผ ์ฃผ์„์„ ์ง€์šฐ๊ณ ์ž ํŒ€์›๋“ค ๋ชจ๋‘๊ฐ€ ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ข…์ข… ์ฝ˜์†”๊ณผ ์ฃผ์„์ด merge๋˜๋Š” ์‹ค์ˆ˜๊ฐ€ ์žˆ๊ธดํ•˜์˜€์ง€๋งŒ ์ ์  ํ•ด๋‹น ์›์น™์— ๋Œ€ํ•ด์„œ๋Š” ํŒ€์› ๋ชจ๋‘๊ฐ€ ๊ฐœ์„ ๋˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ ์„ธ๋ชจ๋กœ ํ‰๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ˜ผ์ž์„œ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ์—๋Š” ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„์ด์ง€๋งŒ, ๋‚˜์˜ ์ง€์šฐ์ง€ ์•Š์€ ์ฝ˜์†”์ด ๊ฐ€๋” ํŒ€์›์˜ ๋””๋ฒ„๊น…์„ ๋ฐฉํ•ดํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์•ฑ ์ „์ฒด์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ์ง€์šฐ๊ณ  merge๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

๐ŸฅŠ Challenges

react native์˜ navigation

MatchWaitingScreen์—์„œ ์ƒ๋Œ€๋ฐฉ์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ ๊ฐ€๋™๋˜๋Š” Timer๊ฐ€, ๋งŒ๋‚จ ์„ฑ์‚ฌ ์ดํ›„ MatchSucceessScreen์œผ๋กœ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์–ด ๊ฐ€๋™๋˜๋Š” Timer์˜ ์ข…๋ฃŒ์‹œ๊ฐ„(00:00)๊ณผ ๋™์‹œ์— ์ข…๋ฃŒ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์„ ์ง€์†์ ์œผ๋กœ ํ•œ ๊ฒฐ๊ณผ, react native๋Š” web์™€ ๋‹ฌ๋ฆฌ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ, Screen์ด Stack์œผ๋กœ ์Œ“์ด๋Š” ๊ตฌ์กฐ์ธ ๊ฒƒ์„ ๊ฐ„๊ณผํ–ˆ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ ํ™”๋ฉด์—์„œ ๋ฏธํŒ… ์„ฑ์‚ฌ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ์Šคํƒ์„ ์Œ“๊ณ  navigate ํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ทธ ์ „์— ์žˆ์—ˆ๋˜ ๋ชจ๋“  ํ™”๋ฉด Stack์„ ๋ฆฌ์…‹ํ•˜๊ณ  ํ™”๋ฉด ์ „ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ navigate ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค์‹œ ๋’ค๋กœ๊ฐ€๊ธฐ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์•ˆ๋˜๋Š” ์ƒํ™ฉ(๋Œ€๊ธฐํ™”๋ฉด์—์„œ ์ทจ์†Œ๋ฒ„ํŠผ์ด ์•„๋‹Œ ํœด๋Œ€ํฐ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™ˆ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ์ƒํ™ฉ)์—๋„ ์ด๋ฅผ ์ ์šฉํ•˜์—ฌ Navigation ์˜ค๋ฅ˜ edge case๋“ค์„ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ์™€ ์†Œ์ผ“

MatchWaitingScreen์—์„œ MatchSucceessScreen์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์—์„œ ๋Œ€๊ธฐ ์œ ์ €์˜ ํ™”๋ฉด์ด ๋‘๋ฒˆ Mount๋˜๋Š” ํ˜„์ƒ์œผ๋กœ ์ธํ•ด, ์–ด๋– ํ•œ ์†Œ์ผ“ ์ด๋ฒคํŠธ๋„ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„ค๋ น ๋‘๋ฒˆ Mount๊ฐ€ ๋˜๋”๋ผ๋„, ๊ฒฐ๊ตญ mount ํ›„ ์†Œ์ผ“ ์ด๋ฒคํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋  ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๊ทธ๋Ÿฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” navigation ๋ฉ”์†Œ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์กฐ์‚ฌํ•˜์˜€์ง€๋งŒ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‹œ๊ฐ„์„ ๋””๋ฒ„๊น…ํ•œ ๊ฒฐ๊ณผ, ๋ฌธ์ œ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฏธํŒ… ๋Œ€๊ธฐํ™”๋ฉด(MatchWaitingScreen)๊ณผ ๋ฏธํŒ… ์„ฑ์‚ฌํ™”๋ฉด(MatchSucceessScreen)์ด ๊ฐ™์€ ์†Œ์ผ“ ์ด๋ฒคํŠธ๋ฅผ(Join meeting)์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ์ 
  2. ๋”๋ถˆ์–ด ๋ฏธํŒ… ๋Œ€๊ธฐํ™”๋ฉด(MatchWaitingScreen)์ด unmount ๋ ์‹œ ์†Œ์ผ“ ์ด๋ฒคํŠธ(Join meeting)์˜ remove ์‹œ์ ๊ณผ, ๋ฏธํŒ… ์„ฑ์‚ฌํ™”๋ฉด(MatchSucceessScreen)์œผ๋กœ ์ „ํ™˜๋œ ํ›„ ๋‹ค์‹œ ๊ฐ™์€ ์†Œ์ผ“์ด๋ฒคํŠธ์˜(Join meeting) ์—ฐ๊ฒฐ์‹œ์ ์ด ์˜ˆ์ƒ๊ณผ ๋‹ฌ๋ฆฌ ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰ MatchWaitingScreen๊ฐ€ unmount ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์†Œ์ผ“์˜ removeAllListener ๋ฉ”์†Œ๋“œ ์‹œ์ ์ด MatchSucceessScreen์ด ๋งˆ์šดํŠธ ๋œ ์ดํ›„ ์‹คํ–‰๋˜์–ด ์•„๋ฌด๋Ÿฐ ์†Œ์ผ“ ์ด๋ฒคํŠธ๋„ ์—ฐ๊ฒฐ๋˜์ง€์•Š์•˜๋˜ ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด MatchWaitingScreen์—์„œ ์†Œ์ผ“ ์ด๋ฒคํŠธ๋ฅผ Join meeting์—์„œ Create meeting์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ƒ๋Œ€๋ฐฉ์˜ Join meeting ์†Œ์ผ“ ์ด๋ฒคํŠธ๊ฐ€ ๋”์ด์ƒ MatchWaitingScreen์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ์ด๋ฅผ ํ†ตํ•ด ๋‘๋ฒˆ ๋žœ๋”๋ง ๋˜๋Š” ํ˜„์ƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ •์ƒ์ ์œผ๋กœ ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๊ฐ„๋‹จํ•œ ์†Œ์ผ“ ์ด๋ฒคํŠธ ๋ช‡๊ฐ€์ง€๋งŒ ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์ด๋ฒคํŠธ(๋ฐฉ ์ƒ์„ฑ, user ์—ฐ๊ฒฐ, ์žฌ์—ฐ๊ฒฐ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ๊ณต์œ , ๋‚ด๊ฐ€ ๋ฏธํŒ…์„ ๋„์ค‘์— ์ทจ์†Œํ–ˆ์„ ๊ฒฝ์šฐ, ์ƒ๋Œ€๋ฐฉ์— ์˜ํ•ด ๋ฏธํŒ…์ด ์ทจ์†Œ๋˜์—ˆ์„ ๊ฒฝ์šฐ, ํ•ด๋‹น ์Œ์‹์  ์žฅ์†Œ์— ๋„์ฐฉํ–ˆ์„ ๊ฒฝ์šฐ ๋“ฑ)๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ๋ฐ˜๋“œ์‹œ ์„ธ๋ถ„ํ™”๋˜์–ด์•ผ๋งŒ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ๋‚˜ ๋””๋ฒ„๊น…์ด ์šฉ์ดํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

App build ๊ณผ์ •

์•ฑ์„ ์™„์„ฑ์‹œํ‚ค๊ณ  bulidํ•˜์—ฌ apk๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์ž์ฒด๋Š” ์‰ฌ์› ์œผ๋‚˜, apkํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์ž splash ํ™”๋ฉด๋งŒ ๋‚˜์˜ค๊ณ  ๋ฐ”๋กœ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—์„œ stackoverflow๋‚˜ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์—์„œ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ ์šฉ๋ณด์•˜์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ†ตํ•ด buildํ•  ๋•Œ environment.jsํŒŒ์ผ์—์„œ ์„ค์ •ํ•ด๋†“์€ releaseChannel๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ (ex. expo build:android --release-channel staging, expo build:android --release-channel prod) ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜์—ฌ ์•ฑ Build์— ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ Things to do

  • ๋งŒ๋‚จ ์„ฑ์‚ฌ ๋„์ค‘ ํ•ด๋‹น ์Œ์‹์ ์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ ๊ธฐ๋Šฅ, ๋งŒ๋‚จ ์„ฑ์‚ฌ ์ดํ›„ ์นœ๊ตฌ์™€์˜ ์žฌ๋งŒ๋‚จ ๊ธฐ๋Šฅ ๋“ฑ ๋” ๋‹ค์ฑ„๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์–ดํ”Œ๋ ˆ์ผ€์ด์…˜ ์ข…๋ฃŒ&์‹คํ–‰์„ ํ†ตํ•ด ์†Œ์ผ“์— ์žฌ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ, ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” server instance ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋Œ€์‘ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค,
  • ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ๋งŽ์€ component๊ฐ€ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ฏธ์ณ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ • ํ™”๋ฉด์œผ๋กœ์˜ ์ง„์ž… ํ›„ ํ˜„์žฌ ์œ ์ €์˜ ์ƒํƒœ์— ๋”ฐ๋ผ navigate๋˜๋Š” ๋ถ„๊ธฐ์ฒ˜๋ฆฌ ๋กœ์ง์œผ๋กœ ์ธํ•ด ๋ถ„๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋น„๋™๊ธฐ api ๋กœ์ง๋“ค์„ ์ปดํฌ๋„ŒํŠธ ํ˜น์€ screen์—์„œ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
  • ์ „๋ฐ˜์ ์ธ UI&UX ๊ฐœ์„ ์„ ํ†ตํ•ด ๋” ์™„์„ฑ๋„ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. (login ๋ฐ signup๊นŒ์ง€ ํƒญ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ œ๊ฑฐ, ํ•œ๋ฒˆ ๋งŒ๋‚จ์ด ์„ฑ์‚ฌ๋˜์—ˆ๋˜ ์œ ์ €๋Š” ๋‹ค๋ฅธ UI๋กœ ์ง€๋„์— ํ‘œ์‹œ๋˜๋Š” ๊ธฐ๋Šฅ, ์Œ์‹์ ์„ ๊ฒ€์ƒ‰ํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น ์Œ์‹์ ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ธฐ๋Šฅ ๋“ฑ)