Skip to content

๐Ÿฅ‡ U/THON 25 ์ตœ์šฐ์ˆ˜์ƒ - ๋ผ๋ถ€๋ถ€๋กœ ์„ฑ๊ฒฉ ์œ ํ˜•์„ ์•Œ์•„๋ณด๋Š” Popick ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Notifications You must be signed in to change notification settings

MAS-MIRIM/Popick_Frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

18 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Popick

๋ผ๋ถ€๋ถ€๋กœ ์•Œ์•„๋ณด๋Š” ๋‚˜์˜ ์„ฑ๊ฒฉ ์œ ํ˜• ๐Ÿ˜ˆ

https://github.com/MAS-MIRIM/Popick_Frontend

  • ๋‹ด๋‹น : ๊ธฐํš, FE ๊ฐœ๋ฐœ (React Native)
  • 25.07.26 ~ 25.07.27, U/THON 25

๐Ÿ“ข ์†Œ๊ฐœ

Popick์€ ์ธ๊ธฐ ์•„ํŠธํ† ์ด '๋ผ๋ถ€๋ถ€' ์บ๋ฆญํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ํผ์Šค๋„๋ฆฌํ‹ฐ ํ…Œ์ŠคํŠธ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋“ค์ด 10๊ฐœ์˜ ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋ฉด, ์ž์‹ ๊ณผ ๊ฐ€์žฅ ์ž˜ ๋งž๋Š” ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ๋ฅผ ๋งค์นญํ•ด์ฃผ๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” U/THON 25 ํ•ด์ปคํ†ค์—์„œ 2์ผ๊ฐ„ ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ, MZ์„ธ๋Œ€์˜ ํŠธ๋ Œ๋“œ์ธ ์•„ํŠธํ† ์ด ๋ฌธํ™”์™€ ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์žฌ๋ฏธ์žˆ๊ณ  ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. React Native๋ฅผ ํ™œ์šฉํ•˜์—ฌ iOS์™€ Android ํ”Œ๋žซํผ์„ ๋™์‹œ์— ์ง€์›ํ•˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์•ฑ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งž์ถคํ˜• ์œ ํŠœ๋ธŒ ์‡ผ์ธ ๋ฅผ ์ถ”์ฒœํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ๋“ค์„ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ง€์†์ ์ธ ์‚ฌ์šฉ์ž ์ธ๊ฒŒ์ด์ง€๋จผํŠธ๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฑ ์ฃผ์š”๊ธฐ๋Šฅ

1. ํšŒ์› ๊ด€๋ฆฌ

  • ์ด๋ฉ”์ผ ๊ธฐ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
  • JWT ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ
  • ์ž๋™ ๋กœ๊ทธ์ธ ๋ฐ ์„ธ์…˜ ์œ ์ง€

2. ์„ฑ๊ฒฉ ์œ ํ˜• ํ…Œ์ŠคํŠธ

  • 10๊ฐœ์˜ ์ด์ง„ ์„ ํƒํ˜• ์งˆ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ
  • ๊ฐ ๋‹ต๋ณ€์— ๋”ฐ๋ฅธ ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ ํฌ์ธํŠธ ๊ณ„์‚ฐ
  • ์‹ค์‹œ๊ฐ„ ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ

3. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ถ„์„

  • 8๊ฐ€์ง€ ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ ์ค‘ ์ตœ์  ๋งค์นญ
  • ์บ๋ฆญํ„ฐ๋ณ„ ์ƒ์„ธ ์„ฑ๊ฒฉ ์„ค๋ช… ์ œ๊ณต
  • ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ์ €์žฅ ๋ฐ SNS ๊ณต์œ  ๊ธฐ๋Šฅ

4. ํ™ˆ ํ”ผ๋“œ

  • ์ธ๊ธฐ ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ ํŠธ๋ Œ๋”ฉ ํ‘œ์‹œ
  • ์บ๋ฆญํ„ฐ๋ณ„ ์ข‹์•„์š” ๊ธฐ๋Šฅ
  • ๋ฐฐ๋„ˆ ์Šฌ๋ผ์ด๋“œ ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

5. ์œ ํŠœ๋ธŒ ์‡ผ์ธ  ์ถ”์ฒœ

  • ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ๋งž์ถคํ˜• ์‡ผ์ธ  ์ถ”์ฒœ
  • WebView๋ฅผ ํ†ตํ•œ ์ธ์•ฑ ๋™์˜์ƒ ์žฌ์ƒ
  • ๋ฌดํ•œ ์Šคํฌ๋กค ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜

6. ์บ๋ฆญํ„ฐ ๋„๊ฐ

  • ์ˆ˜์ง‘ํ•œ ๋ผ๋ถ€๋ถ€ ์บ๋ฆญํ„ฐ ๊ฐค๋Ÿฌ๋ฆฌ
  • ์บ๋ฆญํ„ฐ๋ณ„ ์ƒ์„ธ ์ •๋ณด ๋ชจ๋‹ฌ
  • ์ˆ˜์ง‘ ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ

7. ๋งˆ์ดํŽ˜์ด์ง€

  • ํ”„๋กœํ•„ ์ •๋ณด ๊ด€๋ฆฌ
  • ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ์žฌ์ง„ํ–‰
  • ์ข‹์•„์š”ํ•œ ์บ๋ฆญํ„ฐ ๋ชฉ๋ก
  • ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ

๐Ÿคฒ๐Ÿป ๊ธฐ์—ฌํ•œ ๋ถ€๋ถ„

  • ์•„์ด๋””์–ด ๊ตฌ์ฒดํ™” : ํŒ€์—์„œ ์ œ์•ˆํ•œ ์•„์ด๋””์–ด๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ๊ธฐ๋Šฅ์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜๋Š” ๊ณผ์ •์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ „์ฒด FE ๊ฐœ๋ฐœ : React Native๋ฅผ ํ™œ์šฉํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ชจ๋ฐ”์ผ ์•ฑ ์ „์ฒด ๊ฐœ๋ฐœ
    • ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
    • React Navigation ๊ธฐ๋ฐ˜ ํ™”๋ฉด ์ „ํ™˜ ๋กœ์ง
    • AsyncStorage๋ฅผ ํ™œ์šฉํ•œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ ๊ด€๋ฆฌ
    • API ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๊ตฌํ˜„ ๋ฐ ํƒ€์ž… ์ •์˜
    • styled-components๋ฅผ ํ™œ์šฉํ•œ ์Šคํƒ€์ผ๋ง
    • ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋ฐ ๊ฒฐ๊ณผ ๊ณ„์‚ฐ ๋กœ์ง
    • WebView ๊ธฐ๋ฐ˜ ์œ ํŠœ๋ธŒ ์‡ผ์ธ  ํ†ตํ•ฉ

๐Ÿ’ฅ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1. iOS ๋นŒ๋“œ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ CocoaPods ์˜์กด์„ฑ ์ถฉ๋Œ

๋ฌธ์ œ ์ƒํ™ฉ

  • iOS ๋นŒ๋“œ ์‹œ pod install ๊ณผ์ •์—์„œ ์ง€์†์ ์ธ ์‹คํŒจ
  • Ruby ๋ฒ„์ „ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ CocoaPods ์‹คํ–‰ ์˜ค๋ฅ˜
  • React Native 0.70.10๊ณผ ํ˜ธํ™˜๋˜๋Š” Pod ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ์ถฉ๋Œ

ํ•ด๊ฒฐ ๊ณผ์ •

  1. rbenv๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ณ„ Ruby ๋ฒ„์ „ ๊ด€๋ฆฌ (3.2.2๋กœ ๊ณ ์ •)
  2. pod repo update ๋ฐ pod install --repo-update ๋ช…๋ น์œผ๋กœ ์ €์žฅ์†Œ ๋™๊ธฐํ™”
  3. Podfile.lock ์‚ญ์ œ ํ›„ ํด๋ฆฐ ๋นŒ๋“œ๋กœ ์˜์กด์„ฑ ์žฌ๊ตฌ์„ฑ
  4. fix-android-manifests.js ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์œผ๋กœ Android ๋นŒ๋“œ ์ด์Šˆ ๋™์‹œ ํ•ด๊ฒฐ

๊ฒฐ๊ณผ

  • ์•ˆ์ •์ ์ธ iOS/Android ๋™์‹œ ๋นŒ๋“œ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • ํŒ€์›๋“ค๋„ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฌธ์„œํ™”

2. TypeScript ํ™˜๊ฒฝ์—์„œ API ์‘๋‹ต ํƒ€์ž… ๋ถˆ์ผ์น˜

๋ฌธ์ œ ์ƒํ™ฉ

  • ๋ฐฑ์—”๋“œ ํŒ€๊ณผ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœ ์ง„ํ–‰์œผ๋กœ ์ธํ•œ API ์ŠคํŽ™ ๋ถˆ์ผ์น˜
  • ๋Ÿฐํƒ€์ž„์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ undefined ์—๋Ÿฌ ๋ฐœ์ƒ
  • ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ณ„์‚ฐ ์‹œ ํƒ€์ž… ์—๋Ÿฌ๋กœ ์•ฑ ํฌ๋ž˜์‹œ

ํ•ด๊ฒฐ ๊ณผ์ •

  1. utils/api.ts์— ํƒ€์ž… ๊ฐ€๋“œ ํ•จ์ˆ˜ ๊ตฌํ˜„
  2. Zod ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ ๋„์ž… ๊ฒ€ํ†  ํ›„ ์‹œ๊ฐ„ ์ œ์•ฝ์œผ๋กœ ์ˆ˜๋™ ํƒ€์ž… ์ฒดํฌ ๊ตฌํ˜„
  3. Mock ๋ฐ์ดํ„ฐ์™€ ์‹ค์ œ API ์‘๋‹ต ๊ฐ„ ์ „ํ™˜ ๊ฐ€๋Šฅํ•œ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด ๊ตฌ์ถ•
  4. ์˜ต์…”๋„ ์ฒด์ด๋‹๊ณผ nullish coalescing์œผ๋กœ ๋ฐฉ์–ด์  ์ฝ”๋”ฉ

๊ฒฐ๊ณผ

  • API ์‘๋‹ต ๋ถˆ์ผ์น˜์—๋„ ์•ฑ์ด ํฌ๋ž˜์‹œํ•˜์ง€ ์•Š๊ณ  ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ
  • ๊ฐœ๋ฐœ ์ค‘ Mock ๋ฐ์ดํ„ฐ๋กœ ๋…๋ฆฝ์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

3. ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ ์ค‘๋ณต ์ œ์ถœ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ ์ด์Šˆ

๋ฌธ์ œ ์ƒํ™ฉ

  • ๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ์—์„œ "๋‹ค์Œ" ๋ฒ„ํŠผ ์—ฐ์† ํด๋ฆญ ์‹œ ๊ฒฐ๊ณผ๊ฐ€ ์ค‘๋ณต ์ œ์ถœ
  • ๋น„๋™๊ธฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ race condition ๋ฐœ์ƒ
  • 10๊ฐœ ์งˆ๋ฌธ ์™„๋ฃŒ ํ›„ 11๊ฐœ, 12๊ฐœ์˜ ๋‹ต๋ณ€์ด ์„œ๋ฒ„๋กœ ์ „์†ก๋˜๋Š” ๋ฒ„๊ทธ

ํ•ด๊ฒฐ ๊ณผ์ •

  1. useRef๋ฅผ ํ™œ์šฉํ•œ ์ฆ‰๊ฐ์ ์ธ ์ฒ˜๋ฆฌ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ ๊ตฌํ˜„
  2. ๋ฒ„ํŠผ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ์— ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€ ๋กœ์ง ์ถ”๊ฐ€
  3. ๋‹ต๋ณ€ ๋ฐฐ์—ด ๊ธธ์ด ๊ฒ€์ฆ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐฉ์–ด ๋กœ์ง ๊ตฌํ˜„
  4. ๋””๋ฐ”์šด์‹ฑ๊ณผ ์“ฐ๋กœํ‹€๋ง ๊ธฐ๋ฒ• ์ ์šฉ ๊ฒ€ํ† 

์ฝ”๋“œ ์˜ˆ์‹œ

const processingRef = useRef(false);

const handleNext = async () => {
  if (processingRef.current || answers.length >= 10) return;
  
  processingRef.current = true;
  // ... ์ฒ˜๋ฆฌ ๋กœ์ง
  processingRef.current = false;
};

๊ฒฐ๊ณผ

  • ์ค‘๋ณต ์ œ์ถœ ๋ฒ„๊ทธ ์™„์ „ ํ•ด๊ฒฐ
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„  ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ

4. ์งง์€ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ๋‚ด MVP ๊ตฌํ˜„

๋ฌธ์ œ ์ƒํ™ฉ

  • 2์ผ๊ฐ„์˜ ํ•ด์ปคํ†ค์—์„œ ๊ธฐํš๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์™„๋ฃŒ ํ•„์š”
  • 8๋ช…์˜ ํŒ€์› ๊ฐ„ ํšจ์œจ์ ์ธ ํ˜‘์—… ์ฒด๊ณ„ ๊ตฌ์ถ• ํ•„์š”
  • ์™„์„ฑ๋„ ์žˆ๋Š” ์ œํ’ˆ๊ณผ ์‹œ๊ฐ„ ์ œ์•ฝ ๊ฐ„์˜ ๊ท ํ˜•

ํ•ด๊ฒฐ ๊ณผ์ •

  1. ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์šฐ์„ ์ˆœ์œ„ ์ •์˜ (์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ > ๊ฒฐ๊ณผ ํ‘œ์‹œ > ๋„๊ฐ > ์‡ผ์ธ )
  2. ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”๋กœ ๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ
  3. styled-components ํ…Œ๋งˆ ํ™œ์šฉ์œผ๋กœ ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  4. Git Flow ๊ฐ„์†Œํ™” ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ง„ํ–‰

๊ฒฐ๊ณผ

  • ๊ณ„ํšํ•œ ๋ชจ๋“  ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„๋ฃŒ
  • ์•ˆ์ •์ ์ธ MVP ๋ฒ„์ „ ํ•ด์ปคํ†ค ์‹œ์—ฐ ์„ฑ๊ณต

About

๐Ÿฅ‡ U/THON 25 ์ตœ์šฐ์ˆ˜์ƒ - ๋ผ๋ถ€๋ถ€๋กœ ์„ฑ๊ฒฉ ์œ ํ˜•์„ ์•Œ์•„๋ณด๋Š” Popick ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published