ViennaNET: ๋ฐฑ์—”๋“œ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ!

์šฐ๋ฆฌ๋Š” Raiffeisenbank์˜ .NET ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์ด๋ฉฐ ๋‹จ์ผ ์—์ฝ”์‹œ์Šคํ…œ์œผ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ .NET Core ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค!

ViennaNET: ๋ฐฑ์—”๋“œ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ

์—ญ์‚ฌ์˜ ๋น„ํŠธ

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

์‹œ๊ฐ„์ด ํ๋ฅด๋ฉด์„œ ํ”„๋กœ์ ํŠธ๋Š” ์ ์ฐจ ๋‹จํŽธํ™”๋˜์—ˆ๊ณ , ์ตœ์‹  JS ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ์ธก ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” WCF/SOAP์—์„œ REST/HTTP๋กœ ์ด๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— AspNet WebApi ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. .Net Framework 4.5์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์€ ์šฐ๋ฆฌ ๊ฑด์ถ•๊ฐ€๊ฐ€ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ๊ฑฐ์˜ ๋ฌด๋ฆŽ์„ ๊ฟ‡๊ณ  ๋งŒ๋“  ๊ฒƒ์ด์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์ฆ(NTLM)์ด ํฌํ•จ๋œ Program.cs์˜ ์„ธ ์ค„๋กœ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Logging, Swagger, Castle Windsor ๊ธฐ๋ฐ˜์˜ IoC/DI, ๋‹ค์–‘ํ•œ ํ—ค๋”๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ๊ฑธ์ณ ์—”๋“œํˆฌ์—”๋“œ ๋กœ๊น…์„ ์ œ๊ณตํ•˜๋Š” ๋งž์ถคํ˜• HTTP ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์€ ์„œ๋น„์Šค ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ถ”๊ฐ€๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋„์ปค์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์‹œ๋Œ€

Docker์™€ Kubernetes์˜ ๋ฌผ๊ฒฐ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค๊ฐ€์˜จ ๋•Œ๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ๋ฉด๋ฐ€ํžˆ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ด๋Š” .Net Core์—์„œ ๊ธฐ์ˆ ์„ ๋”ฐ๋ผ ๋” ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ์ธํ”„๋ผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‹ค์งˆ์ ์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—†์ด .Net Framework์—์„œ .Net Standard ๋ฐ .Net Core๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์—ˆ์œผ๋ฉฐ ์ผ๋ถ€๋Š” ์•ฝ๊ฐ„ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์—‡๋ณด๋‹ค๋„ AspNet Core์—์„œ ์„œ๋น„์Šค ์‹œ์ž‘๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์žฌ์ž‘์—…ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ทธ๋ฆฌ๊ณ  ์™œ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?

์šฐ๋ฆฌ๋Š” ์ „๋ฌธ์„ฑ์˜ ์„ฑ์ˆ™๋„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๊ณ ํ’ˆ์งˆ์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์€ํ–‰ ์™ธ๋ถ€์˜ ์‚ฌ๋žŒ๋„ ์Šค์Šค๋กœ ๋ญ”๊ฐ€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์—…๊ณ„์—์„œ .NET์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ DDD ์ž‘์—…์„ ์œ„ํ•œ ์‚ฌ๋ก€ ๊ฐœ๋ฐœ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ธ์ˆ˜ํ•˜๊ณ  ์‹ถ์–ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋น„์—”๋‚˜๋„ท์€

์ด์ œ ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค..

ViennaNET.WebApi.*

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ๋Š” CompanyHostBuilder ์„œ๋น„์Šค์šฉ ๋นŒ๋” ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๋Š” "๋ฃจํŠธ" ViennaNET.WebApi์™€ ๊ตฌ์„ฑ์ž ์„ธํŠธ ViennaNET.WebApi.Configurators.*๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค. ๊ตฌ์„ฑ์ž ์ค‘์—์„œ ๋กœ๊น…, ์ง„๋‹จ, ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•, Swagger ๋“ฑ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ViennaNET.WebApi.Runners.*์—๋Š” ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ์„œ๋น„์Šค ๋นŒ๋”๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ์ž๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ์ƒˆ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์„œ๋น„์Šค ๋นŒ๋”์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

ViennaNET.Mediator.*

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

ViennaNET.๊ฒ€์ฆ

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

ViennaNET.Redis

Redis๋ฅผ ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ž˜ํผ๊ฐ€ ํฌํ•จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ViennaNET.์‚ฌ์–‘

์‚ฌ์–‘ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์šฐ๋ฆฌ ์„ธํŠธ์— ์žˆ๋Š” ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š” GitHub ์ €์žฅ์†Œ์—์„œ. ์šฐ๋ฆฌ๋Š” ๊ณง ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ OpenSource๋กœ ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ ๊ด€์‹ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ๊ณผ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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