Blazor App Template
๋ถ์ : ClientSide(a.k.a. Blazor WebAssembly)๊ฐ ์ ๊ธฐํด์ง ๊ฑด,
์ต๊ทผ ์ฌ์ฉํ / ๋ฐฐํฌํ ์๋น์ค๋ค์ด Blazor Server ๊ธฐ๋ฐ์ ์ฌ์ฉํ์ด์ ํด๋น ๋ถ๋ถ ์์ฃผ๋ก๋ง ํ๋ค๋ณด๋
Blazor WASM ๊ด๋ จ๋ ์ง์์ด ๊ฝค ๋ฏธํกํ ํธ์ด๋ผ ๋ง์๋๋ฆฌ๊ธฐ์ ์์ ์ํด(?) ๋ถํ๋๋ฆฝ๋๋ค.
์ค์?!
๋ถ๋ช
๊ธฐ์กด blazor ์์ฑ Template๋ ์ ๋ถ ๋ฐ๋ก๊ตญ๋ฐฅ์ด์์ง์.
ํ๋ฐ, dotnet8๋ถํฐ ํ๋๋ก ๋ญ์ณ์ก์ต๋๋ค. ๋ ์ฉ!
(๋คํํ, ๊ธฐ์กด ํ
ํ๋ฆฟ๋ ์์ง(Visual Studio 2022- 17.8.0 preview 4.0) ์ด์ ์์ต๋๋ค.)
์์ฑ ํ๋ฉด์ ์ ๊ธ์ ์์ ๋ณด์ฌ๋๋ฆฐ ๋ฐ์ ๊ฐ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ๋ฌธ๋ ๋ ์๊ฐ
WebAssembly๋ ๊ทธ๋ผโฆ?
ํด๋ณด์!
๊ตฌ๋ฒ์ ์ ์ผ๋ฐ WebAssembly ์ฑ์ผ๋ก ์์ฑํ๊ณ ,
์ ํ
ํ๋ฆฟ์ Interactivity type : WebAssembly, location : Per Page/Component ๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์ธ์ฆ ์ ํ์ ์์ฒด ํฌํจ๋ ํด๋ดค์ต๋๋ค.
๊ธฐ์กด์์๋
Duende IdentityServer๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๊ณ ์๋ค์.
Identity๋ฅผ ์ ๋ถ Scaffold ํ์ง ์์์,
Areas/Identity/Pages/Shared/_LoginPartial.cshtml ๋ง ์์ต๋๋ค.
์ ์๊ฒ ์ ๊ธฐํ ์ ์, Blazor Server์ ๋ค๋ฅด๊ฒ _Host.cshtml์ด ์๋ ๋ถ๋ถ์ด๊ฒ ๋ค์. ASPNet.Core์ ์ํธ๋ฆฌ ์ง์ ์ ์ค์ ํ์ง ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์ผ๊น์? Client๋จ์๋ค ์ค์ค๋ก ๋ณด์ฌ์ค ๋ถ๋ถ๋ง render ํ๋ฉด ๋ ํ
๋๊น์.
๋ฐ๋ฉด์, ์ด๋ฒ 8.0 ์์๋?
์ผ๋จ ์ ์ผ ํฐ ๋ณํ๋ก,
Identity ๊ด๋ จ ํ์ด์ง๊ฐ ์ ๋ถ scaffold ๋ MVC ๊ธฐ๋ฐ ํ์ด์ง ์์ razor Component๋ก ๊ต์ฒด๋์์ต๋๋ค.
์ฌ์ค ํฌ๊ฒ ๋ณด๋ฉด, razorํ์ผ๊ณผ razor.csํ์ผ์ด ํ๋๋ก ํฉ์ณ์ง ๊ฑธ๋ก ๋ณด์
๋ ๋์ง ์์๊น? ๋ผ๋ ์๊ฐ๋ ๋ค์ง๋ง, blazor์ razorpages๋ ๋ฌธ๋ฒ๋ง ๊ฐ๊ณ ์๋ ๋ฐฉ์์ ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅด๋ค๊ณ ์๊ณ ์์๊ธฐ ๋๋ฌธ์.
blazor ์นํ์ ์ผ๋ก ๋ฐ๋์์ผ๋ ์ด์ฉ๋ฉด ์ด์ ์ผ ์ ๋๋ก ๋ ๊ฒ ์๋๊น ํ๋ ์๊ฐ์ด ๋ญ๋๋ค.
๋ ์๋ํํฐ(๊ฐ ๋ง๊ฒ ์ฃ ?)๋ก ๋์ฒด๋๋ wasm์ฉ Identity๋ ์ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋๋์ด๊ตฌ์.
๋ฌผ๋ก ์ด ๋ถ๋ถ์ ServerMode์์๋ ๊ฑฐ์ ๋น์ทํ๊ฒ ๊ตฌ์ฑ๋๋, ํ์ธ ํด๋ณด์
๋ ์ข์ ๊ฒ ๊ฐ์์.
์ด ์ชฝ์ Client๋จ์ Authorize ์์ ์ฉ ํ์ด์ง์
๋๋ค.
์ ํฌ์คํธ์ ๋ฐ๋๋ก, [RenderModeInteractiveWebAssembly]
๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค์.
[RenderModeInteractiveAuto]
๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋๊ฐ ๋ฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ด RenderModeInteractiveAuto(prerender:true)
์ด๊ธฐ ๋๋ฌธ์,
์ต์ด ๋ก๋์์๋ Server์์ render ๋ ๋ถ๋ถ์ ๋ฐ๊ณ , ์๋ฃ๋๋ฉด WASM์ผ๋ก ์๋ํฉ๋๋ค.
@page "/auth"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
@attribute [RenderModeInteractiveWebAssembly]
<PageTitle>Auth</PageTitle>
<h1>You are authenticated</h1>
<AuthorizeView>
Hello @context.User.Identity?.Name!
</AuthorizeView>