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>