Skip to content

๐Ÿช™๊ฐ€์ƒ์ž์‚ฐ ๋ฆฌ์›Œ๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์•ฑ์œผ๋กœ, Ionic 5 ๊ธฐ๋ฐ˜ ์•ฑ์„ React Native๋กœ ๊ฐœ์„ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ

Notifications You must be signed in to change notification settings

wook95/alockRenewal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

6 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์—์ด๋ฝ ์›”๋ › ALock Wallet (Lite)

  • ์—์ด๋ฝ ์›”๋ ›์€ ๊ฐ€์ƒ์ž์‚ฐ ๋ฆฌ์›Œ๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์•ฑ์œผ๋กœ, Ionic 5 ๊ธฐ๋ฐ˜ ์•ฑ์„ React Native๋กœ ๊ฐœ์„ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์‹ค์ œ ์•ฑ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋Š” ์•„์ง ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ๋ณธ repository๋Š” ์ธํ„ด 3๋ช…์ด 4์ฃผ๊ฐ„ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๊ฒฐํ•ฉํ•œ lite ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ๊ฐ„ : 2021.11.15 ~ 2021.12.09
  • ์ธ์› : 3๋ช…
  • ์‹œํ˜„ ์˜์ƒ

๐Ÿ’ป ์‚ฌ์šฉ ๊ธฐ์ˆ  ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๋ถ„๋ฅ˜ ์‚ฌ์šฉ ์–ธ์–ด ํ˜น์€ ๊ธฐ์ˆ 
์–ธ์–ด TypeScript
ํ”„๋ก ํŠธ์—”๋“œ React Native, React Navigation, React Hooks, Styled Components
๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ Node.js
๋ฒ„์ „๊ด€๋ฆฌ ํˆด Git, GitHub
IDE Visual Studio Code
์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ Slack, Notion
๊ทธ ์™ธ ESLint, Prettier, Babel

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Team

  • ์ด์šฑ์ฐฝ : Splash(์Šคํ”Œ๋ž˜์‹œ) & Inquiry(1:1 ๋ฌธ์˜ ๋“ฑ๋ก) ์Šคํฌ๋ฆฐ ๊ตฌํ˜„
  • ๊น€์ง€ํ˜„ : Menu(๋ฉ”๋‰ด) & QrRead(QR ์ฝ”๋“œ ์Šค์บ”) ์Šคํฌ๋ฆฐ ๊ตฌํ˜„
  • ์ด์„ฑ์žฌ : Onboarding(์˜จ๋ณด๋”ฉ), AppVersionInfo(์•ฑ ๋ฒ„์ „ ์ •๋ณด) & InquiryConfirmation(1:1 ๋ฌธ์˜ ๋“ฑ๋ก ์™„๋ฃŒ) ์Šคํฌ๋ฆฐ ๋ฐ OnboardingItem ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

๐Ÿ“‘ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ

1. Splash Screen (์Šคํ”Œ๋ž˜์‹œ)

  • react-native-splash-screen ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ios, android ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ๋ฐฐ๊ฒฝ์„ ๋งŒ๋“ค์–ด ๊ตฌํ˜„
  • animated๋ฅผ ์ด์šฉํ•ด 3๋‹จ๊ณ„๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌ์„ฑ

2. Inquiry Screen (1:1 ๋ฌธ์˜ ๋“ฑ๋ก)

  • UX๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ref๋ฅผ ์ด์šฉํ•ด ์ž๋™ focusing ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • react-native-modal ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅํ•œ ๋‚ด์šฉ์ด ๋งž๋Š”์ง€ ํ•œ๋ฒˆ ๋” ํ™•์ธ

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

1. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋“ค์–ด๊ฐ„ ์Šคํ”Œ๋ž˜์‹œ ์Šคํฌ๋ฆฐ

  • react native๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋“ค์–ด๊ฐ„ ์Šคํ”Œ๋ž˜์‰ฌ๋Š” ๊ตฌํ˜„์ด ์–ด๋ ค์›Œ, ์Šคํ”Œ๋ž˜์‰ฌ์ธ ์ฒ™ ํ•˜๋Š” ์Šคํฌ๋ฆฐ์„ ๋งŒ๋“œ๋Š”๊ฒƒ์œผ๋กœ ๊ฒฐ์ •
  • ios, android ๋‘˜ ๋‹ค ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ตœ์ดˆ์˜ ์ด๋ฏธ์ง€ ๋งŒ๋“ค์–ด์คŒ.
  • animated์˜ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์“ฐ๊ณ (parallel๋“ฑ ), ์ฝœ๋ฐฑ์„ ํ™œ์šฉํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ˆœ์„œ ์ •ํ•จ

2. 1:1 ๋ฌธ์˜ ์Šคํฌ๋ฆฐ

  • ์‹ค์ œ ๊ธฐ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ–ˆ์„๋•Œ placeholder๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ๋ฒ„๊ทธ:
    placeholderTextColor="#adb5bd" ์„ค์ •

  • ๋ฆฌ์•กํŠธ ํ”„๋กญ์Šค ๊ฐ„ ์ˆœ์„œ ๋ฌธ์ œ:
    TextInputProps ์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋„˜๊ธด style ๋•Œ๋ฌธ์—, ๊ทธ ์ „์— ์„ ์–ธํ•ด๋…ผ ํ”„๋กญ์Šค includeFontPadding ์ด ์ ์šฉ๋˜ ์ง€ ์•Š์•„์„œ, ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค. (์•ˆ๋“œ๋กœ์ด๋“œ์˜ text๋Š” ๊ธฐ๋ณธ ํŒจ๋”ฉ์ด ์ ์šฉ๋˜์–ด ํ•ด๋‹น ํ”„๋กญ์Šค ํ•„์š”)

  • scrollTo ์†์„ฑ์ด ์—†์–ด์„œ ์—๋Ÿฌ๋‚˜๋Š” ref:
    ref๋ฅผ innerRef์—๋„ ๋‹ด์•„๋ณด๊ณ , forwardRef๋ฅผ ์จ์„œ ๋„˜๊ฒผ๋Š”๋ฐ ์ž๊พธ ๋‚˜์˜ค๋Š” Ref.current.scrollTo is not a function โ†’ scrollView์˜ ref ๋ถ™์ด๊ณ  ref๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋งŒ ๋„˜๊ฒจ์„œ ํ•ด๊ฒฐ โ†’ ref.current๊ฐ€ ์Šคํฌ๋กค๋ทฐ, ๋ทฐ, ํ…์ŠคํŠธ์ธํ’‹์—์„œ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚จ

  • ํ‚ค๋ณด๋“œ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์˜ ์ƒ‰์ด ๋ณด์ด๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ:
    Android-Splash-Screen-๊ตฌํ˜„์„ ๋ณด์•˜์„๋•Œ MainActivity์—์„œ Theme์„ ๋ณต๊ตฌ๋ฅผ ์•ˆํ•ด์ฃผ์–ด์„œ ๋‚˜ํƒ€๋‚ฌ๋˜ ๋ฌธ์ œ.

    @Override
      public void onCreate(Bundle savedInstanceState){
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
      }
  • onEndEditing vs onSubmitEditing ํ—ท๊ฐˆ๋ฆฌ๋˜ ํ•จ์ˆ˜:
    ๊ณต์‹๋ฌธ์„œ์—์„ , ์ˆ˜์ •์ด ๋๋‚ฌ์„๋•Œ์™€ ์ œ์ถœ์ด ๋˜์—ˆ์„๋•Œ๋ผ๊ณ  ๋˜์–ด์žˆ๋Š”๋ฐ, ๋˜‘๊ฐ™์•„๋ณด์—ฌ์„œ ์‹คํ—˜ํ•ด๋ด„
    (ํ‚ค๋ณด๋“œ๊ฐ€ ๋‹ซํžˆ์ง€ ์•Š์•˜์„๋•Œ) ํ‚ค๋ณด๋“œ์˜ done(์—”ํ„ฐ) ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด onSubmitEditing์ด ๋ฐœ์ƒ ์ธํ’‹์ฐฝ์ด ๋ธ”๋Ÿฌ๋˜์—ˆ์„๋•Œ. ์ฆ‰ ์ˆ˜์ •์ด ๋๋‚ฌ์„๋•Œ ์˜จ ์„œ๋ฐ‹์—๋””ํŒ… ๋ฐœ์ƒ

  • ์ธํ’‹๊ฐ„ ์ž๋™ focusing์„ ์œ„ํ•ด ๋งŽ์ด ์ผ๋˜ fowardRef ์ •๋ฆฌ

    forwardRef
    
    //1 ์ต์ŠคํฌํŠธ ํ•˜๋Š”๊ณณ์—์„œ ๋ฌถ์–ด์ฃผ๊ณ , props์—์„œ forwardedRef๋กœ ๋ฐ›์•„์˜ด!
     export default React.forwardRef((props: Props, ref: React.Ref<TextInput>) => {
       return <InputBox {...props} forwardedRef={ref} />
     })
    const {forwardedRef} = props
    <์ปดํฌ๋„ŒํŠธ ref={forwardedRef} />
    
    //2 ์ฒ˜์Œ๋ถ€ํ„ฐ forwardRef๋กœ ๋ฌถ์–ด์คŒ, ๋‘๋ฒˆ์งธ ๋ณ€์ˆ˜์— ์žˆ๋Š” ์ด๋ฆ„์œผ๋กœ ref ์‚ฌ์šฉ
    const InputBox = React.forwardRef((props: Props, ref: React.Ref<TextInput>) => {

๐Ÿ“‘ ํŒ€ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ์ƒ์„ธ

1. ๊ณตํ†ต ๊ตฌํ˜„ ์‚ฌํ•ญ

  • OnboardingItem
    • ์˜จ๋ณด๋”ฉ ๋ฐ ๊ฐ "์™„๋ฃŒ" ์Šคํฌ๋ฆฐ์— ์‚ฌ์šฉ๋˜๋Š” ์นด๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€๋ณ€์ ์œผ๋กœ ๊ตฌํ˜„

2. Onboarding Screen (์˜จ๋ณด๋”ฉ)

  • ์ž๋™, ์ˆ˜๋™ ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์˜จ๋ณด๋”ฉ ์Šคํฌ๋ฆฐ ๊ตฌํ˜„
  • ์ž๋™ ์Šคํฌ๋กค ์‹œ react-spring์„ ํ™œ์šฉํ•œ crossfading ์ด๋ฏธ์ง€ ๊ตฌํ˜„
  • ์ˆ˜๋™ ์Šคํฌ๋กค ์‹œ Animated API์˜ interpolation์„ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ๊ตฌํ˜„
  • AsyncStorage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ์ฒซ launch ์‹œ์—๋งŒ ๋ณด์ด๊ฒŒ ์„ค๊ณ„

3. Menu Screen (๋ฉ”๋‰ด)

  • react-navigation ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์Šคํฌ๋ฆฐ ์ด๋™ ๊ตฌํ˜„
  • react-native-share API๋ฅผ ํ™œ์šฉํ•œ ๊ณต์œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • <ScrollView>๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐ๋„ˆ ์บ๋Ÿฌ์…€ ๊ตฌํ˜„
  • <FlatList>๋ฅผ ํ™œ์šฉํ•œ dropdown ๋ฉ”๋‰ด ๊ตฌํ˜„
  • Submenu์™€ dropdown์„ ์ปดํฌ๋„ŒํŠธํ™”ํ•˜์—ฌ toggle ๊ธฐ๋Šฅ ๊ตฌํ˜„

4. QR Code Scan Screen (QR ์ฝ”๋“œ ์Šค์บ”)

  • react-native-qrcode-scanner ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ QR ์ฝ”๋“œ ์Šค์บ” ํ™”๋ฉด ๊ตฌํ˜„
  • react-navigation ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์Šคํฌ๋ฆฐ ์ด๋™ ๊ตฌํ˜„
  • <ImageBackground>๋ฅผ ํ™œ์šฉํ•˜์—ฌ View ๊ตฌํ˜„

5. Inquiry Confirmation Screen (1:1 ๋ฌธ์˜ ๋“ฑ๋ก ์™„๋ฃŒ)

  • OnboardingItem์„ ํ™œ์šฉํ•œ ๋“ฑ๋ก ์™„๋ฃŒ ์Šคํฌ๋ฆฐ ๊ตฌํ˜„

6. App Version Info Screen (์•ฑ ๋ฒ„์ „ ์ •๋ณด)

  • react-native-version-check ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ์ค‘์ธ ์•ฑ ๋ฒ„์ „๊ณผ ์ตœ์‹  ์•ฑ ๋ฒ„์ „์„ ๋น„๊ต
  • ๋‘ ๋ฒ„์ „์ด ๋‹ค๋ฅผ ์‹œ OS์— ๋”ฐ๋ผ Apple App Store ํ˜น์€ Google Play Store๋กœ ์ด๋™ํ•˜๋Š” '์—…๋ฐ์ดํŠธ' ๋ฒ„ํŠผ์„ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์œผ๋กœ ๊ตฌํ˜„
  • Device์— Store ์•ฑ์ด ์—†์„ ์‹œ ์›น ์Šคํ† ์–ด๋กœ ์ด๋™ํ•˜๊ฒŒ๋” ์˜ˆ์™ธ์ฒ˜๋ฆฌ

โ€ป References

  • ๋ณธ repository๋Š” (์ฃผ)์—์ด๋ฝ์— ์‚ฌ์ „ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์€ ํ›„์— ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์—…์ ์ธ ์ด๋“์„ ์ทจํ•˜๊ฑฐ๋‚˜ ๋ฌด๋‹จ์œผ๋กœ ๋ฐฐํฌํ•  ๊ฒฝ์šฐ์—๋Š” ๋ฒ•์ ์œผ๋กœ ๋ฌธ์ œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

๐Ÿช™๊ฐ€์ƒ์ž์‚ฐ ๋ฆฌ์›Œ๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์•ฑ์œผ๋กœ, Ionic 5 ๊ธฐ๋ฐ˜ ์•ฑ์„ React Native๋กœ ๊ฐœ์„ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published