DevOps๋ž€?

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

Continuous Integration

  • ์ฝ”๋“œ ๋ณ‘ํ•ฉ ๋ฐ ํ€„๋ฆฌํ‹ฐ ์œ ์ง€
  • ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜์ง€ ์•Š์œผ๋ฉด ์šด์˜ ๊ณต์ˆ˜๋ฅผ ์•„์ฃผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ๋ฌธ์ œ ์ƒํ™ฉ์„ ๋นจ๋ฆฌ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ
  • ๋ฐฉ๋ฒ•
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
      • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํŠน์ • ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์œ„๋ ฅ ๋ฐœํœ˜
    • ์ฝ”๋“œ ๋ฆฌ๋ทฐ
      • ์‚ฌ๋žŒ์ด ์ง์ ‘ ๊ฒ€์ฆ
      • ๋ฆฌ๋ทฐ๋Š” ์ž๋™ํ™” ์–ด๋ ค์›€
      • ๊ด€๋ จ ์„ค์ •์„ ์ž˜ ํ•ด๋‘์ž.
    • ์ž๋™ํ™” (CI Tools)
      • ์ฝ”๋“œ ์ปดํŒŒ์ผ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‹คํ–‰
      • ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ ์ค€์ˆ˜ ํ™•์ธ
      • ์ž ์žฌ ๊ฒฐํ•จ ๋ถ„์„
      • ์ข…๋ฅ˜
        • Jenkins
          • ์„ค์น˜ํ˜• CI ๋„๊ตฌ
            • ์„ค์น˜ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜๋œ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌํ•ด ์ฃผ์–ด์•ผ ํ•จ
          • Github hook ์—ฐ๋™
            • PR ์ƒ์„ฑ/์ˆ˜์ •/๋จธ์ง€ ๋“ฑ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋นŒ๋“œ
          • ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ
          • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์„œ๋ฒ„ ๊ด€๋ฆฌ ํ•„์š”
  • ๊ถŒ์žฅํ•˜๋Š” CI Flow
    • PR ์—ด๊ธฐ ์ „ ์ฝ”๋“œ ์ž‘์„ฑ์ž๊ฐ€ ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋„ ํ•จ๊ป˜ ์ž‘์„ฑ
    • PR ์—ด ๋•Œ ๋ฆฌ๋ทฐ์–ด ์ง€์ •, ๋ฆฌ๋ทฐ์–ด๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ
    • PR open, commit ์‹œ CI Tool์—์„œ ์ž๋™ PR ๋นŒ๋“œ ์ˆ˜ํ–‰ ๋ฐ ๋ฆฌํฌํŠธ
  • Tips
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž๋™ ์ˆ˜ํ–‰ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ์•Œ๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

Continuous Delivery

  • ์ž๋™ํ™”๋œ ์ฝ”๋“œ ๋ฐฐํฌ
  • ์ ์€ ๊ณต์ˆ˜๋กœ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • ์–ด๋””์— ๋ฐฐํฌํ•  ๊ฒƒ์ธ๊ฐ€?
    • Virtual Machine/ Phisical Machine
  • ๋ฐฐํฌํ•  ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ฐฐํฌ ๋„๊ตฌ ์„ ํƒ
  • ์‚ฌ์šฉ ์˜ˆ
    • develop ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ ๋จธ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ทธ ์‹œ์ ์˜ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•ด์„œ dev ํ™˜๊ฒฝ์— ๋ฐฐํฌ
    • main ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ ๋จธ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ทธ ์‹œ์ ์˜ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•ด์„œ alpha ํ™˜๊ฒฝ์— ๋ฐฐํฌ
    • deploy-beta pipeline์„ ์„ ํƒํ•˜๋ฉด ์„ ํƒํ•œ ์ด๋ฏธ์ง€๋ฅผ beta ํ™˜๊ฒฝ์— ๋ฐฐํฌ
    • deploy-real pipeline์„ ์„ ํƒํ•˜๋ฉด ์„ ํƒํ•œ ์ด๋ฏธ์ง€๋ฅผ real ํ™˜๊ฒฝ์— ๋ฐฐํฌ
    • main ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ ๋จธ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ deploy workflow ์‹คํ–‰
    • deploy workflow๋Š” ๊ทธ ์‹œ์ ์˜ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•ด์„œ alpha/beta/real ํ™˜๊ฒฝ์— ๋ฐฐํฌ
    • ๊ฐ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๋™์ž‘์€ ์ˆ˜๋™ approve ์š”๊ตฌ

Observablity

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

์š”์•ฝ

  • DevOps ํ”„๋กœ์„ธ์Šค ๊ตฌ์ถ•
    • ์ฝ”๋“œ ๋ณ‘ํ•ฉ ๋ฐ ํ€„๋ฆฌํ‹ฐ ์œ ์ง€ (CI)
    • ์ž๋™ํ™”๋œ ์ฝ”๋“œ ๋ฐฐํฌ (CD)
    • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ
  • ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์€ ๊ทธ๋•Œ๊ทธ๋•Œ ์ž„๊ธฐ์‘๋ณ€ ํ›„ DevOps ํ”„๋กœ์„ธ์Šค์— ๋…น์ด์ž
  • ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์„œ ๊ณต์ˆ˜๋ฅผ ์ค„์ด์ž