Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

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

์ด์•ผ๊ธฐ๋Š” ์ด๋ ‡๊ฒŒ ์‹œ์ž‘๋œ๋‹ค ์•Œ๋ ‰์‚ฐ๋“œ๋ผ ์‹ ์น˜๋…ธ๋ฐ” ์— DevOpsConf. ์„ ๋„์ ์ธ Windows ์ „๋ฌธ๊ฐ€๊ฐ€ ํšŒ์‚ฌ๋ฅผ ๋– ๋‚ฌ์„ ๋•Œ Alexander๋Š” ์ด์ œ ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  Linux๋กœ ์ „ํ™˜ํ•˜์„ธ์š”! Alexander๋Š” 100๋ช…์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์„ ๋ก€๋ฅผ ๋งŒ๋“ค๊ณ  Windows ๊ฐœ๋ฐœ์˜ ์ผ๋ถ€๋ฅผ Linux๋กœ ์ด์ „ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

TFS, Puppet, Linux .NET ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ RPM์— ์‰ฝ๊ณ  ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐœ๋ฐœ ํŒ€์ด Postgres ๋ฐ Flyway๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ฒ˜์Œ ๋“ฃ๊ณ  ๋งˆ๊ฐ์ผ์ด ๋‚ด์ผ ๋ชจ๋ ˆ์ธ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? Docker์™€ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•˜๋‚˜์š”? .NET ๊ฐœ๋ฐœ์ž๊ฐ€ Windows์™€ ์Šค๋ฌด๋””๋ฅผ ๋ฒ„๋ฆฌ๊ณ  Puppet๊ณผ Linux๋ฅผ ์„ ํƒํ•˜๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Windows๋ฅผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์œ ์ง€ํ•  ํž˜๋„, ์š•๊ตฌ๋„, ์ž์›๋„ ์—†๋Š” ๊ฒฝ์šฐ ์ด๋…์  ๊ฐˆ๋“ฑ์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ? ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋ฌผ๋ก  ์›น ๋ฐฐํฌ, ํ…Œ์ŠคํŠธ, CI, ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ TFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  Alexander์˜ ๋ณด๊ณ ์„œ ๊ธฐ๋ก์—๋Š” ๋ถ€๋Ÿฌ์ง„ ๋ชฉ๋ฐœ ๋ฐ ์ž‘์—… ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ •๋ณด๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ Vasya๋Š” ๋– ๋‚ฌ๊ณ  ์ž‘์—…์€ ๋‚˜์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐˆํ€ด๋ฅผ ๋“ค๊ณ  ์ดˆ์กฐํ•˜๊ฒŒ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด Vasya๋ฅผ ๋Œ๋ ค๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์„ ๋•Œ ๋‚˜๋Š” ์‚ฌ์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์šฐ๋ฆฌ ํšŒ์‚ฌ์˜ Win VM ๋น„์œจ์„ ํ‰๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์ˆ˜๋Š” Windows์— ์œ ๋ฆฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

DevOps๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ํ•˜๋‚˜๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ชจ๋“  ๊ฒƒ์„ Linux๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Google์ด ์ €๋ฅผ ๋„์™€์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” .Net์ด ์ด๋ฏธ Linux๋กœ ํฌํŒ…๋˜์–ด ์žˆ์—ˆ๊ณ  ์ด๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค!

Linux์™€ ํ•จ๊ป˜ .NET Core๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. "๋ˆ์„ ์ง€๋ถˆํ•œ๋‹ค"์™€ "์ง€๋ถˆํ•˜์ง€ ์•Š๋Š”๋‹ค" ์‚ฌ์ด์—์„œ ๋Œ€๋‹ค์ˆ˜๋Š” ๋‚˜์ฒ˜๋Ÿผ ๋‘ ๋ฒˆ์งธ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ด๋‹ค. MSDB ๋ผ์ด์„ ์Šค ๋น„์šฉ์€ ์•ฝ 1๋‹ฌ๋Ÿฌ์ด๊ณ , Windows ๊ฐ€์ƒ ๋จธ์‹  ์ „์ฒด๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ๋Š” ์ˆ˜๋ฐฑ ๋‹ฌ๋Ÿฌ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—…์˜ ๊ฒฝ์šฐ ์ด๋Š” ํฐ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ €๊ธˆ - ์ฒซ ๋ฒˆ์งธ ์ด์œ . ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

Windows ๊ฐ€์ƒ ๋จธ์‹ ์€ Linux ํ˜•์ œ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ฌด๊ฒ๋‹ค. ๋Œ€๊ธฐ์—…์˜ ๊ทœ๋ชจ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์šฐ๋ฆฌ๋Š” Linux๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ์€ ๊ธฐ์กด CI์— ๊ฐ„๋‹จํžˆ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.. ์šฐ๋ฆฌ๋Š” ์ง„๋ณด์ ์ธ DevOps๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ Bamboo, Jenkins ๋ฐ GitLab CI๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์ด Linux์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ด์œ ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐ˜์ฃผ. ์šฐ๋ฆฌ๋Š” ๊ธฐ์ˆ ์ ์ธ ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๊ณ  ์ค‘๋‹จ ์—†๋Š” ์„œ๋น„์Šค๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ XNUMX์ฐจ ๋ผ์ธ์—์„œ ์„œ๋น„์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” "์—์Šค์ฝ”ํŠธ"์— ๋Œ€ํ•œ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋‚ฎ์ถฐ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๋ฏธ Linux ์Šคํƒ์— ์ต์ˆ™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Windows ํ”Œ๋žซํผ์šฉ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ƒˆ๋กœ์šด ์ œํ’ˆ์„ ์ดํ•ดํ•˜๊ณ  ์ง€์›ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

๋งจ ๋จผ์ € - ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์˜ ํŽธ์˜์„ฑ. ํŠนํžˆ Linux๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์–ธ๊ธ‰๋œ ์ดํ›„์—๋Š” ๊ทธ๋“ค ๋ชจ๋‘๊ฐ€ ๋ณ€ํ™”ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ ์Šค๋ฌด๋””์— ๋Œ€ํ•œ ์ž๋™ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์ž์‹ ์ด ์„ ํ˜ธํ•˜๋Š” Visual Studio์ธ TFS๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์— ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜๋Š”์ง€๋Š” ๊ทธ๋“ค์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  Windows ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ•จ ๊ธฐ์กด CI์— ํ†ตํ•ฉ. ๋ ˆ์ผ์€ ์ด๋ฏธ ๊ฑฐ๊ธฐ์— ์žˆ์—ˆ๊ณ  ๋ชจ๋“  ์ž‘์—…์€ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์Šน์ธ๋œ ์ „๋‹ฌ ํ‘œ์ค€ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ณ ๋ คํ•˜์—ฌ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€์› ๋ฐ ์šด์˜์˜ ์šฉ์ด์„ฑ, ๋‹ค์–‘ํ•œ ๋ถ€์„œ ๋ฐ ์ง€์› ๋ถ€์„œ์˜ ๋ชจ๋“  ์‹ ๊ทœ ์ฐธ๊ฐ€์ž์— ๋Œ€ํ•œ ์ตœ์†Œ ์ง„์ž… ์ž„๊ณ„๊ฐ’์— ๋Œ€ํ•œ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

๋งˆ๊ฐ์ผ - ์–ด์ œ.

์œˆ๊ฐœ๋ฐœ๊ทธ๋ฃน

๋‹น์‹œ Windows ํŒ€์€ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์—ˆ๋‚˜์š”?

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

์ด์ œ๋Š” ์ž์‹ ์žˆ๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ์–ด์š” ์•„์ด๋ดํ‹ฐํ‹ฐ์„œ๋ฒ„4 ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ADFS์˜ ๋ฉ‹์ง„ ๋ฌด๋ฃŒ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. Entity Framework ์ฝ”์–ด - SQL ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด OOP ์šฉ์–ด๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฟผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ฒœ๊ตญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹คํ–‰ ๊ณ„ํš์„ ๋…ผ์˜ํ•˜๋Š” ๋™์•ˆ ์ €๋Š” ์ด ์Šคํƒ์„ ๋งˆ์น˜ PostgreSQL๊ณผ Git๋งŒ ์ธ์‹ํ•˜๋Š” ์ˆ˜๋ฉ”๋ฅด ์„คํ˜• ๋ฌธ์ž์ฒ˜๋Ÿผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋‹น์‹œ ์šฐ๋ฆฌ๋Š” ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ธํ˜• ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ. ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ๊นƒ๋žฉ CI, ํƒ„๋ ฅ์žˆ๋Š”, ๊ท ํ˜• ์žกํžŒ ๊ณ ๋ถ€ํ•˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HAProxy ๋ชจ๋“  ๊ฒƒ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค ์ž ๋น„์ธ , ์ธ๋Œ€ ๊ทธ๋ผ ํŒŒ๋‚˜ ะธ ํ”„๋กœ ๋ฉ”ํ…Œ์šฐ์Šค, ์‚ฌ๋ƒฅ๊พผ, ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ฒ  ์กฐ๊ฐ ์œ„์—์„œ ํšŒ์ „ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค HPESXi ์— VM์›จ์–ด. ๋ชจ๋‘๊ฐ€ ๊ทธ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค - ์žฅ๋ฅด์˜ ๊ณ ์ „์ž…๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

์šฐ๋ฆฌ๊ฐ€ ์ด ๋ชจ๋“  ๊ฐœ์ž…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค.

๋ฌด์—‡

TFS๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ์ตœ์ข… ์ƒ์‚ฐ ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ˆ˜์ค€์—์„œ CI๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์™€ ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ธํŠธ๋ฅผ ๊ฐ–์ถ˜ ์ƒ๋‹นํžˆ ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps
์ด์ „์—๋Š” ๋‹จ๋‹จํ•œ ์ฐฝ์ด์—ˆ์Šต๋‹ˆ๋‹ค. TFS๋Š” ๋งŽ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์—ฌ๋Ÿฌ ๋นŒ๋“œ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์—์ด์ „ํŠธ์—๋Š” ์ž‘์—…์„ ๋ณ‘๋ ฌํ™”ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ 3~4๋ช…์˜ ์ž‘์—…์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš์— ๋”ฐ๋ผ TFS๋Š” ๊ฐ“ ๊ตฌ์šด ๋นŒ๋“œ๋ฅผ Windows ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ์ „๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๋‹ฌ์„ฑํ•˜๊ณ  ์‹ถ์—ˆ๋‚˜์š”?

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

๊ณ„ํš

์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„ ๋ถˆ์นด๋“œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

Client

์‚ฌ์šฉ์ž์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์œผ๋กœ SSL SHA-2 ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜์—ฌ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์œ  ์ดˆ ๋กœ๊ทธ์ธ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค.

HAProxy

๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด HAProxy๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ์Šน์ธ;
  • SSL ์ข…๋ฃŒ;
  • HTTP ์š”์ฒญ ํŠœ๋‹
  • ๋ฐฉ์†ก ์š”์ฒญ.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ์ฒด์ธ์„ ๋”ฐ๋ผ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ - ๊ถŒ์œ„ ์šฐ๋ฆฌ๋Š” ๊ณ ๊ฐ์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ์„œ๋ฅผ ์ง์ ‘ ๋ฐœ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์‚ฌํ•ญ์— ์ฃผ๋ชฉํ•˜์„ธ์š”. ์ž ์‹œ ํ›„์— ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ

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

HAProxy๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์ ˆ๊ฐ

๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํƒ์ƒ‰ํ•œ ๋‘ ๊ฐ€์ง€ ์ปจํ…์ŠคํŠธ ์™ธ์—๋„ ID ์ปจํ…์ŠคํŠธ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ด๋ดํ‹ฐํ‹ฐ์„œ๋ฒ„4 ๋กœ๊ทธ์ธ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌด๋ฃŒ์ด๋ฉฐ ๊ฐ•๋ ฅํ•œ ์•„๋‚ ๋กœ๊ทธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ADFS - Active Directory Federation Services.

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

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

์„ธ ๋ฒˆ์งธ ๋‹จ๊ณ„ - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ๋ฆฌ๋””๋ ‰์…˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๊ทธ๊ฒƒ์ด ๋‚˜์˜จ ๋งฅ๋ฝ์—.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

IdentityServer4์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. HTTP๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.. ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์•„๋ฌด๋ฆฌ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋”๋ผ๋„, ์„ค๋ช…์„œ๋ฅผ ํ†ตํ•ด ์•„๋ฌด๋ฆฌ ๊นจ๋‹ฌ์•˜๋”๋ผ๋„ HTTPS๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋œ URL์ด ํฌํ•จ๋œ ์ดˆ๊ธฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค IdentityServer๋Š” ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ HTTP๋กœ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ID ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด HAProxy๋กœ ์ „์†กํ–ˆ๊ณ , ํ—ค๋”์—์„œ HTTP ํ”„๋กœํ† ์ฝœ์„ HTTPS๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์„ ๋œ ์ ์€ ๋ฌด์—‡์ด๋ฉฐ ์ €์žฅํ•œ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?

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

์ž‘๋™ ๋ฐฉ์‹

์•ฝ์†๋Œ€๋กœ Magic Box์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Linux๋กœ ์ „ํ™˜ํ•  ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•œ ํŠน์ • ์ž‘์—…์„ ๊ณต์‹ํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

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

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

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

TFS ์„ค์ • ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” Windows ์—์ด์ „ํŠธ์—์„œ ๋ชจ๋“  Windows ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜์ง‘ํ–ˆ์ง€๋งŒ ์ด์ œ Linux ์—์ด์ „ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๊ทธ๋ฃน์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๊ณ  ์ผ๋ถ€ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ณด๊ฐ•๋˜๋ฉฐ ์ด ๋นŒ๋“œ ์—์ด์ „ํŠธ์— ์–ด๋–ค ์œ ํ˜•์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋นŒ๋“œ ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค. , ์–ด๋–ป๊ฒŒ๋“  ํŒŒ์ดํ”„๋ผ์ธ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

IdentityServer. ADFS๋Š” ์šฐ๋ฆฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ฉฐ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งˆ์ˆ  ์ƒ์ž

๋„ค ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

Linux ๋นŒ๋“œ ์—์ด์ „ํŠธ. Linux๋Š” Linux์šฉ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์„ธ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ์ž‘์—…์ž ๊ตฌ์„ฑ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ถ„์‚ฐ ์ž‘์—…์ด ์˜ˆ์ƒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • .NET Core 1.x ์„ค์น˜. ํ‘œ์ค€ ์ €์žฅ์†Œ์—์„œ ์ด๋ฏธ 1์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ 2.0.x๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์•ˆ์ • ๋ฒ„์ „์ด 1.09์˜€๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํž˜๋‚ด 2.x.

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

๊นƒ๋žฉ. ์ฃผ๋ชฉ! ์—ฌ๊ธฐ์„œ GitLab์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์šด์˜ ๋ถ€์„œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „, ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ œ์–ดํ•˜๊ณ  ๋ชจ๋“  Linux ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ ๋ ˆ์‹œํ”ผ(๋ชจ๋“  Puppet ๋งค๋‹ˆํŽ˜์ŠคํŠธ)๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ธํ˜• โ€” ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  Gitlab์—์„œ ์›ํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹ค์ด๋น™์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. RPM์œผ๋กœ์˜ DLL ์ „๋‹ฌ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

DDL์„ RPM์œผ๋กœ ์ „๋‹ฌ

.NET ๊ฐœ๋ฐœ์˜ ์ธ๊ธฐ ์Šคํƒ€๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ ํ›„ Git์— ์—…๋กœ๋“œํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ Git์€ TFS ์—”ํ„ฐํ‹ฐ, ์ฆ‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

๊ทธ ํ›„ TFS๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ๋„์ฐฉํ–ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์•ฑ์ธ๊ฐ€์š”? TFS ์„ค์ •์—๋Š” ํŠน์ • ๋นŒ๋“œ ์—์ด์ „ํŠธ์— ์–ด๋–ค ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ทธ๋Š” ์šฐ๋ฆฌ๊ฐ€ .NET Core ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ํ’€์—์„œ Linux ๋นŒ๋“œ ์—์ด์ „ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์—์ด์ „ํŠธ๋Š” ์†Œ์Šค๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒƒ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ .NET ์ €์žฅ์†Œ, npm ๋“ฑ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ›„์† ํŒจํ‚ค์ง•์„ ํ•œ ํ›„ RPM ํŒจํ‚ค์ง€๋ฅผ RPM ์ €์žฅ์†Œ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

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

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

๋ง๋กœ ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋นŒ๋“œ ์—์ด์ „ํŠธ ์ž์ฒด ๋‚ด๋ถ€์—์„œ๋Š” ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ• ๊นŒ์š”?

ํŒจํ‚ค์ง• DLL RPM

TFS๋กœ๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ ์†Œ์Šค ๋ฐ ๋นŒ๋“œ ์ž‘์—…์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์—์ด์ „ํŠธ ์†Œ์Šค์—์„œ ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.. ์กฐ๋ฆฝ๋œ ํ”„๋กœ์ ํŠธ๋Š” ์„ธํŠธ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. DLL ํŒŒ์ผ, ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด zip ์•„์นด์ด๋ธŒ๋กœ ํŒจํ‚ค์ง€๋ฉ๋‹ˆ๋‹ค.

ZIP ์•„์นด์ด๋ธŒ๋Š” ํ๊ธฐ๋ฉ๋‹ˆ๋‹ค. RPM ํŒจํ‚ค์ง€ ๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ Bash ์Šคํฌ๋ฆฝํŠธ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋นŒ๋“œ ๋ฒ„์ „, ํ”„๋กœ์ ํŠธ ๋ฒ„์ „, ๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ  RPM-build๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค์Œ ์œ„์น˜์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ €์žฅ์†Œ, ๋นŒ๋“œ ์—์ด์ „ํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋นŒ๋“œ ์—์ด์ „ํŠธ์—์„œ RPM ์ €์žฅ์†Œ์˜ ์„œ๋ฒ„๋กœ JSON ์š”์ฒญ์ด ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ ๋ฐ ๋นŒ๋“œ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์•ž์„œ ์ด์•ผ๊ธฐํ•œ Webhook์€ ๋นŒ๋“œ ์—์ด์ „ํŠธ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ๋ฐ”๋กœ ์ด ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ƒˆ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

RPM ์ €์žฅ์†Œ์— ์ด ํŠน์ • ํŒจํ‚ค์ง€ ์ „๋‹ฌ ์ฒด๊ณ„๊ฐ€ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์–ด์…ˆ๋ธ”๋œ ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅ์†Œ๋กœ ์ฆ‰์‹œ ๋ณด๋‚ผ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‚ฌ์‹ค ์ด๋Š” ์•ˆ์ „์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์ด๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ๋žŒ์ด ๋ชจ๋“  Linux ์‹œ์Šคํ…œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์— RPM ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ

๊ฐœ๋ฐœํŒ€๊ณผ์˜ ํ˜‘์˜์—์„œ ๊ทธ ์‚ฌ๋žŒ๋“ค์€ MS SQL์— ๋” ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์ง€๋งŒ Windows๊ฐ€ ์•„๋‹Œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋ฏธ PostgreSQL์„ ์˜จ ํž˜์„ ๋‹คํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์œ ๋ฃŒ ๋ชจ๋“  ๊ฒƒ์„ ํฌ๊ธฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋„ PostgreSQL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

์ด ๋ถ€๋ถ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Flyway์™€ Entity Framework Core ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฃ„์ˆ˜ ํŒ€์€

์ด๋™ ๊ฒฝ๋กœ๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ฐ‘๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์–ด - ์ด๊ฒƒ์€ ์ƒ๋‹นํ•œ ๋‹จ์ ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ ์ธก๋ฉด์—์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ Entity Framework Core์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์ตœ์šฐ์„ ์œผ๋กœ ์‚ผ์•˜๊ณ  ์ฃผ์š” ๊ธฐ์ค€์€ Windows ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

Entity Framework Core์—๋Š” ๋งˆ์ด๋„ˆ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•œ ๊ฒฝ์šฐ ์ตœ์ ์ด ์•„๋‹Œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค., ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ์†Œ๊ฐ€ ์ƒ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ณ ๋ถ€ํ•˜ ์„œ๋น„์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๋ฐฑ RPS ๋‹จ์œ„๋กœ ๋ถ€ํ•˜๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์ด๋Ÿฌํ•œ ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ž˜์˜ ์šฐ๋ฆฌ์—๊ฒŒ ์œ„์ž„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ

Entity Framework ์ฝ”์–ด ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.๋ฐ ํ”Œ๋ผ์ด์›จ์ด ๊ธฐ์กด CI์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉ. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค :)

๋กค์—… ์ ˆ์ฐจ

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

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

TFS ๋ฌธ์ œ

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

์ฃผ์š” ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐ 12~15๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊ธด ์‹œ๊ฐ„์ด๋ฏ€๋กœ ๊ทธ๋ ‡๊ฒŒ ์‚ด ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ถ„์„์— ๋”ฐ๋ฅด๋ฉด I/O๊ฐ€ ํฌ๊ฒŒ ๊ฐ์†Œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ ์ด๋Š” ์–ด๋ ˆ์ด์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

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

๊ฒฐ์ •

  • AV ์˜ˆ์™ธ์˜ ์†Œ์Šค.
  • ์ธ๋ฑ์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋™ npm ci.

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

๊ตฌ์„ฑ

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

Linux์˜ .NET Core, ๋ง์„ ํƒ„ DevOps

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค NuGet, ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ๋น„ํ•ด ์บ์‹ฑ์ด ๋” ์ข‹๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

๋นŒ๋“œ ์—์ด์ „ํŠธ๋ฅผ ์ตœ์ ํ™”ํ•œ ํ›„ ํ‰๊ท  ๋นŒ๋“œ ์‹œ๊ฐ„์ด 12๋ถ„์—์„œ 7๋ถ„์œผ๋กœ ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Windows์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ์—์„œ Linux๋กœ ์ „ํ™˜ํ•œ ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ์•ฝ $10๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ผ์ด์„ผ์Šค ๋น„์šฉ๋งŒ ์ ˆ์•ฝํ•œ ๊ธˆ์•ก์ด๊ณ  ์ฝ˜ํ…์ธ ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๊ทธ ์ด์ƒ์ž…๋‹ˆ๋‹ค.

๊ณ„ํš

๋‹ค์Œ ๋ถ„๊ธฐ์—๋Š” ์ฝ”๋“œ ์ „๋‹ฌ ์ตœ์ ํ™” ์ž‘์—…์„ ๊ณ„ํšํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ๋นŒ๋“œ๋œ Docker ์ด๋ฏธ์ง€๋กœ ์ „ํ™˜. TFS๋Š” Docker ์ด๋ฏธ์ง€์˜ ํŠธ๋ฆฌ๊ฑฐ ๊ธฐ๋ฐ˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํฌํ•จ๋œ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋™์ผํ•œ ํŠธ๋ฆฌ๊ฑฐ์— ๋Œ€ํ•ด ์ด ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์ž ๊ธˆ.json. ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ตฌ์„ฑ์ด ์–ด๋–ป๊ฒŒ๋“  ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์กฐ๋ฆฝ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ทธ๋ ‡์ง€ ์•Š์ง€๋งŒ, ์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๊ณ  ์˜ค๋žซ๋™์•ˆ ํ”„๋กœ๋•์…˜ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ด ์˜จ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜ํ•  ์˜ˆ์ •์ด๋‹ค.

๊ฐœ์š”

๋‚˜๋Š” ๋ชจ๋‘์—๊ฒŒ ์œˆ๋„์šฐ๋ฅผ ๋ฒ„๋ฆฌ๋ผ๊ณ  ๊ถŒ์œ ํ•˜์ง€๋งŒ, ์š”๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์˜คํ”ˆ์†Œ์Šค ์†”๋ฃจ์…˜์ด ๋ฆฌ๋ˆ…์Šค ์Šคํƒ. ๊ดœ์ฐฎ์œผ์„ธ์š” ์ž์›์„ ์ ˆ์•ฝํ•˜๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋ฏธ๋ž˜๋Š” ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฐ–์ถ˜ Linux ๊ธฐ๋ฐ˜ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

Alexander Sinchinov์˜ ์—ฐ์‚ฌ ํ”„๋กœํ•„ GitHub์—์„œ.

DevOps ํšŒ์˜ ์ „๋ฌธ๊ฐ€์— ์˜ํ•œ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์šด์˜ ํ”„๋กœ์„ธ์Šค์˜ ํ†ตํ•ฉ์— ๊ด€ํ•œ ์ปจํผ๋Ÿฐ์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•Œ๋ ‰์‚ฐ๋”๊ฐ€ ๋งํ•œ ํ”„๋กœ์ ํŠธ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ตฌํ˜„๋˜์–ด ์ž‘๋™ ์ค‘์ด๋ฉฐ ๊ณต์—ฐ ๋‹น์ผ ๋‘ ๋ฒˆ์˜ ์„ฑ๊ณต์ ์ธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ~์— RIT++์˜ DevOps ์ปจํผ๋Ÿฐ์Šค 27์›” 28์ผ๊ณผ XNUMX์ผ์—๋Š” ์‹ค๋ฌด์ž๋“ค์—๊ฒŒ์„œ ๋น„์Šทํ•œ ์‚ฌ๋ก€๊ฐ€ ๋” ๋งŽ์ด ๋‚˜์˜ฌ ์˜ˆ์ •์ด๋‹ค. ๋งˆ์ง€๋ง‰ ๊ฐ์ฐจ์— ํƒ‘์Šนํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ ˆํฌํŠธ๋ฅผ ์ œ์ถœํ•˜๋‹ค ์•„๋‹ˆ๋ฉด ์‹œ๊ฐ„์„ ๊ฐ–๊ณ  ์˜ˆ์•ฝํ•˜๋‹ค ํ‹ฐ์ผ“. Skolkovo์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”!

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€