rkttu
1
(์ด๋ฒ ํ๋ณด ๊ธ์ ์ฌ์ ํ์๋ฅผ ํตํด ๊ณต๋ ํ๋ณด๋ฅผ ์งํํ๊ธฐ๋ก ๋
ผ์ํ์ฌ ๊ฒ์ ๊ธ์ ๋ฐํํ์์ต๋๋ค.)
์๋
ํ์ธ์. ๋ท๋ท๋ฐ๋ธ ์ด์์ง ๋จ์ ํ์
๋๋ค.
2์ 23์ผ ๋ชฉ์์ผ ์คํ 2์๋ถํฐ 4์๊น์ง ์์ด๋ ๋๊ฐ๋น๋ฉ 12์ธต, ๋ธ๋ฃจํฌํธ ์ธ๋ฏธ๋๋ฃธ์์ Blazor ์ปค๋ฎค๋ํฐ ๋ฐ์
์ ์งํํ๋ค๋ ์์์ ๊ณต์ ๋๋ฆฝ๋๋ค.
ํฅํ ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์
์ ์งํํ๋ฉด์, Blazor์ ๊ธฐ์ด๋ถํฐ ์ค๋ฌด์์ ํ์ฉํ ์ ์๋ ๋ค์ํ ๋
ธํ์ฐ๋ฅผ ๊พธ์คํ ์ง์ ๋๋ํ๋ ์ ์ตํ ์ปจํผ๋ฐ์ค๋ก ์ฑ์์ง ์์ ์
๋๋ค.
์ปจํผ๋ฐ์ค ๋ฑ๋ก์ 2023๋
2์ Blazor ๋ฐ์
- ์จ์คํ๋ฏน์ค :: ๋ชจ์๋ฌธํ ํ๋ซํผ ์์ ํ์ค ์ ์์ต๋๋ค.
๋ง์ ๊ด์ฌ๊ณผ ์ฐธ์, ๊ทธ๋ฆฌ๊ณ ๊ณต์ ๊ฐ ์ปค๋ฎค๋ํฐ ์ด์์ ํฐ ๋์์ด ๋ฉ๋๋ค.
๊ณ ๋ง์ต๋๋ค!

7๊ฐ์ ์ข์์
Winform์์ Blazor๋ก ๊ฐ๋ ์ข์ ๊ฒฝํ ๊ณต์ ํ์ฌ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ด์ ์ ๊ฐ ์ฌ์ญค๋ณธ Blazor Browser์์ TCP IP์ ๊ฐ์ ํต์ ์ด ๋๋์ง์ ๋ํ ํ์ธ์
๋๋ค.
@page "/counter"
@using System.Net.Sockets;
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="SendTcpMessage">Send</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
private async void SendTcpMessage()
{
await Task.Run(() =>
{
try
{
// ์๋ฒ์ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ์ง์ ํฉ๋๋ค.
string serverIP = "127.0.0.1";
int serverPort = 8880;
// TcpClient ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
TcpClient client = new TcpClient(serverIP, serverPort);
// NetworkStream ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์ต๋๋ค.
NetworkStream stream = client.GetStream();
// ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค.
string message = "Hello, server!";
// ๋ฌธ์์ด์ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ NetworkStream์ ํตํด ์๋ฒ์ ์ ์กํฉ๋๋ค.
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", message);
// ์๋ฒ์์ ๋ณด๋ธ ์๋ต์ ๋ฐ์ต๋๋ค.
data = new byte[256];
string responseData = string.Empty;
int bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
// TcpClient์ NetworkStream ๊ฐ์ฒด๋ฅผ ๋ซ์ต๋๋ค.
stream.Close();
client.Close();
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex);
}
});
}
}
Send Button์ ํด๋ฆญํ๋ฉด System.PlatformNotSupportedException์ด ๋ฐ์๋ฉ๋๋ค.
.NET์ ์๋ ๋ด์ฉ์ด๋๋ผ๋ Browser์์ ๋ง๊ณ ์๋ ๊ธฐ๋ฅ๋ค์ ๋์ํ์ง ์์ต๋๋ค.
3๊ฐ์ ์ข์์
Ivory
3
Blazor wasm์ ๋ชจ๋
ธ ๋ฐํ์์์ ๋ชจ๋ .NET API๊ฐ ์ง์๋๋ ๊ฒ์ ์๋๋๋ค. ์ฌ์ง์ด๋ .NET Standard 2.0๊ณผ๋ ์์ ํ ํธํ๋์ง ์์ต๋๋ค. ํ ์๋ก ํด์ ์์ฑ API๋ฅผ ์ ์ธํ .NET์ ๋ชจ๋ ์ํธํ API๋ ์์ง ์ง์๋์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ์ง์๋์ง ์๋ API๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ฉด PlatformNotSupportedException ์ด ๋ฐ์ํฉ๋๋ค.
ํ์ฌ Blazor wasm์์ TCP ํต์ ์ ์ฌ์ฉํ๋ ค๋ฉด JavaScript InterOp์ ํตํด WebSocket์ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์ ๋ณด์ด๋ค์.
5๊ฐ์ ์ข์์
์ด์ meetup์์๋ ์ด์ ์์ ๊ถ๊ธํ์ ๋ถ๋ค์ด ๋ง์๋๋ฐ์
wasm ์ ์ด๋๊น์ง๋ ์น ๋ฒ ์ด์ค ๊ธฐ๋ฐ์ richํ ํ๊ฒฝ์ ์๋ฃจ์
์ด์ง
๊ณผ๊ฑฐ active x๊ธ์ผ๋ก ๊ธฐ๋ํ์ ๊ฒ ๊ฐ์์
์๋ง ๋ชฉ์ ์ ๋ฌ์ฑํ์ค๋ ค๋ฉด client ์ ๋ฏธ๋ค์จ์ด ๊ฐ์๊ฑธ ๋ฌ์ proxy ๊ฐ๋
์ผ๋ก
์ ๊ทผํด๋ณด๋๊ฒ์ด ์ข์๊ฒ ๊ฐ์์
4๊ฐ์ ์ข์์
์๋
ํ์ธ์. ๊น์ง์์
๋๋ค.
๋ฐ์
์์ ์ง๋ฌธํ์ ๋ด์ฉ์ ์ ๊ฐ ์ ์ดํดํ์ง ๋ชป ํ์๋ ๋ณด๋ค์.
๋ค์ ๋ฐ์
์์๋ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ฝ๋ ์ธ์ ๊ฐ์ ๊ฒ์ ํด๋ณด๊ณ ์ถ์ผ๋
ํด๋ณด๋ฉด์ ํน์ ์ ๋ฐ ๊ฒ ๋๋ ๊ธธ์ด ์๋ ์ง ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
3๊ฐ์ ์ข์์
์๋
ํ์ธ์ ์ด์ข
ํ๋!
https://cafe.naver.com/infragisticskorea/391
์ 3์ ๋ฐ์
agenda๋ก ์์ฒญํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค 
2๊ฐ์ ์ข์์