dimohy
6์ 10, 2021, 11:57์คํ
1
์ต์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ MVC ์๋ฃจ์
์ ์ค๋ฒ ํค๋์์ด API๋ฅผ ๋น๋ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ๋ฐฉ์๊ณผ ASP.NET Core์์ API๋ฅผ ๋น๋ํ๋ ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ดํดํ๋ ค๋ฉด ์์ธํ ์ฝ์ด๋ณด์ธ์.
์ค! ํฅ๋ฏธ๋ก์ด ๊ธ์ ๋ฐ๊ฒฌํ์ต๋๋ค. .NET 6 Preview 4๋ถํฐ ์ฌ์ฉ๊ฐ๋ฅํ FRATHERHTTP์ ํจ๊ป C#10๊ณผ์ ๋ค์ํ ํ์ฉ๋ฒ์ ์น์ ํ๊ฒ ์๊ฐํฉ๋๋ค.
https://www.telerik.com/blogs/low-ceremony-high-value-tour-minimal-apis-dotnet-6
Feather Http API๋ผ๊ณ ๋ ํ๋ Minimal APIs ์ ์ต์ํด์ง๊ธฐ ์ํด ์ ๊ธ์ ๋ด์ฉ์ ๋ฐ๋ผํด๋ณด๋ฉด์ ๊ฐ๊ฐ์ ์ตํ๋ณด๋ ค ํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ์ญ์ ์ฝ๋ฉ์ผ๋ก ์ต์ํด์ ธ์ผ ํ๋๊น์.
์ฒ์ ์์์ ์ ํ์ ๋ ํ์ฐธ ํ์๋ค์๊ฒ ํ์ด์ฌ์ Flask ๋ฅผ ์ด์ฉํด REST API๋ฅผ ๊ตฌํํ๋๋ก ํ๋ ๊ณผ์ ์ค์ ์์๋๋ฐ, ์ ์ฌํ ์ฝ๋๋์ผ๋ก ์ด์ C#์ผ๋ก๋ REST API๋ฅผ ๋ง๋ค ์ ์์ด๋ณด์ฌ ์ธ์๊น์์ต๋๋ค.
๋ฐ๋ผ ํ๋ ๊ณผ์ ์ ๋๊ธ๋ก ์งํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 12:22์ค์
2
๋จผ์ .NET 6 Preview 6 SDK๋ฅผ ์ค์น ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Visual Studio 2019 Preview๋ก ์งํํด๋ณด๋๋ก ํฉ์๋ค.
๋จผ์ ์ฝ์ ์ดํ๋ฆฌ์ผ์ด์
ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํ, csproj๋ฅผ ๋ค์์ฒ๋ผ ๋ณ๊ฒฝ ํฉ๋๋ค.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
์น ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํด๋ ๋์ง๋ง ํฌ์ด์ ๋ถํ์ํ ํ์ผ์ด ์์ฑ๋๋ฏ๋ก ์ด๋ ๊ฒ ์งํ์ ํ๊ณ ์์ต๋๋ค. ์ฒซ๋ฒ์งธ ์์ ๋ฅผ ์คํํด๋ณด๊ฒ ์ต๋๋ค.
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
await app.RunAsync();
using
๋ ์๊ณ ๋ญ๊ฐ ์ด์ํ์ฃ ? C# 9์์๋ ์์ง์ ๋์ํ์ง ์๋ ์ฝ๋์
๋๋ค. ์ด๊ฒ์ ๋ค์์ฒ๋ผ ๋ณ๊ฒฝํ๊ฒ ์ต๋๋ค.
using System;
using Microsoft.AspNetCore.Builder;
var app = WebApplication.Create(args);
app.MapGet("/", (Func<string>)(() => "Hello World!"));
await app.RunAsync();
์คํํ๋ฉด ๋ค์์ฒ๋ผ ์ ์คํ๋ฉ๋๋ค.
(Func<string>)
์ผ๋ก์ ๋ช
์์ ์บ์คํธ๋ C# 10์ Lambda improvements ์ ์ํด์ ์์ด์ง ์์ ์ด๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , global using
์ ํตํด ๋ง์น Blazor์ _Imports.razor
์ ์ ์ฌํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ ์์ ์ด๋ผ๊ณ ํฉ๋๋ค.
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 12:47์ค์
3
C# 10๋ฅผ ํ์ฑํ ํด๋ณด๊ฒ ์ต๋๋ค. .NET 6 Preview 4 SDK
๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๊ณ Visual Studio 2019 Preview
์ฌ์ผ ํฉ๋๋ค.
csprojํ์ผ์ <LangVersion>preview</LangVersion>
์ ์ถ๊ฐ ํฉ๋๋ค.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
usings.cs
ํ์ผ์ ๋ง๋ค๊ณ ๋ค์์ฒ๋ผ ํฉ๋๋ค.
global using Microsoft.AspNetCore.Builder;
์ด์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ค์์ฒ๋ผ ๋ณ๊ฒฝํฉ๋๋ค.
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
await app.RunAsync();
^^;
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 12:58์ค์
4
usings.cs
global using System.Threading.Tasks;
global using Microsoft.AspNetCore.Builder;
global using System.Net.Http;
var app = WebApplication.Create(args);
app.MapGet("/quote", async () =>
await new HttpClient().GetStringAsync("https://ron-swanson-quotes.herokuapp.com/v2/quotes"));
await app.RunAsync();
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 1:01์ค์
5
var app = WebApplication.Create(args);
app.MapGet("/person", () => new Person("๋ชจ์ด", "๋"));
await app.RunAsync();
public record struct Person(string FirstName, string LastName);
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 1:47์ค์
6
var app = WebApplication.Create(args);
app.MapPost("/person", (Person p) => $"์๋ก์ด ์ฌ๋์ด ์๊ฒผ์ต๋๋ค. : {p.LastName}{p.FirstName}");
await app.RunAsync();
public record struct Person(string FirstName, string LastName);
Windows 10 ํฐ๋ฏธ๋์์ UTF-8์ ์ํ ํ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด, ๋ค์์ ์ค์ ์ ์ฒดํฌํด์ผ ํฉ๋๋ค.
2๊ฐ์ ์ข์์
dimohy
6์ 11, 2021, 2:37์ค์
7
์ฌ๋ก๊ทธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ๊ธฐ ์ํด ๊ฐ๋จํ ์ฝ๋ฉ ํด๋ณด๊ฒ ์ต๋๋ค.
ConcurrentDictionary<string, string> dict = new(StringComparer.OrdinalIgnoreCase)
{
["Apple"] = "์ฌ๊ณผ",
["Piano"] = "ํผ์๋
ธ"
};
var app = WebApplication.Create(args);
app.MapGet("/dict", () => dict);
app.MapPost("/dict", (Word word) => dict[word.Eng] = word.Kor);
app.MapGet("/dict/{eng}", (string eng) => new { Response = dict[eng] });
app.MapDelete("/dict/{eng}", (string eng) => dict.TryRemove(eng, out var _));
await app.RunAsync();
record Word(string Eng, string Kor);
2๊ฐ์ ์ข์์