์•ˆ๋…•ํ•˜์„ธ์š”? ์ด๋ฒˆ ๊ธ€์€ Bluemix๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํด๋ผ์šฐ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””์ž์ธํ•˜๊ณ  ๋งŒ๋“ค์–ด ๊ฐ€๋Š” ๊ณผ์ •์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋˜์—ˆ๋ฏ€๋กœ ์ฐธ๊ณ  ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


  1. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ดํ•ด
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ƒ ๋ฐ ์š”๊ฑด ์ •์˜
  3. ์š”๊ฑด์— ๋Œ€ํ•œ Usecase ๋ฐ Wireframe ์ž‘์„ฑ
  4. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ์„ค๊ณ„
  5. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ ์ค€๋น„
  6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„
  7. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part1
  8. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part2
  9. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part3
  10. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ DevOps ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ DevOps ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ์ข…์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ง„ํ–‰๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ์ž‘์„ฑ
  • ๋นŒ๋“œ
  • ํ…Œ์ŠคํŠธ
  • ๋ฐฐํฌ
  • ์‹คํ–‰

์ผ์ข…์˜ S/W Life-Cycle์ธ๋ฐ ์ด ๊ฐœ๋…์ด Agile ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ๊ณผ MVC (Minimum Viable Product) + Feedback ๋ฐ˜์˜์„ ํ†ตํ•ด ์งง์•„์ง„ ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๊ทธ๋ฆฌ๊ณ  Feedback์— ๋”ฐ๋ฅธ ๋นˆ๋ฒˆํ•œ ์ฝ”๋“œ ๋ฐ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์„ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด์— ๋”ฐ๋ผ ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ์— ๋Œ€ํ•œ ํ‘œ์ค€ํ™” ๋ฐ ์ž๋™ํ™”์— ๋Œ€ํ•œ ์š”๊ฑด์ด ์ฆ๋Œ€๋˜์—ˆ์œผ๋ฉฐ, CI/CD (Continous Integration/Delivery)๋กœ ์ •๋ฆฌ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI (Continuous Integration)

CI (Continuous Integration)๋Š” ์—ฌ๋Ÿฌ ํŒ€(๋˜๋Š” ์‚ฌ๋žŒ)์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์„œ๋กœ๊ฐ„ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ง€์†์ ์œผ๋กœ ํ†ตํ•ฉ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

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

๋ณดํ†ต์€ ๊ฐœ๋ฐœ, ๊ฒ€์ฆ, ์šด์˜๊ณ„ ๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ๊ณ„์—์„œ ์ ์šฉ๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์ง€๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฐˆ ์ˆ˜๋ก ์ด๋ฅผ ์šด์˜ ์ฝ”๋“œ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์  ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— CI๋ฅผ ์ ์šฉํ•˜์—ฌ ์–ธ์ œ๋ผ๋„ ๋ฆด๋ฆฌ์ฆˆํ•  ์ˆ˜ ์žˆ์„ ์ •๋„ ์ˆ˜์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋นŒ๋“œ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋กœ์„œ Jenkins๋ฅผ ์˜ˆ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Jenkins์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://jenkins.io ์„ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

CD (Continuous Delivery)

CD (Continuous Delivery)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ์„œ ๊ฒฐ๊ณผ๋ฌผ์ด ํ•ญ์ƒ ๋ฆด๋ฆฌ์ฆˆ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ ๋†’์€ ์‹ ๋ขฐ๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์งง์€ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์งง์€ ์ฃผ๊ธฐ๋กœ ๋ฐฐํฌํ•˜๋Š” ์ ์ด CI (Continuous Integration)์™€ ์—ฐ๊ฒฐ๋˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋œ ์ฝ”๋“œ์˜ ๋ฐฐํฌ๋กœ ์ด์–ด์ง€๊ฒŒ ๋˜๋ฏ€๋กœ CD๋ฅผ CI์˜ ํ™•์žฅ์œผ๋กœ ์—ฌ๊ธฐ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

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

CI/CD๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œ์Šค์ฝ”๋“œ ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ์— ์ฝ”๋“œ๋ฅผ ์ œ์ถœ
  2. ์†Œ์Šค ์ฝ”๋“œ ์ œ์ถœ์ด ์ด๋ฒคํŠธ ์†Œ์Šค๊ฐ€ ๋˜์–ด ํ•ด๋‹น ์ €์žฅ์†Œ์—์„œ ์ฝ”๋“œ๋ฅผ Build ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ
  3. ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Rule์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ๊ฒ€์ฆ ์ง„ํ–‰
  4. ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  5. ์†Œ์Šค ์ฝ”๋“œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง€ ์ƒ์„ฑ
  6. ๋Œ€์ƒ ์„œ๋ฒ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง€ ๋ฐฐํฌ

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

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

Bluemix DevOps ์„œ๋น„์Šค

IBM Bluemix์—์„œ๋Š” DevOps๋ฅผ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฐ Build ํ™˜๊ฒฝ์„ Continous Delivery๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, GitHub์ด๋‚˜ Slack๊ณผ ๊ฐ™์€ 3rd party ๋„๊ตฌ๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ open source ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ DevOps ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

IBM Garage Method์™€ ์—ฐ๊ณ„ํ•œ DevOps ํˆด์ฒด์ธ ํ…œํ”Œ๋ฆฟ๋„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด๋‹ค ์†์‰ฝ๊ฒŒ DevOps ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ˜„์žฌ ๋ฐฐํฌ๋œ Cloud Foundry ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ DevOps ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณต ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Bluemix์˜ DevOps์—์„œ๋Š” ์ค€๋น„๋œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ Open Toolchain ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋„ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ธ€์€ ๋ณ„๋„ ํฌ์ŠคํŒ…์œผ๋กœ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Continous Delivery ๋„๊ตฌ ์ฒด์ธ ์ƒ์„ฑ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ง€๋‚œ ์—ฐ์žฌ ๊ธ€์—์„œ ๋งŒ๋“ค์–ด ๋ณด์•˜๋˜ smv-ui-app์— ๋Œ€ํ•ด ๋„๊ตฌ ์ฒด์ธ์„ ๊ตฌ์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Bluemix ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Œ€์‹œ ๋ณด๋“œ ํ™”๋ฉด ์ค‘ ๊ฐœ์š”์˜ ๋”œ๋ฆฌ๋ฒ„๋ฆฌ ํŒจ๋„์„ ๋ณด๋ฉด ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— DevOps Continous Delivery ์„œ๋น„์Šค๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งŒ์•ฝ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์†์‰ฝ๊ฒŒ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŒจ๋„์—์„œ ๋ณด์ด๋Š” ์‚ฌ์šฉ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ฐ”๋กœ ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™”๊ฐ€ ์ง„ํ–‰๋˜๋ฉด IBM Bluemix DevOps ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜๋˜๋ฉฐ Continuous Delivery ๋„๊ตฌ ์ฒด์ธ์„ ์ƒ์„ฑ ํ™”๋ฉด์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

IBM Bluemix Garage Method์˜ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ์™€ ์ด๋ฅผ ์—ฐ๊ณ„ํ•œ ๋„๊ตฌ ์ฒด์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Git ์ €์žฅ์†Œ ๋ฐ ๋ฌธ์ œ ์ถ”์ 
  • Delivery Pipeline
  • Eclipse Orion ์›น IDE

์ •์ƒ์ ์œผ๋กœ ๋„๊ตฌ ์ฒด์ธ์ด ์ƒ์„ฑ๋˜๊ณ ๋‚˜๋ฉด ์‚ฌ๊ณ (THINK)-์ฝ”๋“œ(CODE)-์ „๋‹ฌ(DELIVER)์— ๋Œ€์‘๋˜๋Š” ๋„๊ตฌ๊ฐ€ ๊ตฌ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Git ์ €์žฅ์†Œ ๋ฐ ๋ฌธ์ œ ์ถ”์ 

Bluemix์—์„œ ์ œ๊ณตํ•˜๋Š” GIT ์ €์žฅ์†Œ์™€ Issue ์ถ”์ ์€ GitLab Community Edition์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์œผ๋กœ์„œ ๊ณ„์ •๋ณ„๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. GitHub์—์„œ ์ฒ˜๋Ÿผ ๊ฐœ์ธ ๋˜๋Š” ํŒ€์„ ๊ตฌ์„ฑํ•˜์—ฌ ์„œ๋กœ ํ˜‘์—…ํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  Issue์™€ wiki๋„ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์€ ์ตœ๋Œ€ 100MB ๋ฐ ์ €์žฅ์†Œ ์šฉ๋Ÿ‰์€ ์ตœ๋Œ€ 1GB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ดˆ๊ณผ๋˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ ๊ณต๊ฐ„ ์กฐ์ •์— ๊ด€ํ•œ email์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Git Repo์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋„๊ตฌ ์ฒด์ธ ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ์— ๋Œ€ํ•œ Git ์ €์žฅ์†Œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ํ‘œ์ค€ ์œ ํ˜•(Boilerplate)์ด๋‚˜ ํ”Œ๋žซํผ ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ๋ฐ”ํƒ•์œผ๋กœ Cloud Foundry์•ฑ์˜ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑ ํ›„ ๊ฐœ๋ฐœ์ด ์–ด๋Š ์ •๋„ ์ง„ํ–‰๋œ ์ƒํƒœ์—์„œ Bluemix CLI์˜ cf push ๋ช…๋ น์œผ๋กœ ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ๋Š” ํ…œํ”Œ๋ฆฟ๊ณผ ์›๋ณธ ์ฝ”๋“œ์™€๋Š” ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, Git Repo์— ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ local ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ clone ํ›„ ์›๋ณธ ์ฝ”๋“œ์™€ ๋น„๊ตํ•˜์—ฌ Git Repo ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ ํ•  ์ดˆ๊ธฐ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Delivery Pipeline

Delivery Pipeline์€ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ์— ๋Œ€ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์ƒ์„ฑ๋œ Pipeline์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์œผ๋กœ Build, Deploy ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„ (Stage)๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ฐ ์Šคํ…Œ์ด์ง€ ๋ณ„๋กœ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๊ตฌ์„ฑ์—์„œ๋Š” ํ•ด๋‹น ์Šคํ…Œ์ด์ง€๋ฅผ ์‹œ์ž‘์„ ์œ„ํ•œ ์ž…๋ ฅ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ํ•ด๋‹น ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ

ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์— ํ•„์š”ํ•œ ํŠน์ • ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Eclipse Orion ์›น IDE

๋งˆ์ง€๋ง‰์œผ๋กœ, Continous Delivery์—๋Š” Git Repo์™€ ๋ณ„๋„๋กœ Eclipse Orion ์›น IDE๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Git Repo์—์„œ๋„ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ํ•ด๋‹น ๋‚ด์šฉ์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์›น IDE๋Š” ๊ทธ ๋ณด๋‹ค๋Š” ์ข€ ๋” ์†Œ์Šค ์ฝ”๋“œ ํŽธ์ง‘ ๊ธฐ๋Šฅ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ git client๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ  ๊ธฐ๋ณธ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Git Repo์™€ ์—ฐ๋™๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์›น IDE๋ฅผ ์ด์šฉ ํ•  ๋•Œ Git Repo์™€ IDE๊ฐ„ ์†Œ์Šค ์ฝ”๋“œ ๋™๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ git์— ๋Œ€ํ•œ ์ดํ•ด ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋Š๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋งŒ, ์ด ๋ถ€๋ถ„๋งŒ ์ฃผ์˜ํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

smv-ui-app ์—…๋ฐ์ดํŠธ

์•ž์„œ ๊ธ€๋“ค์„ ํ†ตํ•ด์„œ ์—…๋ฐ์ดํŠธ ๋œ smv-ui-app์˜ ๋‚ด์šฉ์„ git repository์— ์ ์šฉํ•˜๊ณ  ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ž‘์„ฑํ•ด ๋†“์•˜๋˜ smv-ui-app์— ๋Œ€ํ•œ ์ตœ์ข… ์ฝ”๋“œ๋Š” ๋‹ค์Œ URL์—์„œ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , git client๋ฅผ ์ด์šฉํ•˜์—ฌ smv-ui-app์— ๋Œ€ํ•œ git ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค.

git clone https://<USERNAME>@git.ng.bluemix.net/<USERNAME>/smv-ui-app.git

<USERNAME>์€ ๊ณ„์ •๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์œผ๋กœ์„œ ๊ฐ์ž ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” Bluemix ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Git Repo์˜ ์„ค์ • ๋ฉ”๋‰ด๋กœ ์ง„์ž…ํ•˜์—ฌ Access Tokens๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” Access Token์ด ๋‘ ๊ฐœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ„๋„์˜ ์ด๋ฆ„์„ ๋ถ™์—ฌ ๊ด€๋ฆฌํ•˜๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ƒ์„ฑ ์‹œ ๊ด€๋ จ ์ •๋ณด๋Š” ์ดํ›„ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๋ณ„๋„๋กœ ์ž˜ ๊ธฐ์–ต(๋ณด๊ด€)ํ•ด ๋‘๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

git clone์ด ์ •์ƒ ๋™์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

clone์„ ํ–ˆ๋‹ค๋ฉด ์ด์ œ smv-ui-app์— ๋Œ€ํ•œ ์•ž์„œ ์–ป์€ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ๋ฎ์–ด ์“ฐ๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” diff ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

smv-ui-app ํด๋”์—์„œ git status ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ์–ด๋–ค ํŒŒ์ผ๋“ค์ด ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

smv-ui-app์€ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„๋งŒ ์žˆ์œผ๋ฏ€๋กœ git add * ๋ช…๋ น์œผ๋กœ ์ถ”๊ฐ€๋œ ํŒŒ์ผ์„ tracking ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ git status ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ์ถ”๊ฐ€๋œ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ .eslintrc.yml ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋Š” git add .eslintrc.yml ๋ช…๋ น์œผ๋กœ ํŒŒ์ผ ์ง์ ‘ ๋ช…์‹œํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์ด์ œ git commit -m initial ์ด๋ž€ ๋ช…๋ น์œผ๋กœ comit์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ๊นŒ์ง€๋Š” local์— ์žˆ๋Š” git ์ €์žฅ์†Œ์— ๋ฐ˜์˜๋œ ๊ฒƒ์ด๊ณ  ์ด๋ฅผ ์›๊ฒฉ์˜ Bluemix Git Repo์— ์ €์žฅํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

git push origin master

์ด์ œ Git Repo ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์ •๋ง๋กœ ์›๊ฒฉ์œผ๋กœ ์ €์žฅ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋Š” git push๋กœ ์ธํ•ด์„œ Build Stage๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜์–ด Deploy Stage๊นŒ์ง€ ์ด์–ด์„œ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ ์›น IDE์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณธ ๋‹ค๋ฉด GitRepo์— ์—…๋ฐ์ดํŠธ๋œ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น IDE๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณต๊ฐ„(๋กœ์ปฌ PC)์—์„œ ์ˆ˜์ • ๋˜์—ˆ์œผ๋ฏ€๋กœ Git Repo์—์„œ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ์›น IDE์˜ ์ž‘์—… ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์‹  ํ•ญ๋ชฉ์— ์œ—์ชฝ ํ™”์‚ดํ‘œ ๋ชจ์–‘์˜ ๋ณ‘ํ•ฉ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ GitRepo์—์„œ ๊ฐ€์ ธ์˜จ ์ •๋ณด๋ฅผ ์›น IDE์˜ ์ €์žฅ์†Œ์˜ ํ™œ์„ฑ๋ถ„๊ธฐ(Active Branch)๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ณ‘ํ•ฉ์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ์›น IDE์—์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

smv-userauth ์—…๋ฐ์ดํŠธ

์ด๋ฒˆ์—๋Š” smv-userauth๋ฅผ smv-ui-app๊ณผ ๋™์ผํ•œ ๋„๊ตฌ ์ฒด์ธ์— ๋“ฑ๋กํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋„๊ตฌ ์ฒด์ธ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ฒ˜์Œ์— ์˜๋„ํ–ˆ๋˜ smv์˜ ์•„ํ‚คํ…์ณ์ธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ์— ๋Œ€์‘๋˜๋Š” DevOps ๋„๊ตฌ ์ฒด์ธ์˜ ๋ชจ์Šต์œผ๋กœ ๊ตฌ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

smv-ui-app์˜ ๋„๊ตฌ ์ฒด์ธ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ์— ๋ณด์ด๋Š” ๋„๊ตฌ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒˆ๋กœ์šด ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์€ smv-userauth์— ๋Œ€ํ•œ GitRepo ๊ทธ๋ฆฌ๊ณ  ์ด์— ๋Œ€์‘๋˜๋Š” pipeline ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์šฐ์„  GitRepo๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์— smv-userauth์— ๋Œ€ํ•œ git ์ €์žฅ์†Œ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์–ด์งœํ”ผ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ์•„์˜ˆ ์ €์žฅ์†Œ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

smv-userauth์— ๋Œ€ํ•œ GitRepo๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„๊ตฌ ์ฒด์ธ์— ๋„๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ smv-ui-app์—์„œ์™€ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ GitRepo์— smv-userauth์— ๋Œ€ํ•œ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

GitRepo์— ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ–ˆ๋‹ค๋ฉด ์ด์ œ๋Š” Pipeline์„ ์ƒ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. smv-ui-app์˜ ๋„๊ตฌ ์ฒด์ธ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ๋„๊ตฌ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Delivery Pipeline์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Delivery Pipeline์„ ์ถ”๊ฐ€ ํ•  ๋•Œ ์•ฑ ๋ณด๊ธฐ ๋ฉ”๋‰ด์— ์•ฑํ‘œ์‹œ๋Š” ์ฒดํฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด ๋‘๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ์ฒดํฌ ์ƒํƒœ๋กœ ๋†“์•„๋„ ์ƒ๊ด€์€ ์—†์œผ๋‚˜ SMV๋Š” smv-ui-app์—์„œ ์‚ฌ์šฉ์ž UI๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•˜์—ฌ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ƒ์„ฑ๋œ Pipeline๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ๋‹จ๊ณ„์™€ ๋ฐฐํฌ ๋‹จ๊ณ„ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•ž์„œ smv-ui-app์˜ pipeline ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, ๋‹จ๊ณ„ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์€ GitRepo๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋ณธ ์„ค์ •์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…์€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ์ž‘์—… ์œ ํ˜•์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

๋นŒ๋” ์œ ํ˜•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Node.js Runtime์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ„๋„๋กœ ๊ตฌ์„ฑ๋œ Build๋ฅผ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋นŒ๋” ์œ ํ˜•์„ ๋‹จ์ˆœ์œผ๋กœ ์„ ํƒ ํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋‹จ๊ณ„ ์ƒ์„ฑ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Pipeline ํ™”๋ฉด์—์„œ ๋‹ค์‹œ ๋‹จ๊ณ„ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐฐํฌ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์— ์•ž์„œ Build ๋‹จ๊ณ„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ ์ž…๋ ฅ ์œ ํ˜•์ด GIT ์ €์žฅ์†Œ ๋Œ€์‹  ์•„ํ‹ฐํŒฉํŠธ ๋นŒ๋“œ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Deploy ๋‹จ๊ณ„์— ๋งž๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ์ž‘์—… ์œ ํ˜•์„ ๋ฐฐ์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์น˜ ์ž‘์—…์— ๋งž๋Š” ์„ค์ • ํ™”๋ฉด์—์„œ ํ•ด๋‹น ์•ฑ์ด ๋ฐฐํฌ๋  ๊ณ„์ •๊ณผ ์ง€์—ญ ๋ฐ ์ž‘์—… ๊ณต๊ฐ„ ๋“ฑ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ ์ •๋ณด๋ฅผ ๋‹จ๊ณ„ ์ƒ์„ฑ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

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

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋ฆ„์œผ๋กœ ์ธํ•œ ํ˜ผ๋ž€์„ ์ค„์ด๋„๋ก ๋„๊ตฌ ์ฒด์ธ์˜ ์ด๋ฆ„์„ smv-ui-app์—์„œ ๋‹ค๋ฅธ smv-toolchain์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ ์ฒด์ธ ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ ๋ฉ”๋‰ด๋ฅผ ์„ ํƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ๋‹นํ•œ ์ด๋ฆ„์œผ๋กœ smv-toolchain์„ ์ž…๋ ฅํ•˜์—ฌ ์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ถ”๊ฐ€๋กœ ์ด ๋„๊ตฌ ์ฒด์ธ๊ณผ ์—ฐ๊ฒฐ๋œ ์•ฑ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ ์ฒด์ธ ํ™”๋ฉด ์™ผ์ชฝ ๋ฉ”๋‰ด ์ค‘ ์—ฐ๊ฒฐ ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์•ฑ์ด ์—ฐ๊ฒฐ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ๋„๊ตฌ ์ฒด์ธ์„ ๋Œ€ํ‘œํ•˜๋Š” UI ์•ฑ์€ smv-ui-app ํ•˜๋‚˜๋งŒ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์†Œ์Šค ์ฝ”๋“œ์˜ ํ˜•์ƒ ๊ด€๋ฆฌ์™€ Tool chain์˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ตฌ์„ฑ๋œ DevOps ํ™˜๊ฒฝ์„ ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ๊ตฌ์„ฑํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. Pipeline ์ดํ›„์— Slack์ด๋‚˜ ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์œผ๋‹ˆ ๋‚˜๋จธ์ง€ ๊ฐ๊ฐ์˜ smv ์„œ๋น„์Šค ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๊ฐ๊ฐ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ชจ์Šต์˜ DevOps ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ์žฌ๋ฅผ ๋งˆ์น˜๋ฉฐ

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

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


  1. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ดํ•ด
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ƒ ๋ฐ ์š”๊ฑด ์ •์˜
  3. ์š”๊ฑด์— ๋Œ€ํ•œ Usecase ๋ฐ Wireframe ์ž‘์„ฑ
  4. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ์„ค๊ณ„
  5. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ ์ค€๋น„
  6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„
  7. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part1
  8. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part2
  9. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ Part3
  10. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ DevOps ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์ฐธ๊ณ 

์— ๋Œ€ํ•œ ๋Œ“๊ธ€์ด 1๊ฑด ์žˆ์Šต๋‹ˆ๋‹ค"ํด๋ผ์šฐ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋”ฐ๋ผํ•ด๋ณด๊ธฐ #10
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ DevOps ํ™˜๊ฒฝ ๊ตฌ์„ฑ"

  1. ๋ฐ•ํƒœ์›… 8์›” 02, 2017

    ๋„ˆ๋ฌด ๊น”๋”ํ•œ ์ •๋ฆฌ๋„ค์š”. ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค!!

ํ† ๋ก  ์ฐธ๊ฐ€

์ด๋ฉ”์ผ์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ž…๋ ฅ์ฐฝ์€ * ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค