์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ—๏ธ build

๐Ÿ—๏ธ ํด๋ผ์šฐ๋“œ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ์ž๋™์œผ๋กœ App Store ๋ฐ Play Store์— ์ œ์ถœํ•˜์„ธ์š”.

build ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด Capgo์˜ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ iOS ๋ฐ Android์šฉ Capacitor ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Expo๊ฐ€ ๋นŒ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์€ ์ „์šฉ ์ธํ”„๋ผ์—์„œ ๋นŒ๋“œ๋˜๋ฉฐ ์•ฑ ์Šคํ† ์–ด์— ์ž๋™์œผ๋กœ ์ œ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ: ๊ณต๊ฐœ ๋ฒ ํƒ€

Cloud Build๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

Section titled โ€œCloud Build๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?โ€

๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ์ „ํ†ต์ ์œผ๋กœ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • iOS ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ Mac ํ•˜๋“œ์›จ์–ด ($1000+ ๋˜๋Š” ๋น„์‹ผ CI ๋ถ„)
  • ์บ์‹ฑ ๋ฐ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•œ ๋ณต์žกํ•œ CI/CD ์„ค์ •
  • Xcode, Android Studio ๋ฐ SDK๋ฅผ ์œ„ํ•œ ์œ ์ง€๋ณด์ˆ˜ ์˜ค๋ฒ„ํ—ค๋“œ

Capgo Cloud Build๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • โœ… Mac ๋ถˆํ•„์š” - ๋ชจ๋“  ๋จธ์‹ ์—์„œ iOS ์•ฑ ๋นŒ๋“œ
  • โœ… ์„ค์ • ๋ถˆํ•„์š” - CI/CD ๊ตฌ์„ฑ ๋ถˆํ•„์š”
  • โœ… ๊ฒ€์ฆ๋จ - 3๋…„๊ฐ„์˜ ๋‚ด๋ถ€ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•
  • โœ… ์•ˆ์ „ํ•จ - ๋กœ๊ทธ ์ €์žฅ ์—†์Œ, ์ž๋™ ์ •๋ฆฌ
  • โœ… ๋„ค์ดํ‹ฐ๋ธŒ ์ „์šฉ ์ค‘์  - JavaScript๋Š” ๋น„๊ณต๊ฐœ ์œ ์ง€
Terminal window
npx @capgo/cli@latest build com.example.app

์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค! ์•ฑ์ด ํด๋ผ์šฐ๋“œ์—์„œ ๋นŒ๋“œ๋˜๊ณ  ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ ๋จผ์ € ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •

๋นŒ๋“œํ•˜๊ธฐ ์ „ ํ•„์ˆ˜: iOS/Android ์ž๊ฒฉ ์ฆ๋ช…์„ ๋กœ์ปฌ์— ์ €์žฅํ•˜์„ธ์š”.

์ž๊ฒฉ ์ฆ๋ช… ์„ค์ • โ†’

iOS ๋นŒ๋“œ

์ธ์ฆ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  App Store์šฉ์œผ๋กœ ๋นŒ๋“œํ•˜์„ธ์š”.

iOS ๊ตฌ์„ฑ โ†’

Android ๋นŒ๋“œ

ํ‚ค์Šคํ† ์–ด๋ฅผ ์„ค์ •ํ•˜๊ณ  Play Store์šฉ์œผ๋กœ ๋นŒ๋“œํ•˜์„ธ์š”.

Android ๊ตฌ์„ฑ โ†’

Terminal window
npx @capgo/cli@latest build [appId] [options]

์–‘์ชฝ ํ”Œ๋žซํผ ๋นŒ๋“œ:

Terminal window
npx @capgo/cli@latest build com.example.app

iOS๋งŒ ๋นŒ๋“œ:

Terminal window
npx @capgo/cli@latest build com.example.app --platform ios

๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ Android ๋นŒ๋“œ:

Terminal window
npx @capgo/cli@latest build com.example.app --platform android --build-mode debug

ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋นŒ๋“œ:

Terminal window
npx @capgo/cli@latest build com.example.app --path ./my-app
์˜ต์…˜์œ ํ˜•๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
appIdstringcapacitor.config์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID (์˜ˆ: com.example.app)
--path <path>stringํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ
--platform <platform>stringboth๋Œ€์ƒ ํ”Œ๋žซํผ: ios, android ๋˜๋Š” both
--build-mode <mode>stringrelease๋นŒ๋“œ ๋ชจ๋“œ: debug ๋˜๋Š” release
--build-config <config>string-JSON ๋ฌธ์ž์—ด๋กœ ์ถ”๊ฐ€ ๋นŒ๋“œ ๊ตฌ์„ฑ
-a, --apikey <apikey>string-API ํ‚ค (๋˜๋Š” CAPGO_TOKEN ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ)
--supa-host <url>stringhttps://api.capgo.app์ปค์Šคํ…€ Supabase ํ˜ธ์ŠคํŠธ URL
--supa-anon <key>string-์ปค์Šคํ…€ Supabase anon ํ‚ค
sequenceDiagram
participant Dev as ๊ฐœ๋ฐœ์ž
participant CLI as Capgo CLI
participant Cloud as Capgo Cloud
participant iOS as Mac Builder
participant Android as Android Builder
Dev->>CLI: build com.example.app
CLI->>CLI: ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ์ปฌ์—์„œ ์••์ถ•
CLI->>Cloud: R2์— ์—…๋กœ๋“œ
Cloud->>iOS: Mac ํ”„๋กœ๋น„์ €๋‹ (iOS)
Cloud->>Android: ์ƒŒ๋“œ๋ฐ•์Šค ์‹œ์ž‘ (Android)
iOS-->>CLI: ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ (SSE)
Android-->>CLI: ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ (SSE)
iOS->>Cloud: ๋นŒ๋“œ ์™„๋ฃŒ
Android->>Cloud: ๋นŒ๋“œ ์™„๋ฃŒ
Cloud->>iOS: ์ •๋ฆฌ (24์‹œ๊ฐ„ ํ›„)
Cloud->>Android: ์ •๋ฆฌ (์ฆ‰์‹œ)
CLI->>Dev: ๋นŒ๋“œ ์„ฑ๊ณต
  1. ๋กœ์ปฌ ์ค€๋น„ - ํ”„๋กœ์ ํŠธ๊ฐ€ ๋กœ์ปฌ์—์„œ ์••์ถ•๋ฉ๋‹ˆ๋‹ค (node_modules, dotfiles ์ œ์™ธ)
  2. ์—…๋กœ๋“œ - zip ํŒŒ์ผ์ด ์•ˆ์ „ํ•œ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€(Cloudflare R2)์— ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค
  3. ๋นŒ๋“œ ์‹คํ–‰:
    • iOS: ์ „์šฉ Mac ๋จธ์‹  ํ”„๋กœ๋น„์ €๋‹, Fastlane ๋นŒ๋“œ ๋ฐ ์„œ๋ช…
    • Android: ๋ณด์•ˆ ์ƒŒ๋“œ๋ฐ•์Šค ์ƒ์„ฑ, Gradle ์ปดํŒŒ์ผ ๋ฐ ์„œ๋ช…
  4. ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ - Server-Sent Events๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ (์ €์žฅ๋˜์ง€ ์•Š์Œ!)
  5. ์ž๋™ ์ •๋ฆฌ:
    • iOS: ๋จธ์‹  ํ•ด์ œ ์‹œ 24์‹œ๊ฐ„ ํ›„ ํŒŒ์ผ ์‚ญ์ œ
    • Android: ๋นŒ๋“œ ํ›„ ์ฆ‰์‹œ ๋ชจ๋“  ๊ฒƒ ์‚ญ์ œ

Capgo Cloud Build๋Š” ์ƒˆ๋กœ์šด ์ธํ”„๋ผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค - 3๋…„ ๋™์•ˆ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค:

  • โœ… ์ปค์Šคํ…€ Fastlane - Capacitor ์•ฑ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๊ตฌ์ถ•๋จ
  • โœ… ์ˆ˜์ฒœ ๋ฒˆ์˜ ๋นŒ๋“œ - ํ”„๋กœ๋•์…˜์—์„œ ๊ฒ€์ฆ๋จ
  • โœ… Capacitor ์ „๋ฌธ๊ฐ€ - ์ค‘์š”ํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ๊นŠ์€ ์ง€์‹
  • โœ… ๋„ค์ดํ‹ฐ๋ธŒ ์ „์šฉ ์ค‘์  - JavaScript๋Š” ์„œ๋ฒ„์— ๋‹ฟ์ง€ ์•Š์Œ

๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด

Section titled โ€œ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณดโ€
  • ๋กœ๊ทธ ์ €์žฅ ์—†์Œ - ๋กœ๊ทธ๋Š” ํ„ฐ๋ฏธ๋„๋กœ๋งŒ ์ŠคํŠธ๋ฆฌ๋ฐ๋˜๋ฉฐ ์ €์žฅ๋˜์ง€ ์•Š์Œ
  • ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ ์—†์Œ - ์•ฑ์€ App Store/Play Store๋กœ ์ง์ ‘ ์ „์†ก๋˜๋ฉฐ ์•„๋ฌด๊ฒƒ๋„ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Œ
  • ์ž๊ฒฉ ์ฆ๋ช… ์ž๋™ ์‚ญ์ œ - ๋นŒ๋“œ ์ค‘์—๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ ์ดํ›„ ์‚ญ์ œ๋จ (์ตœ๋Œ€ 24์‹œ๊ฐ„)
  • ๊ฒฉ๋ฆฌ๋œ ๋นŒ๋“œ - ๊ฐ ๋นŒ๋“œ๋Š” ๊ฒฉ๋ฆฌ๋˜์–ด ์‹คํ–‰๋จ
  • ์ฝ”๋“œ๋Š” ๊ท€ํ•˜์˜ ๊ฒƒ - ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ€๋ถ„๋งŒ ๋นŒ๋“œํ•˜๋ฉฐ JavaScript๋Š” ๋กœ์ปฌ์— ์œ ์ง€๋จ

์–ด๋””์„œ๋“  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค - GitHub Actions, GitLab CI ๋˜๋Š” ๋ชจ๋“  CI/CD ํ”Œ๋žซํผ:

- name: Build native app
env:
CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
run: |
npm run build
npx cap sync
npx @capgo/cli@latest build com.example.app \
--platform both \
--build-mode release

๋‹ค์Œ์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค:

  • Mac ๋Ÿฌ๋„ˆ
  • Android SDK ์„ค์น˜
  • Xcode ์„ค์น˜
  • ๋ณต์žกํ•œ ์บ์‹ฑ
  • ์ž๊ฒฉ ์ฆ๋ช… ๊ด€๋ฆฌ

๋นŒ๋“œ ์‹œ๊ฐ„์€ ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค:

  • Android: 1ร— ๋ฐฐ์ˆ˜ (๋ถ„๋‹น ~$0.XX)
  • iOS: 2ร— ๋ฐฐ์ˆ˜ (Mac ํ•˜๋“œ์›จ์–ด๋กœ ์ธํ•ด ๋ถ„๋‹น ~$0.XX)

์ผ๋ฐ˜์ ์ธ ๋น„์šฉ:

  • Android ๋””๋ฒ„๊ทธ: 3๋ถ„ ร— 1ร— = ~$X.XX
  • iOS ๋ฆด๋ฆฌ์Šค: 7๋ถ„ ร— 2ร— = ~$X.XX

์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ ๊ธˆ์•ก์ด๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋น„์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์†”๋ฃจ์…˜๊ณผ์˜ ๋น„๊ต

Section titled โ€œ๋‹ค๋ฅธ ์†”๋ฃจ์…˜๊ณผ์˜ ๋น„๊ตโ€
๊ธฐ๋ŠฅCapgo Cloud BuildGitHub Actions (Mac)Expo EAS
๋กœ์ปฌ Mac ํ•„์š”โŒ ์•„๋‹ˆ์˜คโœ… ์˜ˆโŒ ์•„๋‹ˆ์˜ค
์„ค์ • ๋ณต์žก์„ฑโญ ๋‹จ์ผ ๋ช…๋ นโญโญโญ ๋ณต์žกํ•œ YAMLโญโญ ๊ตฌ์„ฑ ํŒŒ์ผ
Capacitor ๋„ค์ดํ‹ฐ๋ธŒโœ… ์ตœ์ ํ™”๋จโš ๏ธ ์ผ๋ฐ˜์ โŒ Expo ์ „์šฉ
์ฝ”๋“œ ๊ฐœ์ธ์ •๋ณดโœ… ์ €์žฅ ์•ˆ ํ•จโš ๏ธ ๋Ÿฌ๋„ˆ์—์„œโš ๏ธ ์—…๋กœ๋“œ๋จ
๋น„์šฉ (iOS)๐Ÿ’ฐ 2ร— ๊ธฐ๋ณธ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ 10ร— ๋น„์Œˆ๐Ÿ’ฐ๐Ÿ’ฐ ํ”„๋ฆฌ๋ฏธ์—„

์ค‘์š”: Capgo๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ€๋ถ„๋งŒ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ €ํฌ๊ฐ€ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ:

  • iOS ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ (Swift, Objective-C, Xcode ํ”„๋กœ์ ํŠธ)
  • Android ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ (Java, Kotlin, Gradle ํ”„๋กœ์ ํŠธ)
  • ์ฝ”๋“œ ์„œ๋ช… ๋ฐ ์•ฑ ์Šคํ† ์–ด ์ œ์ถœ

โŒ ๊ท€ํ•˜๊ฐ€ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ (๋กœ์ปฌ์—์„œ):

  • JavaScript, HTML, CSS (npm run build)
  • Capacitor ๋™๊ธฐํ™” (npx cap sync)
  • ์›น ์—์…‹

์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ๋‹ค์Œ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค:

  • ๋” ๋‚˜์€ ๋ณด์•ˆ - ์•ฑ ๋กœ์ง์€ ๋น„๊ณต๊ฐœ ์œ ์ง€
  • ๋” ๋น ๋ฅธ ๋นŒ๋“œ - ์ค‘๋ณต ์›น ๋นŒ๋“œ ์—†์Œ
  • ๋ช…ํ™•ํ•œ ์ฑ…์ž„ - ์ฝ”๋“œ๋ฅผ ์ œ์–ดํ•จ

๊ณต๊ฐœ ๋ฒ ํƒ€ ๋™์•ˆ์˜ ํ˜„์žฌ ์ œํ•œ ์‚ฌํ•ญ:

  • ๋นŒ๋“œ ์‹œ๊ฐ„ ์ดˆ๊ณผ: ์ตœ๋Œ€ 10๋ถ„
  • ์—…๋กœ๋“œ ์‹œ๊ฐ„ ์ดˆ๊ณผ: ์—…๋กœ๋“œ URL์— ๋Œ€ํ•ด 1์‹œ๊ฐ„
  • iOS ๋จธ์‹ : 24์‹œ๊ฐ„ ๋ฆฌ์Šค ์š”๊ตฌ ์‚ฌํ•ญ, Mac์˜ ๋นŒ๋“œ๋Š” ์ตœ์ ์˜ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋จ
  • ์•ก์„ธ์Šค: ๊ณต๊ฐœ ๋ฒ ํƒ€๋งŒ

๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ๋นŒ๋“œํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”?

์ฒซ ๋ฒˆ์งธ ๋นŒ๋“œ ๋งŒ๋“ค๊ธฐ

์ฒซ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ.

์‹œ์ž‘ํ•˜๊ธฐ โ†’

๊ณต๊ฐœ ๋ฒ ํƒ€ ์ฐธ์—ฌ

Cloud Build๋Š” ๊ณต๊ฐœ ๋ฒ ํƒ€ ์ค‘์ž…๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜์—ฌ ์•ก์„ธ์Šคํ•˜์„ธ์š”.

Discord ์ฐธ์—ฌ โ†’

๋„์›€์ด ํ•„์š”ํ•˜์‹ ๊ฐ€์š”?

Section titled โ€œ๋„์›€์ด ํ•„์š”ํ•˜์‹ ๊ฐ€์š”?โ€