2025๋…„ 2์›” 17์ผยท6๋ถ„ ์ฝ๊ธฐ

์žฌ์ƒ์„ฑ๋˜๋Š” Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD: ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฐํฌ

Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD: ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, Kubernetes ๋˜๋Š” VM์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ์‹ค์šฉ์  ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์™€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ ์„ค์ •.

์žฌ์ƒ์„ฑ๋˜๋Š” Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD: ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฐํฌ

Why CI/CD matters for Go backends you regenerate

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

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

์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์€ ๋นŒ๋“œ์™€ ๋ฐฐํฌ ๋‹จ๊ณ„๊ฐ€ ์ด๋ฆ„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™๋งŒ ์ง€์ผœ๋„ ๋Œ€๋ถ€๋ถ„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค:

  • ๋ฒ„์ „ ๊ณ ์ •(Go ํˆด์ฒด์ธ, ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€, OS ํŒจํ‚ค์ง€).
  • ํ•œ ๋ฒˆ ๋นŒ๋“œํ•ด์„œ ๋™์ผํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ชจ๋“  ๊ณณ์— ๋ฐฐํฌ.
  • ์„ค์ •์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ–์— ๋‘๊ธฐ(ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ํŒŒ์ผ).
  • ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ๊ฐ™์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ์™€ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ.
  • ๋กค๋ฐฑ์„ ํ˜„์‹ค์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ: ์ด์ „ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ๊ธฐ.

Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD์˜ ๋ชฉ์ ์€ ์ž๋™ํ™” ์ž์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฆด๋ฆฌ์Šค๋กœ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: ์žฌ์ƒ์„ฑํ•˜๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋ฉด, ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ์‹ ๋ขฐํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

AppMaster์ฒ˜๋Ÿผ Go ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์“ด๋‹ค๋ฉด ์ด ์ ์€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์ƒ์„ฑ์€ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๋ณ€๊ฒฝ์—์„œ ํ”„๋กœ๋•์…˜๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ผ๊ด€๋˜๊ณ  ํ…Œ์ŠคํŠธ๋˜๋ฉฐ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•  ๋•Œ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋А๊ปด์ง‘๋‹ˆ๋‹ค.

Pick your runtime and define โ€œpredictableโ€ upfront

โ€œ์˜ˆ์ธก ๊ฐ€๋Šฅโ€ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ™์€ ์ž…๋ ฅ์ด ์–ด๋””์„œ ์‹คํ–‰ํ•˜๋“  ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD์—์„œ๋Š” ๊ฐœ๋ฐœ, ์Šคํ…Œ์ด์ง•, ํ”„๋กœ๋•์…˜ ์‚ฌ์ด์— ๋ฌด์—‡์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ• ์ง€ ๋ฏธ๋ฆฌ ํ•ฉ์˜ํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ณดํ†ต ๋น„ํƒ€ํ˜‘ ํ•ญ๋ชฉ์€ Go ๋ฒ„์ „, ๋ฒ ์ด์Šค OS ์ด๋ฏธ์ง€, ๋นŒ๋“œ ํ”Œ๋ž˜๊ทธ, ์„ค์ •์ด ๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€๋ฉด TLS ๋™์ž‘ ์ฐจ์ด, ๋ˆ„๋ฝ๋œ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€, ํ”„๋กœ๋•์…˜์—์„œ๋งŒ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฒ„๊ทธ ๊ฐ™์€ ๊นœ์ง ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๊ฐ„ ๋“œ๋ฆฌํ”„ํŠธ๋Š” ๋ณดํ†ต ๋‹ค์Œ ์ง€์ ์—์„œ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค:

  • OS์™€ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋‹ค๋ฅธ ๋ฐฐํฌํŒ ๋ฒ„์ „, ๋ˆ„๋ฝ๋œ CA ์ธ์ฆ์„œ, ์‹œ๊ฐ„๋Œ€ ์ฐจ์ด)
  • ์„ค์ • ๊ฐ’(๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ, ํƒ€์ž„์•„์›ƒ, ํ—ˆ์šฉ๋œ ์˜ค๋ฆฌ์ง„, ์™ธ๋ถ€ ์„œ๋น„์Šค ์ฃผ์†Œ)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜•ํƒœ์™€ ์„ค์ •(๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ํ™•์žฅ ๊ธฐ๋Šฅ, ์ •๋ ฌ๋ฒ•, ์—ฐ๊ฒฐ ์ œํ•œ)
  • ์‹œํฌ๋ฆฟ ์ฒ˜๋ฆฌ(์ €์žฅ ์œ„์น˜, ํšŒ์ „ ๋ฐฉ์‹, ๋ˆ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€)
  • ๋„คํŠธ์›Œํฌ ๊ฐ€์ •(DNS, ๋ฐฉํ™”๋ฒฝ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ)

Kubernetes์™€ VM ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ• ์ง€๋Š” โ€œ๋ฌด์—‡์ด ๋” ์ข‹๋‹คโ€๊ฐ€ ์•„๋‹ˆ๋ผ ํŒ€์ด ์ฐจ๋ถ„ํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๊ด€ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Kubernetes๋Š” ์˜คํ† ์Šค์ผ€์ผ๋ง, ๋กค๋ง ์—…๋ฐ์ดํŠธ, ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•ด์•ผ ํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ๋™์ผํ•œ ์ด๋ฏธ์ง€์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ผ๊ด€์„ฑ ์œ ์ง€์—๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. VM์€ ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜ ๋˜๋Š” ์†Œ์ˆ˜์ด๊ณ , ์ž‘์€ ํŒ€์ด๋ฉฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋งž์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„์ด ๋‹ฌ๋ผ๋„ ์•„ํ‹ฐํŒฉํŠธ์™€ ๊ทธ ๊ณ„์•ฝ์„ ํ‘œ์ค€ํ™”ํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด: CI์—์„œ ํ•ญ์ƒ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๊ฐ™์€ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๊ฐ™์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฒˆ๋“ค์„ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐฐํฌ ๋‹จ๊ณ„๋งŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค: Kubernetes๋Š” ์ƒˆ ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ์ ์šฉํ•˜๊ณ , VM์€ ์ด๋ฏธ์ง€๋ฅผ ํ’€๋งํ•ด ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์šฉ์  ์˜ˆ: ํŒ€์ด AppMaster์—์„œ Go ๋ฐฑ์—”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๊ณ  ์Šคํ…Œ์ด์ง•์€ Kubernetes์—, ํ”„๋กœ๋•์…˜์€ ๋‹น๋ถ„๊ฐ„ VM์— ๋ฐฐํฌํ•œ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ๋‘˜ ๋‹ค ์ •ํ™•ํžˆ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ํ’€๋งํ•˜๊ณ  ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์‹œํฌ๋ฆฟ ์Šคํ† ์–ด์—์„œ ์„ค์ •์„ ๋กœ๋“œํ•˜๋ฉด โ€œ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„โ€์€ ๋ฒ„๊ทธ์˜ ์›์ธ์ด ์•„๋‹ˆ๋ผ ๋ฐฐํฌ์˜ ์„ธ๋ถ€์‚ฌํ•ญ์ด ๋ฉ๋‹ˆ๋‹ค. AppMaster(appmaster.io)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ฆฌํ˜• ํด๋ผ์šฐ๋“œ ๋Œ€์ƒ์œผ๋กœ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‚ด๋ณด๋‚ด ๋™์ผํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž์ฒด ์ธํ”„๋ผ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ์ด ๋ชจ๋ธ์— ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค.

A simple pipeline map you can explain to anyone

์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ์€ ์„ค๋ช…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค: ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋นŒ๋“œํ•˜๊ณ , ์ž‘๋™์„ ์ฆ๋ช…ํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•œ ์ •ํ™•ํ•œ ๊ฒƒ์„ ๋ฐฐํฌํ•˜๊ณ , ๋งค๋ฒˆ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ฃŒ์„ฑ์€ ๋ฐฑ์—”๋“œ๊ฐ€ ์žฌ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: AppMaster๋กœ๋ถ€ํ„ฐ ์žฌ์ƒ์„ฑ) โ€” ๋ณ€๊ฒฝ์ด ๋งŽ์€ ํŒŒ์ผ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ์ผ๊ด€๋œ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœํ•œ Go ๋ฐฑ์—”๋“œ์šฉ CI/CD ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋ฆฐํŠธ์™€ ๊ธฐ๋ณธ ๊ฒ€์‚ฌ
  • ๋นŒ๋“œ
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • ํ†ตํ•ฉ ์ฒดํฌ
  • ํŒจํ‚ค์ง•(๋ถˆ๋ณ€ ์•„ํ‹ฐํŒฉํŠธ)
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(์ œ์–ด๋œ ๋‹จ๊ณ„)
  • ๋ฐฐํฌ

์‹คํŒจ๋Š” ์ดˆ๊ธฐ์— ๋ฉˆ์ถ”๋„๋ก ๊ตฌ์กฐํ™”ํ•˜์„ธ์š”. ๋ฆฐํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‹ค๋ฅธ ๋‹จ๊ณ„๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ํ†ตํ•ฉ ๊ฒ€์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„์šฉ์„ ์ค„์ด๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์ด ๋น ๋ฅด๊ฒŒ ๋А๊ปด์ง‘๋‹ˆ๋‹ค.

๋ชจ๋“  ๋‹จ๊ณ„๊ฐ€ ๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ์‹คํ–‰๋  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ถ„ํ• :

  • ๋ชจ๋“  ์ปค๋ฐ‹/PR: ๋ฆฐํŠธ, ๋นŒ๋“œ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • main ๋ธŒ๋žœ์น˜: ํ†ตํ•ฉ ๊ฒ€์‚ฌ, ํŒจํ‚ค์ง•
  • ๋ฆด๋ฆฌ์Šค ํƒœ๊ทธ: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฐํฌ

์–ด๋–ค ๊ฒƒ์„ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ณด๊ด€ํ• ์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”. ๋ณดํ†ต ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€(๋ฐฐํฌํ•˜๋Š” ๋Œ€์ƒ), ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๊ทธ, ํ…Œ์ŠคํŠธ ๋ฆฌํฌํŠธ ๋“ฑ์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กค๋ฐฑ๊ณผ ๊ฐ์‚ฌ ์‹œ ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ํ…Œ์ŠคํŠธ๋˜๊ณ  ์Šน๊ฒฉ๋˜์—ˆ๋Š”์ง€ ์ง€๋ชฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

Step by step: build stage that is stable and repeatable

๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ํ•œ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: ์˜ค๋Š˜, ๋‚ด์ผ, ๋‹ค๋ฅธ ๋Ÿฌ๋„ˆ์—์„œ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ดํ›„ ๋‹จ๊ณ„(ํ…Œ์ŠคํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฐํฌ)๋Š” ์‹ ๋ขฐํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ์„ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”. ๊ณ ์ •๋œ Go ๋ฒ„์ „(์˜ˆ: 1.22.x)๊ณผ ๊ณ ์ •๋œ ๋Ÿฌ๋„ˆ ์ด๋ฏธ์ง€(๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ ๋ฐ ํŒจํ‚ค์ง€ ๋ฒ„์ „)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. latest ํƒœ๊ทธ๋ฅผ ํ”ผํ•˜์„ธ์š”. libc, Git ๋˜๋Š” Go ํˆด์ฒด์ธ์˜ ์ž‘์€ ๋ณ€ํ™”๊ฐ€ โ€œ๋‚ด ๋จธ์‹ ์—์„œ๋Š” ๋œ๋‹คโ€๋Š” ์‹คํŒจ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋””๋ฒ„๊ทธ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ์บ์‹œ๋Š” ์†๋„๋ฅผ ๋†’์ด์ง€๋งŒ ์ง„์‹ค์˜ ๊ทผ์›์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Go ๋นŒ๋“œ ์บ์‹œ์™€ ๋ชจ๋“ˆ ๋‹ค์šด๋กœ๋“œ ์บ์‹œ๋ฅผ ์บ์‹œํ•˜๋˜, go.sum์œผ๋กœ ํ‚ค๋ฅผ ๊ฑธ์–ด ์˜์กด์„ฑ์ด ๋ฐ”๋€Œ๋ฉด ๊น”๋”ํžˆ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ๋˜๊ฒŒ ํ•˜์„ธ์š”.

์ปดํŒŒ์ผ ์ „์— ๋น ๋ฅธ ๊ฒŒ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ฐœ๋ฐœ์ž๊ฐ€ ์šฐํšŒํ•˜์ง€ ์•Š๋„๋ก ๋น ๋ฅด๊ณ  ๊ฒฝ๋Ÿ‰์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ gofmt ๊ฒ€์‚ฌ, go vet, ๊ทธ๋ฆฌ๊ณ (๋น ๋ฅด๋‹ค๋ฉด) staticcheck๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ ์ƒ์„ฑ ํŒŒ์ผ์—์„œ ์‹คํŒจํ•˜๊ฒŒ ํ•˜์„ธ์š” โ€” ์žฌ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํ”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์„ธ์š”. -trimpath ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  -ldflags๋กœ ์ปค๋ฐ‹ SHA์™€ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋‹น ํ•˜๋‚˜์˜ ๋ช…๋ช…๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด Kubernetes๋‚˜ VM์—์„œ ๋ฌด์—‡์ด ์‹คํ–‰๋˜๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐฑ์—”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Step by step: tests that catch issues before deploy

Regenerate without release fear
Model data in PostgreSQL visually and regenerate clean code when requirements change.
Start Building

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

๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํŒจํ‚ค์ง€๋ณ„ ํƒ€์ž„์•„์›ƒ๊ณผ ์ „์ฒด ์žก ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•˜์„ธ์š”. ํŒ€์— ๋”ฐ๋ผ ์ถฉ๋ถ„ํ•œ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ธฐ์ค€์„ ์ •ํ•˜์„ธ์š”. ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ํŠธ๋กœํ”ผ๊ฐ€ ์•„๋‹ˆ๋ผ ํ’ˆ์งˆ ์œ ์ง€๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

์•ˆ์ •์ ์ธ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์— ํฌํ•จ๋˜๋Š” ํ•ญ๋ชฉ:

  • go test ./... ๋ฅผ ํŒจํ‚ค์ง€๋ณ„ ํƒ€์ž„์•„์›ƒ๊ณผ ์ „์—ญ ์žก ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์‹คํ–‰
  • ํƒ€์ž„์•„์›ƒ์— ๊ฑธ๋ฆฐ ํ…Œ์ŠคํŠธ๋Š” ํ”Œ๋ผํ‚ค๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผ
  • ์ค‘์š”ํ•œ ํŒจํ‚ค์ง€(auth, billing, permissions)์— ๋Œ€ํ•œ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ธฐ๋Œ€์น˜ ์„ค์ •
  • ๋™์‹œ์„ฑ ๊ด€๋ จ ์ฝ”๋“œ(ํ, ์บ์‹œ, ํŒฌ์•„์›ƒ ์ž‘์—…์ž)์— ๋Œ€ํ•ด ๋ ˆ์ด์Šค ๋””ํ…ํ„ฐ ์‚ฌ์šฉ

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

ํ”Œ๋ž˜ํ‚ค ํ…Œ์ŠคํŠธ๋Š” ๋นŒ๋“œ๋ฅผ ์‹คํŒจ์‹œํ‚ค์„ธ์š”. ๊ฒฉ๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณ„๋„ ์žก์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  ๊ณ„์† ๋ ˆ๋“œ๋กœ ๋ฆฌํฌํŠธ๋˜๊ฒŒ ํ•˜๋ฉฐ, ์†Œ์œ ์ž์™€ ๊ธฐํ•œ์„ ์š”๊ตฌํ•˜์„ธ์š”.

๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ์„ ์ €์žฅํ•˜์„ธ์š”. ์›์‹œ ๋กœ๊ทธ์™€ ๊ฐ„๋‹จํ•œ ๋ฆฌํฌํŠธ(์„ฑ๊ณต/์‹คํŒจ, ์†Œ์š”์‹œ๊ฐ„, ๋А๋ฆฐ ํ…Œ์ŠคํŠธ ๋ชฉ๋ก)๋ฅผ ๋ณด๊ด€ํ•˜๋ฉด ์žฌ์ƒ์„ฑ๋œ ๋ณ€๊ฒฝ์ด ๋งŽ์€ ๊ฒฝ์šฐ ํšŒ๊ท€๋ฅผ ์ฐพ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

Integration checks with real dependencies, without slow builds

Add essentials without rework
Use built-in modules like auth, Stripe payments, and messaging to move faster with fewer surprises.
Create App

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

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ผ์‹œ์ ์ธ ์˜์กด์„ฑ์„ ๋„์šฐ์„ธ์š”. ํ…Œ์ŠคํŠธ ์ „์šฉ PostgreSQL(๋ฐ Redis ์‚ฌ์šฉ ์‹œ Redis)์„ ์ž ๊น ๋„์šฐ๋Š” ์ •๋„๋ฉด ๋Œ€๊ฐœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์€ ํ”„๋กœ๋•์…˜๊ณผ ๊ฐ€๊น๊ฒŒ ์œ ์ง€ํ•˜๋˜ ๋ชจ๋“  ํ”„๋กœ๋•์…˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ๋ณต์‚ฌํ•˜๋ ค ๋“ค์ง€๋Š” ๋งˆ์„ธ์š”.

์ข‹์€ ํ†ตํ•ฉ ๋‹จ๊ณ„๋Š” ์˜๋„์ ์œผ๋กœ ์ž‘๊ฒŒ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค:

  • ํ”„๋กœ๋•์…˜๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘(๋‹จ, ํ…Œ์ŠคํŠธ์šฉ ์‹œํฌ๋ฆฟ ์‚ฌ์šฉ)
  • ํ—ฌ์Šค ์ฒดํฌ ๊ฒ€์ฆ(์˜ˆ: /health๊ฐ€ 200 ๋ฐ˜ํ™˜)
  • ํ•ต์‹ฌ ์—”๋“œํฌ์ธํŠธ ํ•œ๋‘ ๊ฐœ ํ˜ธ์ถœํ•ด ์ƒํƒœ ์ฝ”๋“œ์™€ ์‘๋‹ต ํ˜•ํƒœ ํ™•์ธ
  • PostgreSQL(๋ฐ ํ•„์š” ์‹œ Redis)์— ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ

API ๊ณ„์•ฝ ๊ฒ€์ฆ์€ ๊นจ์กŒ์„ ๋•Œ ๊ฐ€์žฅ ํ”ผํ•ด๊ฐ€ ํฐ ์—”๋“œํฌ์ธํŠธ์— ์ง‘์ค‘ํ•˜์„ธ์š”. ์ „์ฒด E2E๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช‡ ๊ฐ€์ง€ ์š”์ฒญ/์‘๋‹ต ๊ทœ์น™์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค: ํ•„์ˆ˜ ํ•„๋“œ ๋ˆ„๋ฝ ์‹œ 400, ์ธ์ฆ ํ•„์š”์‹œ 401, ์ •์ƒ ํ๋ฆ„์€ 200๊ณผ ์˜ˆ์ƒ JSON ํ‚ค ๋ฐ˜ํ™˜ ๋“ฑ.

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

AppMaster๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฐ ๊ฒ€์ฆ์€ ๋” ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์žฌ์ƒ์„ฑ๋œ ์„œ๋น„์Šค๊ฐ€ ์—ฌ์ „ํžˆ ์ •์ƒ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์›น/๋ชจ๋ฐ”์ผ ์•ฑ์ด ๊ธฐ๋Œ€ํ•˜๋Š” API๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ค๋‹ˆ๋‹ค.

Database migrations: safe ordering, gates, and rollback reality

๋จผ์ € ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋””์„œ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”. CI์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ดˆ๊ธฐ์— ์˜ค๋ฅ˜๋ฅผ ์žก๊ธฐ ์ข‹์ง€๋งŒ, ๋ณดํ†ต CI๊ฐ€ ํ”„๋กœ๋•์…˜์„ ์ง์ ‘ ๊ฑด๋“œ๋ ค์„  ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ํŒ€์€ ๋ฐฐํฌ ์ค‘์—(์ „์šฉ ๋‹จ๊ณ„๋กœ) ๋˜๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š” ๋ณ„๋„์˜ โ€œmigrateโ€ ์žก์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์šฉ์  ๊ทœ์น™: CI์—์„œ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ๋’ค ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๋•์…˜์— ๊ฐ€๊น๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•˜์„ธ์š”. Kubernetes์—์„œ๋Š” ๋ณดํ†ต ์ผํšŒ์„ฑ Job์œผ๋กœ, VM์—์„œ๋Š” ๋ฆด๋ฆฌ์Šค ๋‹จ๊ณ„์˜ ์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์€ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”:

  • ๋จผ์ € ์ถ”๊ฐ€์  ๋ณ€๊ฒฝ ์„ ํ˜ธ(์ƒˆ ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ, nullable ์ปฌ๋Ÿผ, ์ƒˆ ์ธ๋ฑ์Šค)
  • ํ•˜๋‚˜์˜ ๋ฆด๋ฆฌ์Šค ๋™์•ˆ ์ฝ”๋“œ๊ฐ€ ์˜› ์Šคํ‚ค๋งˆ์™€ ์ƒˆ ์Šคํ‚ค๋งˆ ๋ชจ๋‘๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฐํฌ
  • ๊ทธ ๋‹ค์Œ์— ์ œ์•ฝ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ฐ•ํ™”(์ปฌ๋Ÿผ ์‚ญ์ œ, NOT NULL๋กœ ๋ณ€๊ฒฝ)
  • ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰(๊ฐ€๋Šฅํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ concurrent๋กœ ์ƒ์„ฑ)

์‹คํ–‰ ์ „์— ์•ˆ์ „ ์žฅ์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” DB ๋ฝ๊ณผ โ€œํŒŒ๊ดด์  ๋ณ€๊ฒฝ์€ ์Šน์ธ ํ•„์š”โ€ ๊ฐ™์€ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ์˜ˆ: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— DROP TABLE ๋˜๋Š” DROP COLUMN์ด ํฌํ•จ๋˜๋ฉด ์ˆ˜๋™ ๊ฒŒ์ดํŠธ๊ฐ€ ์Šน์ธ๋˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํŒจํ•˜๊ฒŒ ๋งŒ๋“œ์„ธ์š”.

๋กค๋ฐฑ์€ ์–ด๋ ค์šด ํ˜„์‹ค์ž…๋‹ˆ๋‹ค: ๋งŽ์€ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปฌ๋Ÿผ์„ ์‚ญ์ œํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋กค๋ฐฑ ๊ณ„ํš์€ ์ „ํ–ฅ์  ์ˆ˜์ •(forward fix)์— ๋งž์ถฐ ๊ณ„ํšํ•˜์„ธ์š”: ์•ˆ์ „ํ•  ๋•Œ๋งŒ ๋‹ค์šด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‘๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐฑ์—…๊ณผ ์ „ํ–ฅ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์œผ๋กœ ๋ณต๊ตฌํ•˜์„ธ์š”.

๊ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์—๋Š” ๋ณต๊ตฌ ๊ณ„ํš์„ ๋ถ™์ด์„ธ์š”: ๋„์ค‘ ์‹คํŒจ ์‹œ ์–ด๋–ป๊ฒŒ ๋ณต๊ตฌํ• ์ง€, ์•ฑ์„ ๋กค๋ฐฑํ•ด์•ผ ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ• ์ง€. AppMaster๋กœ Go ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋ฆด๋ฆฌ์Šค ๊ณ„์•ฝ์˜ ์ผ๋ถ€๋กœ ๋‹ค๋ฃจ์–ด ์ƒ์„ฑ๋œ ์ฝ”๋“œ์™€ ์Šคํ‚ค๋งˆ๊ฐ€ ๋™๊ธฐํ™”๋˜๋„๋ก ํ•˜์„ธ์š”.

Packaging and configuration: artifacts you can trust

Build the whole product stack
Generate backend, web app, and native mobile apps from one platform when you need them.
Try AppMaster

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

ํŒจํ‚ค์ง•์€ ๋ณดํ†ต ๋‘ ๊ฐ€์ง€ ๊ธธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Kubernetes์— ๋ฐฐํฌํ•œ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค. OS ๊ณ„์ธต์„ ๊ณ ์ •ํ•˜๊ณ  ๋กค์•„์›ƒ์„ ์ผ๊ด€๋˜๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. VM์šฉ ๋ฒˆ๋“ค๋„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ์†Œ์ˆ˜์˜ ํŒŒ์ผ(์˜ˆ: CA ์ธ์ฆ์„œ, ํ…œํ”Œ๋ฆฟ, ์ •์  ์ž์‚ฐ)์„ ํฌํ•จํ•˜๊ณ  ๋งค๋ฒˆ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์„ค์ •์€ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๊ตฌ์›Œ ๋„ฃ์ง€ ๋งˆ์„ธ์š”. ๋Œ€๋ถ€๋ถ„ ์„ค์ •(ํฌํŠธ, DB ํ˜ธ์ŠคํŠธ, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ)์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐ’์ด ๊ธธ๊ฑฐ๋‚˜ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ์œผ๋ฉด ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์„ค์ • ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜์กด์„ฑ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”: ๊ถŒํ•œ ์ž ๊ธˆ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ๋ช…ํ™•ํ•œ ํด๋ฐฑ ํ”Œ๋žœ์„ ๋‘ก๋‹ˆ๋‹ค.

์‹œํฌ๋ฆฟ์€ ๋„˜์ง€ ๋ง์•„์•ผ ํ•  ์„ ์ž…๋‹ˆ๋‹ค. ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋‚˜ ์ด๋ฏธ์ง€, CI ๋กœ๊ทธ์— ์ ˆ๋Œ€ ๋„ฃ์ง€ ๋งˆ์„ธ์š”. ์‹œ์ž‘ ์‹œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜์ง€ ๋งˆ์„ธ์š”. CI ์‹œํฌ๋ฆฟ ์ €์žฅ์†Œ์— ๋‘๊ณ  ๋ฐฐํฌ ์‹œ ์ฃผ์ž…ํ•˜์„ธ์š”.

์•„ํ‹ฐํŒฉํŠธ ์ถ”์ ์„ฑ์„ ์œ„ํ•ด ๊ฐ ๋นŒ๋“œ์— ์‹๋ณ„์ž๋ฅผ ๋„ฃ์œผ์„ธ์š”: ์ปค๋ฐ‹ ํ•ด์‹œ์™€ ๋ฒ„์ „์œผ๋กœ ํƒœ๊ทธ, ๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋ฒ„์ „, ์ปค๋ฐ‹, ๋นŒ๋“œ ์‹œ๊ฐ„)๋ฅผ ์ •๋ณด ์—”๋“œํฌ์ธํŠธ์— ํฌํ•จ, ๋ฐฐํฌ ๋กœ๊ทธ์— ์•„ํ‹ฐํŒฉํŠธ ํƒœ๊ทธ ๊ธฐ๋ก. ํ•œ ๋ช…๋ น์ด๋‚˜ ๋Œ€์‹œ๋ณด๋“œ๋กœ โ€œ๋ฌด์—‡์ด ์‹คํ–‰ ์ค‘์ธ์ง€โ€ ๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์„ธ์š”.

AppMaster๋กœ Go ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์ด ๊ทœ์œจ์€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค: ์žฌ์ƒ์„ฑ์ด ์•ˆ์ „ํ•˜๋ ค๋ฉด ์•„ํ‹ฐํŒฉํŠธ ๋„ค์ด๋ฐ๊ณผ ์„ค์ • ๊ทœ์น™์ด ๋งค ๋ฆด๋ฆฌ์Šค๋ฅผ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Deploying to Kubernetes or VMs without surprises

๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌ ์‹คํŒจ๋Š” โ€œ๋‚˜์œ ์ฝ”๋“œโ€ ๋•Œ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์„ค์ • ๋ถˆ์ผ์น˜, ๋ˆ„๋ฝ๋œ ์‹œํฌ๋ฆฟ, ์‹œ์ž‘์€ ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ค€๋น„๋˜์ง€ ์•Š์€ ์„œ๋น„์Šค ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค: ๋™์ผํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ชจ๋“  ๊ณณ์— ๋ฐฐํฌํ•˜๊ณ , ํ™˜๊ฒฝ๋ณ„ ์ฐจ์ด๋Š” ์„ค์ •์œผ๋กœ๋งŒ ์ œ์–ดํ•˜์„ธ์š”.

Kubernetes: treat deploys as controlled rollouts

Kubernetes์—์„œ๋Š” ํ†ต์ œ๋œ ๋กค์•„์›ƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜์„ธ์š”. ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํŒŒ๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ต์ฒดํ•˜๊ณ , readiness์™€ liveness ์ฒดํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ํ”Œ๋žซํผ์ด ํŠธ๋ž˜ํ”ฝ ์ „์†ก ์‹œ๊ธฐ์™€ ์ •์ง€ ์‹œ๊ธฐ๋ฅผ ์•Œ๊ฒŒ ํ•˜์„ธ์š”. ๋ฆฌ์†Œ์Šค ์š”์ฒญ๊ณผ ์ œํ•œ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. CI ๋Ÿฌ๋„ˆ์—์„œ๋Š” ํ†ต๊ณผํ–ˆ์ง€๋งŒ ์ž‘์€ ๋…ธ๋“œ์—์„œ OOM์œผ๋กœ ์ฃฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€์™€ ์‹œํฌ๋ฆฟ์„ ๋ถ„๋ฆฌํ•˜์„ธ์š”. ์ปค๋ฐ‹๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌ ์‹œ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •(ConfigMaps, Secrets ๋˜๋Š” ์‹œํฌ๋ฆฟ ๋งค๋‹ˆ์ €)์„ ์ฃผ์ž…ํ•˜๋ฉด ์Šคํ…Œ์ด์ง•๊ณผ ํ”„๋กœ๋•์…˜์€ ๋™์ผํ•œ ๋น„ํŠธ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

VMs: systemd gives you most of what you need

๊ฐ€์ƒ ๋จธ์‹ ์— ๋ฐฐํฌํ•  ๋•Œ๋Š” systemd๊ฐ€ ์ž‘์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ, ํ™˜๊ฒฝ ํŒŒ์ผ, ์žฌ์‹œ์ž‘ ์ •์ฑ…์„ ๋ช…ํ™•ํžˆ ํ•œ ์œ ๋‹› ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”. stdout/stderr๋ฅผ ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ๋‚˜ journald๋กœ ๋ณด๋‚ด๋ฉด ์ธ์‹œ๋˜ํŠธ๊ฐ€ SSH ๋’ค์ง€๊ธฐ ์ˆ˜์ƒ‰์ „์ด ๋˜๋Š” ์ผ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์—†์ด๋„ ์•ˆ์ „ํ•œ ๋กค์•„์›ƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ฃจ/๊ทธ๋ฆฐ: ๋‘ ๋””๋ ‰ํ„ฐ๋ฆฌ(๋˜๋Š” ๋‘ VM)๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์Šค์œ„์น˜ํ•˜๋ฉฐ ์ด์ „ ๋ฒ„์ „์„ ๋น ๋ฅธ ๋กค๋ฐฑ์šฉ์œผ๋กœ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์นด๋‚˜๋ฆฌ๋„ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค: ์†Œ๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ๋งŒ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ณด๋‚ด ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ ๋’ค ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ โ€œ์™„๋ฃŒโ€๋กœ ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ์–ด๋””์„œ๋‚˜ ๊ฐ™์€ ํฌ์ŠคํŠธ-๋””ํ”Œ๋กœ์ด ์Šค๋ชจํฌ ์ฒดํฌ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”:

  • ํ—ฌ์Šค ์—”๋“œํฌ์ธํŠธ๊ฐ€ OK๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์˜์กด์„ฑ์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
  • ์ž‘์€ ์‹ค์ œ ๋™์ž‘ ์‹คํ–‰(์˜ˆ: ํ…Œ์ŠคํŠธ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ์กฐํšŒ)
  • ์„œ๋น„์Šค ๋ฒ„์ „/๋นŒ๋“œ ID๊ฐ€ ์ปค๋ฐ‹๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
  • ์‹คํŒจํ•˜๋ฉด ๋กค๋ฐฑํ•˜๊ณ  ์•Œ๋ฆผ ๋ฐœ์†ก

๋ฐฑ์—”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: AppMaster Go ๋ฐฑ์—”๋“œ)์—๋„ ์ด ์ ‘๊ทผ๋ฒ•์€ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค: ํ•œ ๋ฒˆ ๋นŒ๋“œํ•˜๊ณ  ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ฐฐํฌํ•œ ๋’ค ํ™˜๊ฒฝ ์„ค์ •์œผ๋กœ ์ฐจ์ด๋ฅผ ์ œ์–ดํ•˜์„ธ์š”.

Common mistakes that make pipelines unreliable

Simplify backend business logic
Add business logic with drag and drop workflows instead of hand-coding every change.
Build Now

๋Œ€๋ถ€๋ถ„์˜ ๋ง๊ฐ€์ง„ ๋ฆด๋ฆฌ์Šค๋Š” โ€œ๋‚˜์œ ์ฝ”๋“œโ€ ๋•Œ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํ–‰๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ํ–‰๋™ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Go ๋ฐฑ์—”๋“œ์šฉ CI/CD๋ฅผ ์ฐจ๋ถ„ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ํŒจํ„ด์„ ์กฐ์‹ฌํ•˜์„ธ์š”.

Mistake patterns that cause surprise failures

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

latest ํƒœ๊ทธ๋‚˜ ๊ณ ์ •๋˜์ง€ ์•Š์€ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์›์ธ์ž…๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€์™€ Go ๋ฒ„์ „์„ ๊ณ ์ •ํ•ด ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ์„œ์„œํžˆ ๋ณ€ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜์„ธ์š”.

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

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

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œํฌ๋ฆฟ, ์„ค์ •, ์ ‘๊ทผ๊ถŒ์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์ด ๋ถˆ๋ช…ํ™•ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถ”์ธก์œผ๋กœ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜๊ณ  ํšŒ์ „ํ•˜๋ฉฐ ์ฃผ์ž…ํ•˜๋Š”์ง€ ์†Œ์œ ์ž๋ฅผ ์ •ํ•˜์„ธ์š”.

ํ˜„์‹ค์ ์ธ ์‹คํŒจ ์˜ˆ: ํŒ€์ด ๋ณ€๊ฒฝ์„ ๋จธ์ง€ํ•˜๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์Šคํ…Œ์ด์ง•์—์„œ๋Š” ์ž‘๋™ํ–ˆ์ง€๋งŒ(๋ฐ์ดํ„ฐ ์ ์Œ) ํ”„๋กœ๋•์…˜์—์„œ๋Š” ํƒ€์ž„์•„์›ƒํ•ฉ๋‹ˆ๋‹ค(๋ฐ์ดํ„ฐ ๋งŽ์Œ). ์ด๋ฏธ์ง€๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ณ  ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๊ฐ€ ๊ฒŒ์ดํŠธ๋กœ ๋ณดํ˜ธ๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด ๋ฐฐํฌ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์ค‘๋‹จ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AppMaster๋กœ Go ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์žฌ์ƒ์„ฑ์ด ๋งŽ์€ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ทœ์น™์€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ๊ณผ ๋ช…์‹œ์  ๊ฒŒ์ดํŠธ๋Š” ํฐ ๋ณ€๊ฒฝ์ด ์œ„ํ—˜ํ•œ ๋ฆด๋ฆฌ์Šค๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค.

Quick checklist for a predictable CI/CD setup

Make deployments less stressful
Create services that pass smoke checks: predictable config, stable artifacts, clean restarts.
Start Project

Go ๋ฐฑ์—”๋“œ์šฉ CI/CD์— ๋Œ€ํ•œ ์ง๊ฐ ์ ๊ฒ€ํ‘œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์— ๋ช…ํ™•ํ•œ โ€œ์˜ˆโ€๋กœ ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฆด๋ฆฌ์Šค๋Š” ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋งŒ์ด ์•„๋‹ˆ๋ผ ํ™˜๊ฒฝ์„ ์ž ๊ธˆ. Go ๋ฒ„์ „๊ณผ ๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ๋กœ์ปฌ๊ณผ CI์— ๋™์ผํ•œ ์„ค์ • ์‚ฌ์šฉ.
  • ํŒŒ์ดํ”„๋ผ์ธ์„ 3๊ฐœ์˜ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰. ํ•˜๋‚˜๋Š” ๋นŒ๋“œ, ํ•˜๋‚˜๋Š” ํ…Œ์ŠคํŠธ, ํ•˜๋‚˜๋Š” ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•„ํ‹ฐํŒฉํŠธ ์ƒ์„ฑ.
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ทจ๊ธ‰. ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰ ๋กœ๊ทธ ๋ณด๊ด€, ๋กค๋ฐฑ์˜ ์˜๋ฏธ ๋ฌธ์„œํ™”.
  • ์ถ”์  ๊ฐ€๋Šฅํ•œ ๋ถˆ๋ณ€ ์•„ํ‹ฐํŒฉํŠธ ์ƒ์„ฑ. ํ•œ ๋ฒˆ ๋นŒ๋“œํ•˜๊ณ  ์ปค๋ฐ‹ SHA๋กœ ํƒœ๊ทธํ•ด ํ™˜๊ฒฝ ๊ฐ„ ์žฌ๋นŒ๋“œ ์—†์ด ์Šน๊ฒฉ.
  • ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•˜๋Š” ์ฒดํฌ๋กœ ๋ฐฐํฌ. ๋ ˆ๋””๋‹ˆ์Šค/๋ผ์ด๋ธŒ๋‹ˆ์Šค ํ—ฌ์Šค ์ฒดํฌ์™€ ๋ชจ๋“  ๋ฐฐํฌ์—์„œ ์‹คํ–‰๋˜๋Š” ์งง์€ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€.

ํ”„๋กœ๋•์…˜ ์ ‘๊ทผ์€ ์ œํ•œํ•˜๊ณ  ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”. CI๋Š” ์ „์šฉ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ , ์‹œํฌ๋ฆฟ์€ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ˆ˜๋™ ํ”„๋กœ๋•์…˜ ์ž‘์—…์€ ๋ˆ„๊ฐ€, ๋ฌด์—‡์„, ์–ธ์ œ ํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

A realistic example and next steps you can start this week

์ž‘์€ ์šด์˜ํŒ€(4๋ช…)์ด ์ฃผ 1ํšŒ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ œํ’ˆํŒ€์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ณ„์† ๋‹ค๋“ฌ๊ธฐ ๋•Œ๋ฌธ์— Go ๋ฐฑ์—”๋“œ๋ฅผ ์ž์ฃผ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค: ์ƒˆ๋ฒฝ์— ์šธ๋ฆฌ๋Š” ๊ณ ์žฅ ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ์•„๋ฌด๋„ ๋†€๋ผ์ง€ ์•Š๋Š” ๋ฆด๋ฆฌ์Šค.

๊ธˆ์š”์ผ์˜ Typical ๋ณ€๊ฒฝ: customers์— ์ƒˆ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€(์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ)ํ•˜๊ณ  ๊ทธ ํ•„๋“œ๋ฅผ ์“ฐ๋Š” API๋ฅผ ์—…๋ฐ์ดํŠธ(์ฝ”๋“œ ๋ณ€๊ฒฝ). ํŒŒ์ดํ”„๋ผ์ธ์€ ์ด๋“ค์„ ํ•˜๋‚˜์˜ ๋ฆด๋ฆฌ์Šค๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๊ทธ ์ •ํ™•ํ•œ ์•„ํ‹ฐํŒฉํŠธ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ ๋’ค์—๋งŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ ์šฉํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋Œ€๋ณด๋‹ค ์•ž์„œ ๋‚˜๊ฐ€๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋งค์นญ๋˜๋Š” ์Šคํ‚ค๋งˆ ์—†์ด ๋ฐฐํฌ๋˜๋Š” ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

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

ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋ฆฌํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์‹คํŒจํ•˜๋ฉด ์ง„ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์€ โ€œ์ด๋ฒˆ ํ•œ ๋ฒˆ๋งŒ ๋ฐ€์–ด๋„ฃ์žโ€๋Š” ์‹œ๋„๋ฅผ ํ•ด์„  ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„ ํŒ€์— ์ž˜ ํ†ตํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋‹ค์Œ ๋‹จ๊ณ„:

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

AppMaster๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์žฌ์ƒ์„ฑ์„ ๋™์ผํ•œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„ ์•ˆ์— ์œ ์ง€ํ•˜์„ธ์š”: regenerate, build, test, migrate(์•ˆ์ „ํ•œ ํ™˜๊ฒฝ์—์„œ), ๊ทธ๋ฆฌ๊ณ  deploy. ์ƒ์„ฑ๋œ ์†Œ์Šค๋„ ์ผ๋ฐ˜ ์†Œ์Šค์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์„ธ์š”. ๋ชจ๋“  ๋ฆด๋ฆฌ์Šค๋Š” ํƒœ๊ทธ๋œ ๋ฒ„์ „์œผ๋กœ๋ถ€ํ„ฐ ๋™์ผํ•œ ๋‹จ๊ณ„๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Whatโ€™s the first thing to lock down for predictable Go CI/CD?

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

Why do regenerated Go backends still need CI/CD?

์žฌ์ƒ์„ฑ(regeneration)์€ ์—”๋“œํฌ์ธํŠธ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ์˜์กด์„ฑ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์€ ์ด๋Ÿฐ ๋ณ€๊ฒฝ์„ ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒ€์ฆ ์ ˆ์ฐจ๋กœ ํ†ต๊ณผ์‹œํ‚ค๋ฏ€๋กœ ์žฌ์ƒ์„ฑ์ด ์œ„ํ—˜์ด ์•„๋‹Œ ์•ˆ์ „ํ•œ ์ž‘์—…์ด ๋ฉ๋‹ˆ๋‹ค.

Should I rebuild the backend separately for staging and production?

ํ•œ ๋ฒˆ ๋นŒ๋“œํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ dev, staging, prod๋กœ ๊ทธ๋Œ€๋กœ ์Šน๊ฒฉ(promote)ํ•˜์„ธ์š”. ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ๋™์ผ ์ปค๋ฐ‹์ด๋ผ๋„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

What should run on every commit for a Go backend?

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

How do I add integration checks without making the pipeline slow?

์„œ๋น„์Šค๋ฅผ ์‹ค์ œ์™€ ๋น„์Šทํ•œ ์„ค์ •์œผ๋กœ ๋„์šฐ๊ณ  PostgreSQL ๊ฐ™์€ ์‹ค์ œ ์˜์กด์„ฑ๊ณผ ์—ฐ๋™ํ•˜๋Š” ์ž‘์€ ํ†ตํ•ฉ ๋‹จ๊ณ„๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๋ชฉํ‘œ๋Š” โ€œ์ปดํŒŒ์ผ์€ ๋˜๋Š”๋ฐ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•œ๋‹คโ€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์žก๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์ฒด E2E๋ฅผ ๋งค๋ฒˆ ๋Œ๋ฆด ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Where should database migrations run in CI/CD?

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์ž๋™์œผ๋กœ ์•„๋ฌด ํ™˜๊ฒฝ์—๋‚˜ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„๊ฐ€ ๋˜์–ด์„  ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์‹คํ–‰ ๋ฝ๊ณผ ๋ช…ํ™•ํ•œ ๋กœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ œ์–ด๋œ ๋ฆด๋ฆฌ์Šค ๋‹จ๊ณ„๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ๋งŽ์€ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๊ฐ„๋‹จํžˆ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Whatโ€™s the most common Kubernetes deploy issue for Go services?

Readiness ์ฒดํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ƒˆ ํŒŒ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์ค€๋น„๋œ ๋’ค์—๋งŒ ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ€๋„๋ก ํ•˜์„ธ์š”. ๋˜ํ•œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ/์ œํ•œ์„ ํ˜„์‹ค์ ์œผ๋กœ ์„ค์ •ํ•ด CI์—์„œ ํ†ต๊ณผํ•œ ์„œ๋น„์Šค๊ฐ€ ํ”„๋กœ๋•์…˜์—์„œ OOM์œผ๋กœ ์ฃฝ์ง€ ์•Š๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

How can I deploy Go services safely on VMs without Kubernetes?

๊ฐ„๋‹จํ•œ systemd ์œ ๋‹› ํŒŒ์ผ๊ณผ ์ผ๊ด€๋œ ๋ฆด๋ฆฌ์Šค ์Šคํฌ๋ฆฝํŠธ๋ฉด VM ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ณผ ๋™์ผํ•œ ์•„ํ‹ฐํŒฉํŠธ ๋ชจ๋ธ์„ ์œ ์ง€ํ•˜๊ณ , ๋ฐฐํฌ ํ›„ ๊ฐ„๋‹จํ•œ ์Šค๋ชจํฌ ์ฒดํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

How should I handle secrets in a Go CI/CD pipeline?

๋น„๋ฐ€์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋‚˜ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ, ๋กœ๊ทธ์— ์ ˆ๋Œ€ ํฌํ•จ์‹œํ‚ค์ง€ ๋งˆ์„ธ์š”. ๋ฐฐํฌ ์‹œ์—๋งŒ ์‹œํฌ๋ฆฟ ์Šคํ† ์–ด์—์„œ ์ฃผ์ž…ํ•˜๊ณ , ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋ฉฐ ์ •๊ธฐ์ ์œผ๋กœ ๋กœํ…Œ์ด์…˜ํ•˜์„ธ์š”.

How do I fit AppMaster regeneration into an existing CI/CD workflow?

์žฌ์ƒ์„ฑ์„ ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์— ๋‘๊ณ  ๋‹ค๋ฅธ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ฒ˜๋ฆฌํ•˜์„ธ์š”: regenerate, build, test, package, ๊ทธ๋ฆฌ๊ณ  ์•ˆ์ „ ์žฅ์น˜๊ฐ€ ์žˆ๋Š” migrate ๋ฐ deploy. AppMaster๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด ํ๋ฆ„์„ ๋”ฐ๋ฅด๋ฉด ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
์žฌ์ƒ์„ฑ๋˜๋Š” Go ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ CI/CD: ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฐํฌ | AppMaster