์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
UWP์—์„œ ๋„˜์–ด์˜ด

UWP๊ฐ€ ์ง€์›ํ•˜๋Š” ์žฅ์น˜๋“ค๊ณผ ๊ธฐ๋Šฅ๋“ค

1. ๊ฐœ์š”2. ์ง€์› ์žฅ์น˜3. ๊ธฐ๋Šฅ ๋ชฉ๋ก
3.1. ํ™€๋กœ๋ Œ์ฆˆ3.2. IoT Device
4. ํ‰๊ฐ€

1. ๊ฐœ์š”[ํŽธ์ง‘]

Windows 10์˜ ์ถœ์‹œ์™€ ํ•จ๊ป˜ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ .NET Core ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์œผ๋กœ, Windows Runtime์„ ๊ณ„์Šนํ–ˆ๋‹ค. ์–ธ์–ด๋Š” C++, VB.NET, C#, F#, JavaScript ๋“ฑ .NET Framework์—์„œ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋ฉด ๋‹ค ์ง€์›๋œ๋‹ค.[1] UI๋Š” XAML์ด๋ผ๋Š” ์–ธ์–ด๋กœ ๊ตฌํ˜„๋˜๋ฉฐ[2], ์•ฑ ์„ค์น˜ ํ™•์žฅ์ž๋Š” "*.appx"์ด๋‹ค. ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ๋Š” C# ๊ธฐ๋ฐ˜์˜ UWP ์•ฑ ๊ฐœ๋ฐœ์„ ์šฐ์„ ์ ์œผ๋กœ ๋ฐ€์–ด์ฃผ๊ณ  ์žˆ๋‹ค.

2. ์ง€์› ์žฅ์น˜[ํŽธ์ง‘]

3. ๊ธฐ๋Šฅ ๋ชฉ๋ก[ํŽธ์ง‘]

3.1. ํ™€๋กœ๋ Œ์ฆˆ[ํŽธ์ง‘]

  • AR

3.2. IoT Device[ํŽธ์ง‘]

  • GPIO

4. ํ‰๊ฐ€[ํŽธ์ง‘]

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

์ดˆ์ฐฝ๊ธฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด๋Š” UWP ์•ฑ๋งŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ด์— ๋”ฐ๋ผ ์•ฑ์˜ ์ ˆ๋Œ€์ ์ธ ์ˆซ์ž๊ฐ€ ๋งค์šฐ ๋ถ€์กฑํ•ด์ง€๋Š” ํ˜„์ƒ์„ ๋‚ณ์•˜๋‹ค. ์ดํ›„ ๊ฒŒ์ž„ ๋ถ„์•ผ๋ฅผ ์‹œ์ž‘์œผ๋กœ Win32 ์•ฑ์˜ ๋“ฑ๋ก์„ ์ฐจ์ฐจ ํ—ˆ๊ฐ€ํ•˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ์ œ์•ฝ์€ ํ’€๋ฆฌ๊ฒŒ ๋˜์—ˆ๊ณ  UWP์˜ ์ž…์ง€๋Š” ๋”๋”์šฑ ๋‚ฎ์•„์ง€๊ฒŒ ๋˜์—ˆ๋‹ค. #

๋ฐ˜๋Œ€๋กœ Win32๋ฅผ ์ด์šฉํ•ด์•ผ ํ• ๋งŒํผ ํผํฌ๋จผ์Šค๋ฅผ ์š”๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹Œ ์œˆํผ(Windows Forms)์ด๋‚˜ WPF ์ˆ˜์ค€์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์•ฑ์˜ ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ์—๋„ ๊ทธ๋‹ค์ง€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค. ์„ฑ๋Šฅ์ด์ „์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„˜์–ด๊ฐ€๊ธฐ์—๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์ฐจ์ด์ ์ด ์žˆ์–ด ์˜ฎ๊ฒจ๊ฐ€๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ. ์œˆํผ๊ณผ WPF ๊ฐ„์—๋Š” ์„œ๋กœ ์ฐธ๊ณ ํ•˜๊ธฐ๊ฐ€ ์ข‹์€๋ฐ ๋ฐ˜ํ•ด UWP๋กœ ๋งŒ๋“ค ๋•Œ๋Š” ์ด ๋‘˜์„ ์ฐธ๊ณ ํ•˜๊ธฐ๊ฐ€ ๊ทธ๋ฆฌ ์ข‹์ง€ ์•Š๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด์ ์œผ๋กœ ๋””๋ฒ„๊น… ์‹œ ์ถœ๋ ฅํ™”๋ฉด์— ๋‚˜์˜ค๋Š” ์ถœ๋ ฅ์€ ์ฝ˜์†”๋กœ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ์œผ๋กœ ๋”ฐ๋กœ ์ง€์ •ํ•ด์•ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋˜๊ฐ€, ์œˆํผ๊ณผ WPF์—์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ทธ๋ฆฌ๋“œ๊ฐ€ UWP์—์„œ๋Š” NuGet ํŒจํ‚ค์ง€๋กœ ๋”ฐ๋กœ ์„ค์น˜๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋˜๊ฐ€, ๊ทธ๋งˆ์ €๋„ WPF์—์„  ํ”ํžˆ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๊ทธ๋ฆฌ๋“œ์— ๋„ฃ๋Š” ๋ฐฉ์‹์ด UWP(์—์„œ ์“ฐ๊ธฐ ์œ„ํ•œ NuGet ํŒจํ‚ค์ง€)์—์„œ๋Š” ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ๋Š” ์ง€์›์ด ์•ˆ๋œ๋‹ค๋˜๊ฐ€[4] ๋“ฑ๋“ฑ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„์—์„œ๋ถ€ํ„ฐ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”์šฑ์ด ์›ฌ๋งŒํ•˜๋ฉด ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ์€ ์ „์— ์žˆ๋˜ ํ”Œ๋žซํผ์˜ ์žฅ์ ์„ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ํŽธ์ธ๋ฐ ์œˆํผ์ด๋‚˜ WPF์˜ ์ด์ [5]์„ UWP์—์„œ ์‚ด๋ ค์ฃผ๋Š”๊ฒŒ ์•„๋‹Œ, UWP์—์„œ ์ง€์›ํ•˜๋˜ ํ”Œ๋ฃจ์–ธํŠธ ๋””์ž์ธ์„ ์œˆํผ๊ณผ WPF์—์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํŒจ์น˜ํ•˜๋Š” ๋“ฑ ์‚ฌ์‹ค์ƒ UWP๋ฅผ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋Š” ์›€์ง์ž„์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”๋”์šฑ ๋„˜์–ด๊ฐˆ ์ด์œ ๊ฐ€ ์—†์–ด์ง€๋Š” ์ค‘์ด๋‹ค.

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

๊ทธ๋‚˜๋งˆ ๋‚จ์€ ์žฅ์ ์ด๋ผ๊ณ ๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ์ž์ฒด ๊ด‘๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์ ์ธ๋ฐ, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด ํฌ ๋น„์ฆˆ๋‹ˆ์Šค(Microsoft Store for Business)์™€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด ํฌ ์—๋“€์ผ€์ด์…˜(Microsoft Store for Education)์€ ์ง€์›์„ ์ค‘๋‹จํ•  ๊ฑฐ๋ž€ ๊ธฐ์‚ฌ๊ฐ€ ๋‚˜์˜ค๊ฑฐ๋‚˜, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์ž์ฒด ๊ด‘๊ณ ๋„ 2020๋…„ 6์›” 1์ผ๋ถ€๋กœ ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ธฐ๋กœ ๋ฐœํ‘œํ•ด๋ฒ„๋ฆฌ๋Š” ๋“ฑ ๋‹น์žฅ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด๊ฐ€ ์‚ฌ๋ผ์ง€์ง„ ์•Š๋”๋ผ๋„ ๋ฏธ๋ž˜๊ฐ€ ์˜ ์ข‹์ง€ ์•Š๋‹ค. ๋ฌผ๋ก  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ ์ธํ”„๋ผ์™€ ๊ฒฐ์ œ ์‹œ์Šคํ…œ ๋“ฑ์ด ์ž์ฒด์ ์œผ๋กœ ์ง€์›๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜์„ธ ๊ฐœ๋ฐœ์‚ฌ์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ธก๋ฉด๋„ ์žˆ๊ฒ ์ง€๋งŒ, App Store๋‚˜ Play Store์™€ ๋‹ฌ๋ฆฌ ๊ธฐ๋ณธ์ ์ธ ์ด์šฉ๋ฅ  ์ž์ฒด๊ฐ€ ๋ฌด์ฒ™ ๋‚ฎ์•„์„œ ์˜จ์ „ํžˆ MS ์Šคํ† ์–ด์—๋งŒ ์˜์กดํ•˜๋Š” ์•ฑ์€ ๊ทธ๋ฆฌ ๋งŽ์ง€ ์•Š๋‹ค.

๊ฒฐ๊ตญ Project Reunion์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ UWP์™€ Win32 API๋ฅผ ํ†ตํ•ฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

[1] JS์˜ ๊ฒฝ์šฐ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ C# ๊ธฐ๋ฐ˜์˜ ์›น๋ทฐ์–ด์—์„œ JS๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋“ฏ ํ•˜๋‹ค.
[2] ๋‹ค๋งŒ ๋””์ž์ธ ์ปจํŠธ๋กค ๋“ฑ์€ WPF์™€ ๋‹ค๋ฅธ ์ ์ด ๋งŽ๋‹ค.
[3] MS๊ฐ€ Windows 10์„ ์ „ํ›„๋กœ ๋ชจ๋ฐ”์ผ OS ์‹œ์žฅ์—์„œ ์ฒ ์ˆ˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค.
[4] UWP๋Š” ๋ฐ์ดํ„ฐํ…Œ์ด๋ธ”์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋˜์งˆ ์•Š๋Š”๋‹ค. ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ๋ฐ์ดํ„ฐํ…Œ์ด๋ธ”์„ ๊ฑฐ์ณ๊ฐ€์•ผ ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐํ…Œ์ด๋ธ”์—์„œ ๊ฐ’์„ ๋ฝ‘์•„๋‚ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋˜๊ฐ€ ํ•ด์•ผ ํ•œ๋‹ค. #
[5] UI ๊ตฌ์„ฑ์˜ ์šฉ์ดํ•จ