Creative Developer

ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋…ํ›„๊ฐ

์—ฐ๊ตฌ์ž๋“ค์€ ์ฐฝ์˜์„ฑ๊ณผ ์‚ฌ๋ง๋ฅ  ์‚ฌ์ด์˜ ๋ณ‘์ ์ธ ์—ฐ๊ด€์„ฑ์œผ๋กœ ์ธํ•ด ๊ณตํฌ ๊ด€๋ฆฌ ์ด๋ก (terror management theory)์ด๋ผ๊ณ  ํ•˜๋Š”, ๋“ฃ๊ธฐ๋งŒ ํ•ด๋„ ๋ฌด์„œ์šด ์ด๋ก ์„ ๊นŠ์ด ์—ฐ๊ตฌํ•˜๋ ค๋Š” ๋™๊ธฐ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—์„œ๋Š” ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ์— ์žˆ์„ ๋•Œ ์ฐฝ์˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚˜๊ฐ„๋‹ค๊ณ  ํ•œ๋‹ค.

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

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

์›์ˆญ์ด ์„ฌ์˜ ๋น„๋ฐ€ - ๋‚˜๋ฌด์œ„ํ‚ค (namu.wiki) ์„ ๊ฐœ๋ฐœํ•œ ๊ฐœ๋ฐœํŒ€์˜ ์‚ฌ๋ก€๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ๋„ ํ•˜๊ณ , PICO-8 Fantasy Console (lexaloffle.com) ๊ฐ™์€ lua ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ด PICO-8์€ ์ดˆ์ดˆ์ดˆ๊ฒฝ๋Ÿ‰ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋กœ์„œ, ๋ธŒ๋ผ์šฐ์ €์—์„œ๊นŒ์ง€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ๋ฃŒ์ด๊ณ , ์˜์–ด ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ’๋ถ€ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด .NET ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ฐฝ์˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€.

์ฐฝ์˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋ž€ ์—๋””์Šจ ๊ฐ™์€ ์ฒœ์žฌ๋ฅผ ์ผ์ปซ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌํšŒ์ ์œผ๋กœ ์ธ์ •๋ฐ›์•˜์„ ๋•Œ ์ฐฝ์˜์ ์ธ ํ™œ๋™์œผ๋กœ ์ธ์ •๋ฐ›๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

IT ์†Œํ”„ํŠธ์›จ์–ด ์„ธ์ƒ์—์„œ ํ”ํ•œ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜์ด์ง€๋งŒ, ๋‚ด๊ฐ€ ์†ํ•œ ์ง‘๋‹จ์—์„œ๋Š” ์ตœ์ดˆ์˜ ๋„์ž…์ด์—ˆ๊ณ  wow point ๋ผ๊ณ  ์ƒ๊ฐ๋  ์ˆ˜ ์žˆ๋˜ ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด, ๊ทธ ์ง‘๋‹จ์—์„œ๋Š” ๋‚ด๊ฐ€ ์ฐฝ์˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‚˜๋Š” WPF์˜ MVVM ํŒจํ„ด ์—ญ์‹œ ์ด๋Ÿฐ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

WPF๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ MVVM์— ๋Œ€ํ•œ ์ž๋ฃŒ๋ฅผ ๋ˆ„๊ตฌ๋‚˜ ์ ‘ํ•˜๊ณ , MS์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ๊ทธ๊ฑธ ํ–ˆ์„ ๋•Œ ์ข‹๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ˆ„๊ตฌ๋‚˜ ์•Œ์ง€๋งŒ ์‰ฝ๊ฒŒ ์ ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.

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

๋‚˜๋Š” ์ดˆ๋ณด๋“ค์—๊ฒŒ MVVM์„ ํ›ˆ๋ จํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š” Zero Code Behind ๋ฅผ ๊ถŒ์žฅํ•˜๋ผ๊ณ  ํ•œ๋‹ค. MVVM์„ ์ˆ˜ํ–‰ํ•ด์„œ ๋„๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์ด๋ฏธ ๋‚˜์™€์žˆ๋‹ค.

๋ฐ”๋กœ ์œ ์ง€๋ณด์ˆ˜์˜ ํšจ์œจํ™”๋ฅผ ์œ„ํ•ด์„œ๋‹ค.

MVVM์€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋นผ๋ฉด ์‹œ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๋ฒ•์ด OOP์˜ ํ™•์žฅ ๊ฐœ๋…์ด๋ผ๊ณ  ํ•  ์ •๋„๋กœ ๋งŽ์ด ๋‹ฎ์•„์žˆ๊ณ , ์บก์Šํ™”๋กœ์„œ ๊ทธ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

Code Behind์—์„œ Event๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ Converter, Behavior, Attached Property ๊ฐ™์€ ๊ฐœ๋…๋“ค์ด ๊ทธ๋Ÿฌํ•  ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ MVVM์„ ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ํ•˜๋ฉด ์ข‹์€ ๊ฐœ๋…๋“ค์€ IoC Container, View Locator, ViewModel Factory Method, Service ๊ฐ™์€ ๊ฐœ๋…๋“ค์ผํ…๋ฐ, ์‚ฌ์‹ค Windows Application๋งŒ ๊ฐœ๋ฐœํ•ด์˜ค๊ณ  Web ๊ฐœ๋ฐœ์„ ์ „ํ˜€ ํ•ด๋ณด์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ด ๊ฐœ๋…๋“ค์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์™œ ํ•„์š”ํ•œ์ง€๋„ ์•Œ ์ˆ˜ ์—†๋‹ค.

๋‚˜๋„ Web๊ฐœ๋ฐœ์€ ์•ˆํ•ด๋ดค์œผ๋‚˜, Web Service๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” Container๋“ค์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ Web์˜ ๋ฐฉ๋ฒ•๋ก ๋“ค์„ ๋งŽ์ด ๋”ฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ–ˆ๋‹ค.

Windows Application์€ ๋‚ด PC์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— HDD, SSD, CPU, RAM์ด ๋ชจ๋‘ ๋‚˜์˜ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ Web Application์€ Server๋ผ๋Š” ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ์—์„œ ๋‹ค์ˆ˜์˜ ์œ ์ €๊ฐ€ ํ™œ๋™ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์Šคํฌํ†ฑ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— ๋น„ํ•ด ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ์ด์—ˆ๊ณ , ๊ทธ ๋•Œ๋ฌธ์— ๋ฌธ์ œํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ธ, Container Orchestration ๊ฐ™์€ Scaling ๊ธฐ๋ฒ•๋“ค์ด ๋“ฑ์žฅํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” Zero-downtime Deployment ์—ญ์‹œ ๊ฐ™์€ ๋งฅ๋ฝ์—์„œ ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ User Experience๋ฅผ ๋‚˜์˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ๊ธฐ๋ฒ•๋“ค์ผ ๊ฒƒ์ด๋‹ค.

Go ๊ฐ™์€ ์–ธ์–ด์—์„œ๋„ Green Thread ๊ฐœ๋…์œผ๋กœ CPU Core๊ฐ€ ์ œํ•œํ•œ ํ™˜๊ฒฝ์—์„œ๋„ Multi Threading(Go-Routine)์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐ€๋Šฅ์ผ€ํ•˜๋Š” ๊ธฐ๋ฒ•๋„ ๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ์ผ๋ถ€๋Ÿฌ ๋žŒ๋‹ค์‹๊ฐ™์€ ์š”์ฆ˜์€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…๋“ค์„ ๋นผ๊ณ  ์ ์€ ํ‚ค์›Œ๋“œ๋กœ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•œ๋‹ค๋Š” ์ปจ์…‰์ด ๊ทน๋„๋กœ ๊ฐ€๋ณ๊ณ  ํšจ์œจํ™” ๋œ ์–ธ์–ด๋ฅผ ๋งŒ๋“  ๊ฒƒ ๊ฐ™๋‹ค. (๋‚˜์˜ Go์— ๋Œ€ํ•œ ์ง€๋‚˜์นœ ํ™˜์ƒ์ผ์ˆ˜๋„โ€ฆ์‹ค์ œ๋กœ๋Š” Gohper๋“ค๋„ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ• ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.)

๋‹ค์‹œ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€์„œ WPF๋ฅผ Zero Code Behind๋กœ ๊ฐœ๋ฐœํ•ด๋ณธ๋‹ค๋Š” ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ์€ ํ›ˆ๋ จํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ฐฝ์˜์ ์ธ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ ธ์™€ ์ค„ ๊ฒƒ์ด๊ณ , ์‚ฌ์‹ค ๊ทธ ์ฐฝ์˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ๊ฐœ๋ฐœ์—…๊ณ„์—์„œ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ด๋ก ์„ ๋ฐ›์•„๋“ค์ธ ๊ฐœ๋ฐœ์ž๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ IT ์†Œํ”„ํŠธ์›จ์–ด ์—…๊ณ„์—์„œ ํ†ต์šฉ๋˜๋Š” ๋‹จ์–ด๋“ค์ผ ๊ฒƒ์ด๋‹ค. ๋งˆ์น˜ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์˜ Ubiquitous Language ์ฒ˜๋Ÿผ.

๊ทธ๋Ÿฐ ์ผ๋ฐ˜์ ์ธ ๋‹จ์–ด๋“ค์ด ์Œ“์ด๊ณ  ์Œ“์—ฌ์„œ Knowledge-base๊ฐ€ ๋  ๊ฒƒ์ด๊ณ  ํŠน์ • ๋ถ„์•ผ์— ์ฐฝ์˜์ ์ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด ์ฝฉ์‹ฌ์€๋ฐ ์ฝฉ๋‚˜๊ณ  ํŒฅ์‹ฌ์€๋ฐ ํŒฅ๋‚˜๋“ฏ, ๊ทธ๋Ÿฐ ๊ธฐ๋ฐ˜ ์ง€์‹๋“ค์ด ๋งŽ์•„์•ผ ์ฐฝ์˜์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ์ƒ˜ ์†Ÿ์„ ๊ฒƒ์ด๊ณ  ๋” ๋†’์€ ๋ ˆ๋ฒจ๋กœ ๋„์•ฝํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์•„์ง ๋ฐ˜ ๋ฐ–์— ๋ชป๋ดค์ง€๋งŒ ์ด์ „์— ๋ณธ ๊ฒƒ๊ณผ ์ดํ›„์— ๋ณผ ๊ฒƒ๋“ค๋„ Slog๋กœ ์ €์žฅํ•ด์•ผ๊ฒ ๋‹ค.

9๊ฐœ์˜ ์ข‹์•„์š”

@Vincent ์ข‹์€ ๊ธ€ ์ž‘์„ฑํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!

2๊ฐœ์˜ ์ข‹์•„์š”