Docs Menu
Docs Home
/ /
Atlas App Services
/

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •ํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ๊ฐœ์š”
  • ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„
  • ๊ฐœ๋ฐœ
  • ์Šคํ…Œ์ด์ง•
  • ํ”„๋กœ๋•์…˜
  • ๋นŒ๋“œ ์ž‘์—…
  • ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • App Services CLI ์„ค์ •
  • ์•ฑ ๋งŒ๋“ค๊ธฐ
  • ์•ฑ ์—…๋ฐ์ดํŠธ
  • ์•ฑ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • ์ž‘์—… ์ •๋ฆฌ

๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์†์  ํ†ตํ•ฉ, ๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ์„œ๋ฒ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” git๊ณผ ๊ฐ™์€ ๊ณต์œ  ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ž‘์—…ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์•ฑ์— ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๋ฉฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๋†’์€ ์ˆ˜์ค€์˜ ๋‹จ๊ณ„๋ฅผ ๋‹ค๋ฃจ๋ฉฐ, ๊ฐ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Atlas App Services ์•ฑ์„ ๊ตฌ์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์ž‘์—… ๋ฐ ์กฐ์น˜ ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ

GitHub ์ž‘์—…์„ ์‚ฌ์šฉํ•œ ์‹ค์ œ ์˜ˆ์‹œ ๋ณด๊ธฐ

์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋ฐ ๊ธฐํƒ€ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด MongoDB ๊ฐœ๋ฐœ์ž ํ—ˆ๋ธŒ์—์„œ GitHub ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ App Services ์•ฑ์„ ์œ„ํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋†’์€ ์ˆ˜์ค€์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฑฐ์น˜๋Š” ๊ณตํ†ต ํŒจํ„ด์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋‹จ๊ณ„๋Š” ์•ฑ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์•ฑ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ๋ฉ”์ธ ์•ฑ์„ ๋ถ„ํ• ํ•˜๊ณ  ์ƒˆ ๊ฐœ๋ฐœ ์‚ฌ๋ณธ์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค์—๋Š” ํ”„๋กœ๋•์…˜ ์•ฑ๊ณผ ๋‹ค๋ฅธ ์•ฑ ID๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๊ฐ’ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋•์…˜์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ฐ ๊ธฐํƒ€ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์•ฑ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์ถ”๊ฐ€, ์ƒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋ฆฌ๊ฑฐ ์ถ”๊ฐ€ ๋˜๋Š” ๊ธฐํƒ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธฐํ™”๋œ Realm ๊ฐ์ฒด ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋กœ์ปฌ์—์„œ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์•ฑ์— ํ†ตํ•ฉ ๋ฒ„๊ทธ๊ฐ€ ์—†๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ํšŒ๊ท€๋‚˜ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์‹คํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

QA(ํ’ˆ์งˆ ๋ณด์ฆ), ํ…Œ์ŠคํŠธ ๋˜๋Š” ์‚ฌ์ „ ํ”„๋กœ๋•์…˜์ด๋ผ๊ณ ๋„ ํ•˜๋Š” ์Šคํ…Œ์ด์ง• ๋‹จ๊ณ„๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ํ”„๋กœ๋•์…˜๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ฑ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ๋ผ์ด๋ธŒ ์„œ๋น„์Šค์™€์˜ ํ†ตํ•ฉ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ…Œ์ด์ง• ๋ฐฐํฌ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋†’์€ ์ˆ˜์ค€์˜ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๊ณผ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•œ ๊ตฌ์„ฑ์œผ๋กœ ๋ณ„๋„์˜ ๋น„ํ”„๋กœ๋•์…˜ ์„œ๋น„์Šค ๋ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, production ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋™์ผํ•œ ๊ตฌ์„ฑ์„ ๊ฐ€์ง„ staging Atlas ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ๋ชจ๋“  ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ์— ์žฌ์‚ฌ์šฉํ•˜๋Š” ์ผ๊ด€๋œ ์•ฑ์ด ์žˆ๊ฑฐ๋‚˜ ๊ฐ ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ์— ๋Œ€ํ•ด ์ƒˆ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ pull ์š”์ฒญ์„ ์ƒ์„ฑํ•  ๋•Œ์™€ ๊ฐ™์ด CI/CD ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ์— ๋Œ€ํ•ด ์ƒˆ ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ๊ฐ„์— ๊ณต์œ  ํ•˜๋Š” ์‚ฌ์ „ ๋นŒ๋“œ๋œ ํ™˜๊ฒฝ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„๋Š” ์ˆ˜์ •ํ•œ ์•ฑ์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ์ตœ์ข… ๋ฐฐํฌ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์—์„œ๋Š” ๋กœ์ปฌ ๋ฐ ์Šคํ…Œ์ด์ง• ๋‹จ๊ณ„์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ด๋ฏธ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๋ฐฐํฌํ•ด๋„ ์•ˆ์ „ํ•œ์ง€ ํ™•์ธ์ด ์ด๋ฏธ ์™„๋ฃŒ๋œ ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์•ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ CI/CD ์›Œํฌํ”Œ๋กœ์˜ ์ผ๋ถ€๋กœ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ˆ˜ํ–‰ํ•  ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์˜ ๊ตฌ์„ฑ๊ณผ ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋‹จ๊ณ„ ๊ฐ„์— ์œ ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ํŠน์ • ๊ตฌ์„ฑ ์˜ต์…˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œํ•  ๋‹จ๊ณ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ ์ ˆํ•œ ๊ตฌ์„ฑ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ƒˆ ์•ฑ์˜ ์•ฑ ID๋กœ ์•ฑ์„ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๋•์…˜ ์•ฑ ID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Use the production App ID for the main branch
export REALM_APP_ID="myapp-abcde"
# Use a staging App ID for the QA branch
export REALM_APP_ID="myapp-staging-fghij"
# Use a new App ID for development branches - you'll need to create the app first!
export REALM_APP_ID="myapp-dev-zyxwv"

ํŒ

์•ฑ ID ์ฐพ๊ธฐ

์•ฑID๋ฅผ ํ•ญ์ƒ ํ•˜๋“œ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. App Services CLI๋กœ ํŠน์ • ์•ฑ ID๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ์•ฑ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

App Services CLI๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ Atlas ์•ฑ์„ ์ƒ์„ฑ, ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

App Services CLI๋Š” npm ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์— ๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด Node.js ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•œ ๋‹ค์Œ CLI ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ shell ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

npm install -g atlas-app-services-cli

๋˜ํ•œ CLI๋ฅผ ์ธ์ฆํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๋ฉด MongoDB Atlas ๊ณต๊ฐœ/๋น„๊ณต๊ฐœ API ํ‚ค ์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. API ํ‚ค๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ API ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋กœ๊ทธ์ธํ•˜๋ ค๋ฉด ์ƒˆ๋กœ ๋ช…๋ช…๋œ ํ”„๋กœํ•„ ๊ตฌ์„ฑ์— API ํ‚ค๋ฅผ ์ €์žฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ํ”„๋กœํ•„๋กœ ๋กœ๊ทธ์ธํ•˜์„ธ์š”.

~/.config/appservices/<Profile Name>.yaml
<Profile Name>:
public_api_key: "<MongoDB Atlas Public API Key>"
private_api_key: "<MongoDB Atlas Private API Key>"
atlas_base_url: "https://cloud.mongodb.com"
realm_base_url: "https://services.cloud.mongodb.com"
telemetry_mode: ""
appservices login --profile="<Profile Name>"

ํŒ

๋ชจ๋“  ๋ช…๋ น์— --profile ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด App Services CLI๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•œ ๊ฒƒ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

App Services CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  ์ƒˆ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ฐœ๋ฐœ ๋˜๋Š” ์Šคํ…Œ์ด์ง• ๋‹จ๊ณ„์— ์žˆ๋Š” ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ ํ”„๋กœ๋•์…˜ ์•ฑ์ด ์•„๋‹Œ ์•ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฐํฌํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋˜๋Š” ์Šคํ…Œ์ด์ง• ๋ฒ„์ „์— ์ƒˆ ์•ฑ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  1. ์ƒˆ ์•ฑ ๋งŒ๋“ค๊ธฐ

    ์•ฑ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ์•ฑ์„ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

    cd path/to/realmApp
    appservices push -y --project="<MongoDB Atlas Project ID>" # e.g. --project="609ea544934fe445460219a2"
  2. ์•ฑ ID ์ €์žฅ

    ์ƒˆ ์•ฑ์—๋Š” ๋‚˜์ค‘์— ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์‹๋ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ณ ์œ ํ•œ ์•ฑ ID ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ํŒŒ์ผ ๋˜๋Š” ๊ธฐํƒ€ ์œ„์น˜์— ํ•ด๋‹น ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    # Save to an environment variable
    output=$(appservices app describe)
    app_id=$(echo $output | sed 's/^.*client_app_id": "\([^"]*\).*/\1/')
    export REALM_APP_ID=app_id
    # Save to a file
    echo $REALM_APP_ID > ./clients/ios/realm-app-id.txt

App Services CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ  ์Šคํ…Œ์ด์ง• ์•ฑ ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์™€ ๊ฐ™์€ ๊ธฐ์กด ์•ฑ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ์•ฑ ID๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ์•ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด --remote ํ”Œ๋ž˜๊ทธ์— ์•ฑ ID๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

appservices push --remote=$REALM_APP_ID -y

์•ฑ์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”๋œ ๋‹จ์œ„ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ๋ชจ์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์„ค์ •์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์•ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ๋‹ค์–‘ํ•œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด์ „ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฒดํฌ์•„์›ƒํ•˜๊ณ  ์•ฑ์˜ ํ˜„์žฌ ๋ฒ„์ „์— ๋Œ€ํ•ด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI/CD ๋‹จ๊ณ„ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ƒ์„ฑํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ ๊ฐœ๋ฐœ ๋˜๋Š” ์Šคํ…Œ์ด์ง• ์•ฑ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ณ‘ํ•ฉ๋œ ํ›„ ์•ฑ ๋ฐ ์ด์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํ”„๋กœ๋•์…˜ ์•ฑ์ด๋‚˜ ์˜๊ตฌ ์Šคํ…Œ์ด์ง• ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

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

๋Œ์•„๊ฐ€๊ธฐ

์•ฑ ํ™˜๊ฒฝ ๊ตฌ์„ฑ