DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•

"๋‚˜๋Š” ๋‚ด๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ์„ ์•ˆ๋‹ค" ์†Œํฌ๋ผํ…Œ์Šค

๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•ด: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์นจ์„ ๋ฑ‰๊ณ  ๊ทธ๋“ค์˜ ๊ฒŒ์ž„์„ ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” IT ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด!

๋ฌด์—‡์— ๋Œ€ํ•ด: ํ•„์š”ํ•œ ๊ฒฝ์šฐ C/C++๋กœ ๊ฒŒ์ž„ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•!

์ด๊ฒƒ์„ ์ฝ์–ด์•ผ ํ•˜๋Š” ์ด์œ : ์•ฑ ๊ฐœ๋ฐœ์€ ์ œ ์ „๋ฌธ ๋ถ„์•ผ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋งค์ฃผ ์ฝ”๋”ฉ์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒŒ์ž„์„ ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—!

์•ˆ๋…• ๋‚ด ์ด๋ฆ„์€ ์•ˆ๋“œ๋ ˆ์ด ๊ทธ๋žœํ‚จ, ์ €๋Š” Luxoft์˜ DevOps์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์€ ์ œ ์ „๋ฌธ ๋ถ„์•ผ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋งค์ฃผ ์ฝ”๋”ฉ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒŒ์ž„์„ ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—!

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

๋™์‹œ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๊ฒŒ์ž„์„ ํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•ด ๋‚ธ ์œ„์น˜, ํ”Œ๋กฏ, ์บ๋ฆญํ„ฐ, ๊ฒŒ์ž„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๋Š์ž„์—†์ด ์ œํ•œ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค...

... ๋‚˜์—๊ฒŒ๋งŒ ์ข…์†๋˜๋Š” ์ž์‹ ์˜ ์„ธ๊ณ„๋ฅผ ๋งŒ๋“ค ๋•Œ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์„ฑ๋ถ€, ์„ฑ์ž, ์„ฑ๋ น์ธ ์„ธ์ƒ!

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์ง„์‹ฌ์œผ๋กœ ์ž์‹ ์˜ ๊ฒŒ์ž„ ์—”์ง„๊ณผ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ๋ˆˆ์„ ๋œจ๊ณ , ์ฐฝ๋ฌธ์„ ๋‹ฆ๊ณ , ์˜ค๋‘๋ง‰์„ ํŽŒํ•‘ํ•˜์—ฌ ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•˜๊ณ  ์™„์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง„์‹ฌ์œผ๋กœ ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” C / C ++๋กœ ์ž‘์€ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•, ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด์—‡์ด๋ฉฐ ๋ฐ”์œ ํ™˜๊ฒฝ์—์„œ ์ทจ๋ฏธ ์‹œ๊ฐ„์„ ์ฐพ๋Š” ๊ณณ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃผ๊ด€์ ์ด๋ฉฐ ๊ฐœ๋ณ„ ์‹œ์ž‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ง€์™€ ๋ฏฟ์Œ์— ๊ด€ํ•œ ์ž๋ฃŒ, ํ˜„์žฌ ์„ธ๊ณ„์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ฐœ์ธ์ ์ธ ๊ทธ๋ฆผ์— ๊ด€ํ•œ ์ž๋ฃŒ. ์ฆ‰, "ํ–‰์ •๋ถ€๋Š” ๊ฐœ์ธ์˜ ๋‘๋‡Œ๋ฅผ ์ฑ…์ž„์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค!"

์—ฐ์Šต

"์‹ค์ฒœ ์—†๋Š” ์ง€์‹์€ ์“ธ๋ชจ๊ฐ€ ์—†๊ณ , ์ง€์‹ ์—†๋Š” ์‹ค์ฒœ์€ ์œ„ํ—˜ํ•˜๋‹ค." ๊ณต์ž

๋‚ด ๋…ธํŠธ๋Š” ๋‚ด ์ธ์ƒ!


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

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๋‚ด (์ด๋ฏธ ์ฑ„์›Œ์ง„) ๋…ธํŠธ๋ถ. ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ผ์ƒ์ ์ธ ์ž‘์—…, ์•„์ด๋””์–ด, ๊ทธ๋ฆผ, ๋‹ค์ด์–ด๊ทธ๋žจ, ์†”๋ฃจ์…˜, ๋ธ”๋ž™ ๋ถ€๊ธฐ, ์ฝ”๋“œ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ์ €๋Š” XNUMX๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค(์–ด๋–ค ์ œํ’ˆ์ด๋“  ์ƒ๋Œ€์ ์œผ๋กœ ๋์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— "์ตœ์ข…์„ฑ"์— ๋Œ€ํ•œ ์ดํ•ด์— ์žˆ์Šต๋‹ˆ๋‹ค).

  • ํ”„๋กœ์ ํŠธ 0 : ์ด๊ฒƒ์€ Unity ๊ฒŒ์ž„ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ C#์œผ๋กœ ์ž‘์„ฑ๋œ Architect Demo 3D ์žฅ๋ฉด์ž…๋‹ˆ๋‹ค. macOS ๋ฐ Windows ํ”Œ๋žซํผ์šฉ.
  • ๊ฒŒ์ž„ 1 : Windows์šฉ ์ฝ˜์†” ๊ฒŒ์ž„ Simple Snake(๋ชจ๋‘์—๊ฒŒ "Snake"๋กœ ์•Œ๋ ค์ง). C๋กœ ์ž‘์„ฑ.
  • ๊ฒŒ์ž„ 2 : ์ฝ˜์†” ๊ฒŒ์ž„ Crazy Tanks(๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ "Tanks"๋กœ ์•Œ๋ ค์ง)๋Š” ์ด๋ฏธ C++(ํด๋ž˜์Šค ์‚ฌ์šฉ) ๋ฐ Windows์—์„œ๋„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ 0 ๊ฑด์ถ•๊ฐ€ ๋ฐ๋ชจ

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
3D ์žฅ๋ฉด ์„ค๊ณ„์ž ๋ฐ๋ชจ

์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ๋Š” Unity ๊ฒŒ์ž„ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ C/C++๊ฐ€ ์•„๋‹Œ C#์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์—”์ง„์€ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋งŽ์ด ์š”๊ตฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ธ๋ฆฌ์–ผ ์—”์ง„, ๋˜ํ•œ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ์ด ๋” ์‰ฌ์›Œ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์—”์ง„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ €์—๊ฒŒ ์žˆ์–ด Unity์˜ ๋ชฉํ‘œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ์ข…์˜ ์บ๋ฆญํ„ฐ๋กœ 3D ์žฅ๋ฉด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ, ๋˜๋Š” ์˜คํžˆ๋ ค ๊ทธ๋…€(๋‚˜๋Š” ๋‚ด๊ฐ€ ์‚ฌ๋ž‘์— ๋น ์ง„ ์†Œ๋…€๋ฅผ ๋ชจ๋ธ๋กœ ์‚ผ์•˜๋‹ค =)๋Š” ์›€์ง์ด๊ณ  ์™ธ๋ถ€ ์„ธ๊ณ„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. Unity๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Architect Demo ํ”„๋กœ์ ํŠธ๊ฐ€ ํƒ„์ƒํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์ด๋ฆ„์€ ๊ฑฐ์˜ ํ—›์†Œ๋ฆฌ์—์„œ ๋ฐœ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ชจ๋ธ๋ง, ์• ๋‹ˆ๋ฉ”์ด์…˜, ํ…์Šค์ฒ˜๋ง์€ ๋งค์ผ ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋‘ ๋‹ฌ ์ •๋„ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

์—์„œ 3D ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ YouTube์˜ ์ž์Šต์„œ ๋น„๋””์˜ค๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฏน์„œ๊ธฐ. Blender๋Š” ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” 3D ๋ชจ๋ธ๋ง(๋ฐ ๊ทธ ์ด์ƒ)์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋ฌด๋ฃŒ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ์ถฉ๊ฒฉ์ด ์ €๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ... ๋ชจ๋ธ๋ง, ์• ๋‹ˆ๋ฉ”์ด์…˜, ํ…์Šค์ฒ˜๋ง์€ ์ฑ…์„ ์“ธ ์ˆ˜์žˆ๋Š” ๋ณ„๋„์˜ ๊ฑฐ๋Œ€ํ•œ ์ฃผ์ œ๋ผ๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠนํžˆ ์บ๋ฆญํ„ฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์†๊ฐ€๋ฝ, ์น˜์•„, ๋ˆˆ ๋ฐ ๊ธฐํƒ€ ์‹ ์ฒด ๋ถ€์œ„๋ฅผ ๋ชจ๋ธ๋งํ•˜๋ ค๋ฉด ํ•ด๋ถ€ํ•™ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ผ๊ตด ๊ทผ์œก์€ ์–ด๋–ป๊ฒŒ ๋ฐฐ์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ ํŒ”, ๋‹ค๋ฆฌ, ์†๊ฐ€๋ฝ, ๋„ˆํด์— ๋ผˆ๋ฅผ "์‚ฝ์ž…"ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค!

์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์ด๋„๋ก ์‡„๊ณจ, ์ถ”๊ฐ€ ๋ผˆ ๋ ˆ๋ฒ„๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๋‚˜๋ฉด 30์ดˆ ๋ถ„๋Ÿ‰์˜ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ํ™” ์ œ์ž‘์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ํฐ ์ผ์„ ํ•˜๋Š”์ง€ ๊นจ๋‹ซ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 3D ์˜ํ™”๋Š” ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทน์žฅ์—์„œ ๋‚˜์™€ ์ด๋ ‡๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค. โ€œ๋”ฐ, ์—‰๋šฑํ•œ ๋งŒํ™” / ์˜ํ™”! ๊ทธ๋“ค์€ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐโ€ฆ โ€๋ฐ”๋ณด๋“ค!

๊ทธ๋ฆฌ๊ณ  ์ด ํ”„๋กœ์ ํŠธ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ํ•œ ๊ฐ€์ง€ ๋”. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ €์—๊ฒŒ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์€ ์ˆ˜ํ•™์  ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ๋ฉด์„ ์‹คํ–‰ํ•˜๋ฉด(ํ”„๋กœ์ ํŠธ ์„ค๋ช…์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งํฌ) ์นด๋ฉ”๋ผ๊ฐ€ ๊ตฌํ˜•์˜ ์†Œ๋…€ ์บ๋ฆญํ„ฐ ์ฃผ์œ„๋ฅผ ํšŒ์ „ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์นด๋ฉ”๋ผ ํšŒ์ „์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋ ค๋ฉด ๋จผ์ € ์›(2D)์—์„œ ์œ„์น˜ ์ง€์ ์˜ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ๊ตฌ(3D)์—์„œ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›ƒ๊ธด๊ฑด ๋‚ด๊ฐ€ ํ•™๊ต์—์„œ ์ˆ˜ํ•™์„ ์‹ซ์–ดํ•ด์„œ ๋งˆ์ด๋„ˆ์Šค๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์•„๋งˆ๋„ ํ•™๊ต์—์„œ ์ด ์ˆ˜ํ•™์ด ์–ด๋–ป๊ฒŒ ์‚ถ์— ์ ์šฉ๋˜๋Š”์ง€ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชฉํ‘œ, ๊ฟˆ์— ์ง‘์ฐฉํ•˜๋ฉด ๋งˆ์Œ์ด ๋ง‘์•„์ง€๊ณ  ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๋ณต์žกํ•œ ์ž‘์—…์„ ํฅ๋ฏธ์ง„์ง„ํ•œ ๋ชจํ—˜์œผ๋กœ ์ธ์‹ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค: "๊ธ€์Ž„, ์™œ *์‚ฌ๋ž‘ํ•˜๋Š”* ์ˆ˜ํ•™์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ณต์‹์ด ์–ด๋””์— ๊ธฐ์šธ์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?"

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
์›๊ณผ ๊ตฌ์˜ ์  ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์‹ ๊ณ„์‚ฐ(๋‚ด ๊ณต์ฑ…์—์„œ)

๊ฒŒ์ž„ 1

  • ํ”Œ๋žซํผ : Windows(Windows 7, 10์—์„œ ํ…Œ์ŠคํŠธ)
  • ์–ธ์–ด : ์ˆœ์ˆ˜ํ•œ C๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ์—”์ง„: ์œˆ๋„์šฐ ์ฝ˜์†”
  • ์˜๊ฐ: ์ž๋น„๋“œx9
  • ์ €์žฅ์†Œ: GitHub์˜

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๊ฐ„๋‹จํ•œ ๋ฑ€ ๊ฒŒ์ž„

3D ์žฅ๋ฉด์€ ๊ฒŒ์ž„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ 3D ๊ฐœ์ฒด(ํŠนํžˆ ์บ๋ฆญํ„ฐ)๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™”ํ•˜๋Š” ์ž‘์—…์€ ๊ธธ๊ณ  ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Unity๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๋‹ค ๋ณด๋‹ˆ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„์˜ ๊ตฌ์กฐ ์ž์ฒด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด์ง€๋งŒ ๋™์‹œ์— ๊ธ€๋กœ๋ฒŒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅธ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋งž์Šต๋‹ˆ๋‹ค, ์ฝ˜์†”๊ณผ 2D์ž…๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” ์ฝ˜์†”๊ณผ ๊ธฐํ˜ธ๊นŒ์ง€. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ €๋Š” ์ธํ„ฐ๋„ท์—์„œ ์˜๊ฐ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ ์ €๋Š” ์ธํ„ฐ๋„ท์ด XNUMX์„ธ๊ธฐ์˜ ๊ฐ€์žฅ ํ˜์‹ ์ ์ด๊ณ  ์œ„ํ—˜ํ•œ ๋ฐœ๋ช…ํ’ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ์ฝ˜์†” ํ…ŒํŠธ๋ฆฌ์Šค๋ฅผ ๋งŒ๋“  ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜์ƒ์„ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ์˜ ๊ฒŒ์ž„์ฒ˜๋Ÿผ ๊ทธ๋Š” "๋ฑ€"์„ ์ž๋ฅด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋””์˜ค์—์„œ ๊ฒŒ์ž„ ๋ฃจํ”„(XNUMX๊ฐœ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ/ํŒŒํŠธ ํฌํ•จ)์™€ ๋ฒ„ํผ๋กœ์˜ ์ถœ๋ ฅ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ๋ฃจํ”„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

int main()
   {
      Setup();
      // a game loop
      while (!quit)
      {
          Input();
          Logic();
          Draw();
          Sleep(gameSpeed);  // game timing
      }
      return 0;
   }

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

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๊ฒŒ์ž„ ์ฃผ๊ธฐ. ๋ฉ”๋ชจ์žฅ์—์„œ ์Šค๋„ค์ดํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

ํ™”๋ฉด ๋ฒ„ํผ ๊ฐ€์ ธ์˜ค๊ธฐ(๊ทธ๋ ‡๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ):

// create screen buffer for drawings
   HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
 							   NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
   DWORD dwBytesWritten = 0;
   SetConsoleActiveScreenBuffer(hConsole);

ํŠน์ • ๋ผ์ธ scoreLine(์ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ผ์ธ)์˜ ํ™”๋ฉด์— ์ง์ ‘ ์ถœ๋ ฅ:

// draw the score
   WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);

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

๊ฒŒ์ž„ 2 ํฌ๋ ˆ์ด์ง€ ํƒฑํฌ

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๋ฏธ์นœ ํƒฑํฌ ๊ฒŒ์ž„

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

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

๋”ฐ๋ผ์„œ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์€ ์›€์ง์ด๋Š” ์ƒ‰์ƒ ์‚ฌ๊ฐํ˜• ์ง‘ํ•ฉ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
์ง์‚ฌ๊ฐํ˜• ์„ธํŠธ

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

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๊ฒŒ์ž„ ํƒฑํฌ ๋งคํŠธ๋ฆญ์Šค์˜ ์˜ˆ

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
XNUMX์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ฒŒ์ž„ ํƒฑํฌ์˜ ๋งคํŠธ๋ฆญ์Šค ํ‘œํ˜„

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
XNUMX์ฐจ์› ๋ฐฐ์—ด์— ์˜ํ•œ ํ–‰๋ ฌ ํ‘œํ˜„์˜ ๋ณด๋‹ค ์˜ˆ์‹œ์ ์ธ ์˜ˆ

๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” XNUMX์ฐจ์›์ด ์•„๋‹Œ XNUMX์ฐจ์› ๋ฐฐ์—ด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ด์ค‘ ๋ฃจํ”„์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ์ „ํžˆ ๋งคํŠธ๋ฆญ์Šค๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
์ด์ค‘ ๋ฃจํ”„์—์„œ XNUMX์ฐจ์› ๋ฐฐ์—ด์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. Y๋Š” ํ–‰ ID์ด๊ณ  X๋Š” ์—ด ID์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ ์‹๋ณ„์ž i, j ๋Œ€์‹  ์‹๋ณ„์ž x ๋ฐ y๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ˆˆ์ด ๋” ์ฆ๊ฒ๊ณ  ๋จธ๋ฆฌ๊ฐ€ ๋” ์„ ๋ช…ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ๋œ ํ–‰๋ ฌ์„ XNUMX์ฐจ์› ์ด๋ฏธ์ง€์˜ ์ขŒํ‘œ์ถ•์— ํŽธ๋ฆฌํ•˜๊ฒŒ ํˆฌ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ํ”ฝ์…€, ์ƒ‰์ƒ ๋ฐ ๋””์Šคํ”Œ๋ ˆ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค. StretchDIBits ํ•จ์ˆ˜(ํ—ค๋”: windows.h; ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: gdi32.lib)๊ฐ€ ์ถœ๋ ฅ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์žฅ์น˜(์ œ ๊ฒฝ์šฐ์—๋Š” Windows ์ฝ˜์†”), ์ด๋ฏธ์ง€ ํ‘œ์‹œ ์‹œ์ž‘ ์ขŒํ‘œ, ๋„ˆ๋น„/๋†’์ด ๋ฐ ์ด๋ฏธ์ง€๊ฐ€ ์ด ํ•จ์ˆ˜์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋Š” ๋น„ํŠธ๋งต(๋น„ํŠธ๋งต) ํ˜•ํƒœ์˜ ์ž์ฒด. ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ์„œ์˜ ๋น„ํŠธ๋งต!

์ž‘๋™ ์ค‘์ธ StretchDIBits() ํ•จ์ˆ˜:

// screen output for game field
   StretchDIBits(
               deviceContext,
               OFFSET_LEFT, OFFSET_TOP,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               0, 0,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               m_p_bitmapMemory, &bitmapInfo,
               DIB_RGB_COLORS,
               SRCCOPY
               );

๋ฉ”๋ชจ๋ฆฌ๋Š” VirtualAlloc() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋น„ํŠธ๋งต์— ๋ฏธ๋ฆฌ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•„์š”ํ•œ ๋ฐ”์ดํŠธ ์ˆ˜๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋  ๋ชจ๋“  ํ”ฝ์…€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

m_p_bitmapMemory ๋น„ํŠธ๋งต ๋งŒ๋“ค๊ธฐ:

// create bitmap
   int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
   void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);

๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜๋ฉด ๋น„ํŠธ๋งต์€ ์ผ๋ จ์˜ ํ”ฝ์…€๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์–ด๋ ˆ์ด์˜ ๋ชจ๋“  XNUMX๋ฐ”์ดํŠธ๋Š” RGB ํ”ฝ์…€์ž…๋‹ˆ๋‹ค. ๋นจ๊ฐ„์ƒ‰ ๊ฐ’๋‹น XNUMX๋ฐ”์ดํŠธ, ๋…น์ƒ‰ ๊ฐ’๋‹น XNUMX๋ฐ”์ดํŠธ(G), ํŒŒ๋ž€์ƒ‰ ๊ฐ’๋‹น XNUMX๋ฐ”์ดํŠธ(B). ๋˜ํ•œ ๋“ค์—ฌ์“ฐ๊ธฐ๋‹น XNUMX๋ฐ”์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นจ๊ฐ•/๋…น์ƒ‰/ํŒŒ๋ž‘(RGB)์˜ ์„ธ ๊ฐ€์ง€ ์ƒ‰์ƒ์„ ์„œ๋กœ ๋‹ค๋ฅธ ๋น„์œจ๋กœ ํ˜ผํ•ฉํ•˜์—ฌ ๊ฒฐ๊ณผ ํ”ฝ์…€ ์ƒ‰์ƒ์„ ์–ป์Šต๋‹ˆ๋‹ค.

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

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

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๊ฒฝ๊ธฐ์žฅ์˜ ์ˆซ์ž ๋งคํŠธ๋ฆญ์Šค(๋””์ง€ํ„ธ ๋งคํŠธ๋ฆญ์Šค)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ •๋ณด๋กœ ๋น„ํŠธ๋งต(ํ”ฝ์…€ ๋งคํŠธ๋ฆญ์Šค)์„ ์ฑ„์šฐ๋Š” ์˜ˆ(์ƒ‰์ƒ ์ธ๋ฑ์Šค๊ฐ€ ๊ฒŒ์ž„์˜ ์ธ๋ฑ์Šค์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ)

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

์ด ์ฝ”๋“œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ์™€ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณ„๋„๋กœ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฒฝ๊ธฐ์žฅ์˜ ์ˆซ์ž ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ •๋ณด๋กœ ๋น„ํŠธ๋งต ์ฑ„์šฐ๊ธฐ:

// set pixel map variables
   int colorIndex;
   COLORREF color;
   int pitch;
   uint8_t* p_row;
 
   // arrange pixels for game field
   pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL;     // row size in bytes
   p_row = (uint8_t*)m_p_bitmapMemory;       //cast to uint8 for valid pointer arithmetic
   							(to add by 1 byte (8 bits) at a time)   
   for (int y = 0; y < PMATRIX_HEIGHT; ++y)
   {
       uint32_t* p_pixel = (uint32_t*)p_row;
       for (int x = 0; x < PMATRIX_WIDTH; ++x)
       {
           colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
           color = Utils::GetColor(colorIndex);
           uint8_t blue = GetBValue(color);
           uint8_t green = GetGValue(color);
           uint8_t red = GetRValue(color);
           uint8_t pixelPadding = 0;
 
           *p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
           ++p_pixel;
       }
       p_row += pitch;
   }

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

์ด๋ก ์ ์œผ๋กœ(์•„๋ฌด๊ฒƒ๋„ ์žŠ์ง€ ์•Š์•˜๋‹ค๋ฉด) ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์ž„("Snake")์˜ ๊ฒŒ์ž„ ๋ฃจํ”„์™€ ๋‘ ๋ฒˆ์งธ ๊ฒŒ์ž„("Tanks")์˜ ํ™”๋ฉด์— ํ”ฝ์…€์„ ํ‘œ์‹œํ•˜๋Š” ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows์šฉ 2D ๊ฒŒ์ž„. ์†Œ๋ฆฌ ์—†๋Š”! ๐Ÿ˜‰ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ํ™˜์ƒ์˜ ๋น„ํ–‰์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  "Tanks" ๊ฒŒ์ž„์€ "Snake"๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฏธ C++ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์–‘ํ•œ ๊ฒŒ์ž„ ๊ฐœ์ฒด๋ฅผ ํด๋ž˜์Šค๋กœ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋งŒ์˜ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. headers/Box.h์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ปฌ๋ ‰์…˜์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ํฌ์ธํ„ฐ. ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์ฑ…์ด ๋‚˜์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•ด์•ผ ํ•œ๋‹ค. ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•œ C++ ์‹œ์ž‘. ์ด๊ฒƒ์€ C++ ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. ์ž‘๊ณ  ํฅ๋ฏธ๋กญ๊ณ  ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์‹ค์šฉ์ ์ธ ๋ถ€๋ถ„์ด ๋๋‚˜๋ฉด ๋…ธํŠธ๋ถ์„ ๋ช‡ ์žฅ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์ ๊ณ , ๊ทธ๋ฆฌ๊ณ , ์„ธ๊ณ , ๋””์ž์ธํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ดโ€ฆ

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
ํƒฑํฌ ์ด๋ฏธ์ง€ ๋””์ž์ธ. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ํƒฑํฌ๊ฐ€ ํ™”๋ฉด์—์„œ ์ฐจ์ง€ํ•˜๋Š” ํ”ฝ์…€ ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ํƒฑํฌ ํšŒ์ „์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ๊ณต์‹ ๊ณ„์‚ฐ

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๋‚ด ์ปฌ๋ ‰์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ(๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์Œ). ์ปฌ๋ ‰์…˜์€ ์—ฐ๊ฒฐ๋œ ๋ชฉ๋ก์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

DevOps C++ ๋ฐ "์ฃผ๋ฐฉ ์ „์Ÿ", ๋˜๋Š” ์‹์‚ฌํ•˜๋ฉด์„œ ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•
๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ธ๊ณต ์ง€๋Šฅ์„ ๊ฒŒ์ž„์— ๋ผ์›Œ๋„ฃ์œผ๋ ค๋Š” ์“ธ๋ฐ์—†๋Š” ์‹œ๋„์ž…๋‹ˆ๋‹ค.

ะขะตะพั€ะธั

"์ฒœ ๋ฆฌ ๊ธธ๋„ ์ฒซ ๊ฑธ์Œ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค"(๊ณ ๋Œ€ ์ค‘๊ตญ์˜ ์ง€ํ˜œ)

์‹ค์ „์—์„œ ์ด๋ก ์œผ๋กœ ๋„˜์–ด๊ฐ€์ž! ์ทจ๋ฏธ๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„์€ ์–ด๋–ป๊ฒŒ ์ฐพ์œผ์‹ญ๋‹ˆ๊นŒ?

  1. ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์„ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค (์•„์•„, ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์–ด๋ ต์Šต๋‹ˆ๋‹ค).
  2. ์šฐ์„  ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์œ„ํ•ด ๋ชจ๋“  "๋ถˆํ•„์š”ํ•œ" ๊ฒƒ์„ ํฌ์ƒํ•˜์‹ญ์‹œ์˜ค.
  4. ๋งค์ผ ๋ชฉํ‘œ๋ฅผ ํ–ฅํ•ด ๋‚˜์•„๊ฐ€์‹ญ์‹œ์˜ค.
  5. ์ทจ๋ฏธ๋ฅผ ์œ„ํ•ด ๋‘์„ธ ์‹œ๊ฐ„์˜ ์ž์œ  ์‹œ๊ฐ„์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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

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

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

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰. ์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์€ ํ›„ ๊ฒŒ์ž„ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ ๋‹ค๋ฉด Casey Muratori๋ผ๋Š” ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์ด ์‚ฌ๋žŒ์€ ์›น ์‚ฌ์ดํŠธ. "๋ณด๊ธฐ -> ์ด์ „ ์—ํ”ผ์†Œ๋“œ" ์„น์…˜์—์„œ ์ „๋ฌธ ๊ฒŒ์ž„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋†€๋ผ์šด ๋ฌด๋ฃŒ ๋น„๋””์˜ค ์ž์Šต์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ•™์—์„œ XNUMX๋…„ ๋™์•ˆ ๊ณต๋ถ€ํ•œ ๊ฒƒ๋ณด๋‹ค Windows์šฉ C์— ๋Œ€ํ•œ XNUMX๊ฐœ ๊ฐ•์˜์—์„œ ๋” ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ˆ„๊ตฐ๊ฐ€ ๋น„๋””์˜ค ์•„๋ž˜ ๋Œ“๊ธ€์— ์ด์— ๋Œ€ํ•ด ์ผ์Šต๋‹ˆ๋‹ค).

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

์„ ํƒํ•œ ๊ธธ์— ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์„ธ์ƒ์„ ๋” ์ „๋ฌธ์ ์œผ๋กœ ๋งŒ๋“ค์ž.

์ €์ž : ๊ทธ๋žœํ‚จ ์•ˆ๋“œ๋ ˆ์ด, ๋ฐ๋ธŒ์˜ต์Šค



์ถœ์ฒ˜ : habr.com