๋ฐ˜์‘ํ˜•

nextjs,tailwindcss,vercel 73

vercel 404 not found ์—๋Ÿฌ ์ดˆ๊ฐ„๋‹จ ํ•ด๊ฒฐ๋ฒ•

์ƒˆ๋กœ์šด ์›น์‚ฌ์ดํŠธ ๊ฐœ์„ค ํ›„ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”๋ฐ ๋“ค์–ด๊ฐ€๋ณด๋ฉด not found ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค  ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ setting์œผ๋กœ ๊ฐ€์„œ framework preset ๋ฅผ other ์—์„œ Next.js๋กœ ๋ฐ”๊พธ๊ณ , ๋‹ค์‹œ redeployํ•ด์ฃผ๋ฉด ๋œ๋‹ค.๋‹ค์‹œ ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ž˜ ๋œจ๋Š” ๋ชจ์Šต์ด๋‹ค

[react native] ์• ๋“œ๋ชน ํ…Œ์ŠคํŠธ ๊ด‘๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฒ•, ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ฐœ๋ฐœ , expo router

1. ๊ตฌ๊ธ€ ์• ๋“œ๋ชน์— ์•ฑ ์ถ”๊ฐ€, ๊ด‘๊ณ  ๋‹จ์œ„ ์„ค์ •react-native-google-mobile-ads ์„ค์น˜ 2. app.json์— plugins ์— ์•ฑ id ์ถ”๊ฐ€(์‹ค์ œ ์•ฑ id ๊ฐ’ ๋„ฃ๊ธฐ) "plugins": [      [        "react-native-google-mobile-ads",        {          "androidAppId": "ca-app-pub- xxx~xxx",          "iosAppId": "ca-app-pub- xxx~xxx"        }      ],  3. ์ „์ฒด ํ™”๋ฉด ํ•˜๋‹จ์— ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ๋„ฃ๊ธฐ ์ฝ”๋“œ_layout.tsx์— ์ ์šฉimport { BannerAd, BannerAdSize, TestIds } from "react-native-google-mobile-..

expo router ๋กœ react native ์•ฑ ๊ฐœ๋ฐœ ๋ช…๋ น์–ด ์ด์ •๋ฆฌ

1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ npx create-expo-app@latest -e with-router margin-calculator margin-calculator๋Š” ์ƒ์„ฑํ•  ์ด๋ฆ„ 2. ํŒจํ‚ค์ง€๋“ค ์„ค์น˜npx expo install react-native-google-mobile-ads @react-native-async-storage/async-storage expo-localization๊ด‘๊ณ , ํ˜„์ง€ํ™”(๋‹ค๊ตญ์–ด ์•ฑ) 3. ์• ๋“œ๋ชน ๊ด‘๊ณ  ๋ถ™์ด๊ณ  ์‹คํ–‰ํ•˜๊ธฐ- ๋น„๊ณต๊ฐœํ…Œ์ŠคํŠธ ๊นŒ์ง€๋Š” ํ…Œ์ŠคํŠธ๊ด‘๊ณ  ๋ถ™์ผ๊ฒƒ(์• ๋“œ๋ชน์€ expo go ํ˜ธํ™˜ ์•ˆ๋จ)npx expo prebuild --platform androidnpx expo run:android ์‹คํ–‰์˜ค๋ฅ˜๋‚˜๋ฉดnpx expo prebuild --clean --platform android(k..

Params,Props ๋ž€?

Params์™€ Props๋Š” ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ "์–ด๋–ค ์ •๋ณด๋ฅผ ๋ฐ›์„ ๊ฑฐ์•ผ?"๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ผ๋ฒจ ๊ฐ™์€ ๊ฑฐ์˜ˆ์š”.Params(๋งค๊ฐœ๋ณ€์ˆ˜):์›น ์ฃผ์†Œ์—์„œ ๋„˜์–ด์˜ค๋Š” ์ •๋ณด๋ฅผ ๋‹ด์•„์š”์—ฌ๊ธฐ์„œ๋Š” tag๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฌธ์ž์—ด์„ ๋ฐ›์•„์š”์˜ˆ๋ฅผ ๋“ค์–ด /cute ํŽ˜์ด์ง€๋ฉด, tag๋Š” "cute"๊ฐ€ ๋˜๋Š” ๊ฑฐ์ฃ type Params = {  tag: string;  // ์ด ํŽ˜์ด์ง€์˜ ํƒœ๊ทธ};Props(์†์„ฑ):์ปดํฌ๋„ŒํŠธ(ํŽ˜์ด์ง€)์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  ์ •๋ณด๋ฅผ ์„ค๋ช…ํ•ด์š”์—ฌ๊ธฐ์„œ๋Š” Params๋ฅผ Promise(์•ฝ์†)๋กœ ๊ฐ์‹ธ์„œ ๋ณด๋‚ด์š”Promise๋Š” "๋‚˜์ค‘์— ๊ฐ’์„ ์ค„๊ฒŒ!"๋ผ๊ณ  ์•ฝ์†ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”type Props = {  params: Promise;  // Params๋ฅผ ๋‚˜์ค‘์— ์ค„๊ฒŒ!};์ •๋ฆฌํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” "๋‚˜์ค‘์— ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ค„๊ฒŒ!"๋ผ๊ณ  Next.js์— ์•Œ๋ ค์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”..

์•ˆ๋“œ๋กœ์ด๋“œ ๋น„๊ณต๊ฐœ ํ…Œ์ŠคํŠธ ํ…Œ์Šคํ„ฐ ๊ตฌ๊ธ€ ๊ทธ๋ฃน์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ•

ํ’ˆ์•—์ด ํ•˜๋‹ค๊ฐ€ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์„œ ๊ธฐ๋กhttps://cafe.naver.com/devsharing ์—๋„ ๊ธ€ ์”€ ์ฒ˜์Œ ์•ฑ ์ถœ์‹œํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋งŽ์€ ๋ถ„๋“ค์ด ํ…Œ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜์‹œ๊ณ  ๋“ฑ๋กํ•˜์‹œ๋”๋ผ๊ตฌ์š”๊ตฌ๊ธ€ ๊ทธ๋ฃน ์“ฐ์‹œ๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ œ์•ˆ๋“œ๋ฆฝ๋‹ˆ๋‹คโ€‹โ€‹[๊ฐœ๋ฐœ์ž ์„ค์ •]โ€‹1. google groups ์—์„œ ํ…Œ์Šคํ„ฐ ๊ทธ๋ฃน๋งŒ๋“ค๊ธฐhttps://groups.google.com/ ์—์„œ create groupํ•ด์„œ ๋งŒ๋“ค๋ฉด ๊ทธ๋ฃน๊ณผ ๊ทธ๋ฃน์˜ ๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹คโ€‹โ€‹2. ํ…Œ์Šคํ„ฐ๋ฅผ google groups๋กœ ์„ค์ •ํ•˜๊ธฐโ€‹play console์—์„œ ํ…Œ์Šคํ„ฐ๋ฅผ ์ด๋ฉ”์ผ ๋ชฉ๋ก์ด ์•„๋‹Œ google ๊ทธ๋ฃน์Šค๋กœ ์„ค์ • google groups์—์„œ ๊ทธ๋ฃน ๋งŒ๋“ค๋ฉด ์ฃผ์†Œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ ๊ทธ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹คโ€‹โ€‹3. ๊ทธ๋ฃน url๊ณผ ์•ฑ/์›น ๋งํฌ ๊ณต์œ ํ•˜๊ธฐโ€‹๊ทธ..

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ์•„์ด์ฝ˜ ์•ฑ ์ด๋ฆ„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

app.json์„ ์ž˜ ์„ธํŒ…ํ•ด๋„ ๋ง‰์ƒ ๋ฐฐํฌ ํ›„ ๋‹ค์šด๋ฐ›์œผ๋ฉด ์•ฑ ์•„์ด์ฝ˜, ์•ฑ ์ด๋ฏธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•  npx expo prebuild --clean  npx expo prebuild --platform androidnpx expo run:android cd android./gradlew clean./gradlew bundleRelease

react native app expo ์•ฑ ์ด๋ฆ„ ,์•ฑ ์•„์ด์ฝ˜ ์„ค์ •ํ•˜๊ธฐ (๋‹ค๊ตญ์–ด)

๋ฌธ์ œ๋Š” Android์˜ strings.xml ํŒŒ์ผ๊ณผ adaptive icon ์„ค์ •์ด ์ œ๋Œ€๋กœ ๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด๋ณด์„ธ์š”:1. ๋จผ์ € android/app/src/main/res/values/strings.xml ํŒŒ์ผ์„ ์ˆ˜์ •:    Dividend Calculator ํ•œ๊ตญ์–ด ๋ฒ„์ „์„ ์œ„ํ•ด android/app/src/main/res/values-ko/strings.xml ํŒŒ์ผ ์ƒ์„ฑ:strings.xml    ๋ฐฐ๋‹นํˆฌ์ž ๊ณ„์‚ฐ๊ธฐ app.json ํŒŒ์ผ์—์„œ ์•„์ด์ฝ˜ ์„ค์ • ํ™•์ธ:app.json}์•„์ด์ฝ˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธ:./assets/images/icon.png./assets/images/adaptive-icon.png์•„์ด์ฝ˜ ์š”๊ตฌ์‚ฌํ•ญ:icon.png: 1024x1..

๋ฒ„์ „ ์ฝ”๋“œ๋Š” ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

์˜ค๋ฅ˜ ๋‚ด์šฉ๋ฒ„์ „ ์ฝ”๋“œ๋Š” ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”. ๋ฌธ์ œ์ƒํ™ฉ์•ˆ๋“œ๋กœ์ด๋“œ react native ์•ฑ bundle ํŒŒ์ผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ• ๋•Œ , ๋ฒ„์ „ ์ฝ”๋“œ๋Š” ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.๋ผ๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•build.gradle, app.json ํŒŒ์ผ์˜ versionCode ๋ฅผ ์˜ฌ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.

Android App Bundle์ด ์ž˜๋ชป๋œ ํ‚ค๋กœ ์„œ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ ๋œ ์„œ๋ช… ํ‚ค๋กœ App Bundle์— ์„œ๋ช…ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”. ํ•ด๊ฒฐ

Android App Bundle์ด ์ž˜๋ชป๋œ ํ‚ค๋กœ ์„œ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ ๋œ ์„œ๋ช… ํ‚ค๋กœ App Bundle์— ์„œ๋ช…ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.ํ”Œ๋ ˆ์ด์Šคํ† ์–ด์— ์ƒˆ๋กœ์šด ์•ฑ ๋ฒ„์ „ ์—…๋กœ๋“œํ–ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค.  Android App Bundle์ด ์ž˜๋ชป๋œ ํ‚ค๋กœ ์„œ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ ๋œ ์„œ๋ช… ํ‚ค๋กœ App Bundle์— ์„œ๋ช…ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.SHA1: A9:C2:6C:F4:8B:74:B3:AA:86:27:28:76:4A:17:9E:41:F3:3F:38:2B์ง€๋ฌธ์ด ํฌํ•จ๋œ ์ธ์ฆ์„œ๋กœ App Bundle์— ์„œ๋ช…ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์—…๋กœ๋“œํ•œ App Bundle ์„œ๋ช…์— ์‚ฌ์šฉ๋œ ์ธ์ฆ์„œ์˜ ์ง€๋ฌธ์€SHA1: 5E:8F:16:06:2E:A3:CD:2C:4A:0D:54:78:76:BA:A6:F3:8C:AB:F6:25์ž…๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• -..

๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์„œ๋ช…ํ•œ APK ๋˜๋Š” Android App Bundle์„ ์—…๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถœ์‹œ ๋ชจ๋“œ๋กœ APK ๋˜๋Š” Android App Bundle์— ์„œ๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ์˜ค๋ฅ˜

์„œ๋ช… ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ๋กœ ๋นŒ๋“œ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐํ”„๋กœ์ ํŠธ ํด๋”์—์„œ android > app > build.gradle ํŒŒ์ผ์„ ์—ฐ๋‹ค.๋นŒ๋“œ ๊ทธ๋ ˆ์ด๋“ค ํŒŒ์ผ์—์„œ ๋นŒ๋“œ ํƒ€์ž… ๋ถ€๋ถ„์˜ signingConfigs๋ฅผ ๋””๋ฒ„๊ทธ์—์„œ ๋ฆด๋ฆฌ์ฆˆ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.release // signingConfigs.debug์—์„œ ๋ณ€๊ฒฝ } }

๋ฐ˜์‘ํ˜•