37,400원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결ASP.NET core Blazor 디테일 강의 - 초급편
블레이저 서버와 웹어셈블리
해당 내용을 찾아봐도 잘 이해가 안됩니다.실제로 사용되는 예시가 있을까요 ?웹 어셈블리는 정적페이지에 가깝고블레이저 서버는 동적페이지에 가깝다고 보면되나요 ?웹 어셈블리로 작성하면 깃허브로 배포가 가능하다던데이런 차이에 대해서도 궁금합니다.
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
blazor server 에서의 token auth 진행 과정
안녕하세요. 혼자서 아무리 찾아봐도 아리송한 부분이 있어 오랜만에 질문 남깁니다.다름이아니라 제가 jwt token을 활용한 인증을 구현하려고 하고있습니다.페이지에는 @attribute [Authorize] 를 통해 토큰을 갖고있는 사용자만 접근할 수 있게 구현하였습니다.인증에 대한 부분은 제대로 구현이 되었는데 token을 만료시키기 위해 expire을 주었는데도 시간이 지나도 만료가 되지 않았습니다. 그래서 제가 생각한 원인이 혹시 내부적으로 blazor server에서는 인증할 때 매번 토근을 주고받지 않는건가? 라는 생각이 들었습니다 (실제로 관리자 콘솔을 봐도 blazor server에서는 네트워크 부분에 요청하고 받는게 없기때문에 당연히 그 헤더에 포함될 token도 없었기에 이렇게 생각하게 되었습니다) 제 생각처럼 blazor server는 인증할때 처음 한번만 하는건가요??만약 한번만 인증한다면 blazor server 에서는 자동으로 만료 시킬수는 없을것 같은데, 그렇다면 따로 제가 만료시간을 가져와서 비동기함수를 만들어 특정시간 후에는 삭제해버리던가(그 사이에 토큰이 탈취되면 계속 사용할수있다는 문제점 있음), 조건문을 통해 시간이 지난 토큰은 없애고싶은데... 어느부분에서 토큰을 통한 인증을 진행하는지 몰르겠어서 이 부분도 쉽지않을거같습니다... 혹시 방법이 있을까요?
- 미해결ASP.NET core Blazor 디테일 강의 - 초급편
button click에 연결한 함수 실행시, 다른 태그에 연결한 동일 함수가 실행되는 이유.
<h5>@AddStr("1234")</h5><h6>@AddStr("5678")</h6><p>P 태그</p><span>SPAN 태그</span><button @onclick="@(e => AddStr("아멘"))">눌러보기</button> 상기와 같이 태그를 작성한 경우,실행 후 button을 클릭하면 h5, h6에 연결한 함수들 까지 같이 실행되어 Console에 찍힙니다. 그 이유를 모르겠네요. 설명 부탁드립니다.물론 함수는 아래와 같이 정의했습니다.private string AddStr(string p1) { string strget = p1 + " 대한민국 ^^"; Console.WriteLine(strget); return strget; }
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
재질문
어제 질문드렸는데 navigationmanager로 해결이 안되어 다시 질문 남깁니다현재 저는 stream형식으로 데이터를 받아오는 코드를 구현하고 있고 이를 업데이트하기 위해 await InvokeAsync(StateHasChanged); 라는 코드를 사용하고 있습니다.평상시에는 StateHasChanged가 잘 동작하기에 생명주기 함수에만 넣어야하는 함수는 아닌 것 같습니다..오직 문제는 다른 페이지로 전환했다 돌아왔을 시 StateHasChanged가 동작하지 않습니다. (디버깅으로 확인한 결과 평소에는 StateHasChanged 이후에 html 코드쪽으로 가서 업데이트 작업이 진행되는데 문제의 경우에는 html로 가지않고 바로 넘어가버림)(수정된 내용을 찾지 못하는걸까요??)데이터는 정상적으로 들어간게 디버깅을 통해서도 확인되었고 또 이벤트 (아무런 기능없는 버튼 클릭, 다시 다른페이지로 이동했다 돌아옴) 가 발생하면 정상적으로 모든 데이터가 출력됩니다.오직 다른페이지로 넘어갔다 돌아왔을 시 "실시간으로 업데이트해주는 기능" 만 동작을 멈춤니다.검색한 바로는 비동기 활용 시 쓰레드가 달라져 싱크가 안맞는 문제가 있는거같기도한데...(SynchronizationContext, ExecutionContext)제 생각에는 이게 가장 그럴듯해 보이더라구요 async 사용하면서 쓰레드가 달라져서 StateHasChanged()가 변경된 부분을 인식 못한다는게 맞을까요?버튼을 누르는 것과 StateHasChanged 를 호출하는 것 둘 사이에 무슨 차이점이 있길래 하나만 동작하는걸까요 Blazor (Client-side) StateHasChanged() not updating page - coder-solution-es.com해당 주소의 방법으로 임시적으로 돌아가게는 구현했습니다.아무것도 없는 refresh 페이지를 만들고 init에서 바로 NavigateTo를 활용해 원하는 주소로 돌아가게 구현하는 방식입니다. 이렇게 하면 페이지가 전환되더라도 실시간으로 업데이트가 됩니다...하지만 매번 반복문마다 저 NavigateTo를 하는건 아무리 봐도 해당 방법은 쓸데없는 동작이 많아( 깜빡임도 발생합니다) 임시 방편으로만 쓸만한거같은데 혹시 저 임시방편 해결책을 통해 저의 근본적인 문제가 무었인지 알 수 있을까요...? 최대한 자세히 제 상황을 알려드리려 하다보니 질문이 길어져서 죄송합니다...
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
변수 상태유지
안녕하세요 오랜만에 학습하다 궁금한점이 있어 문의 남깁니다. razor 페이지에 변수를 선언해 해당 값을 화면에 보여주는 작업을 할 시 사이드바를 통해 다른페이지로 이동했다 돌아오면 변수가 없어지게 됩니다. 이를 해결하기 위해 클래스를 선언 후 해당 클래스를 종속성 주입을 통해 해당 클래스 내부의 변수를 사용하는 식으로 해결했는데 이 방법이 정석적인 방법인지 궁금합니다. cs파일의 클래스를 통해 함수를 구현하는데 해당 함수에서 다른 razor페이지에 직접 접근해 데이터를 화면에 뿌리는 방법이 있는지 궁금합니다. 현재는 방법을 찾지 못해 cs파일을 사용하지 않고 해당 함수 내용을 razor 파일의 code 부분에 해당 함수 내용을 구현해 사용하고 있습니다. 배열에 값을 입력하고 입력되는 값들을 화면에 보여주기 위해 StateHasChanged() 를 사용해 보여주었는데 해당 페이지에서는 잘 동작을 하는데 다른 페이지로 이동 후 다시돌아오면 StateHasChanged()가 작동하지 않습니다. 디버그 확인해보니 페이지를 이동했다 와도 배열에 값을 정상적으로 삽입이 됩니다. 다른 이벤트(버튼 클릭) 등이 발생하면 화면에 보여주는 작업이 동작하는데 StateHasChanged()로는 동작 안하는게 이해가 안갑니다... 디버그 모드로 확인 시 StateHasChanged를 수행하기는 하는데 화면에는 변화가 없습니다. 이런경우가 있나요? 항상 감사합니다.
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
프로젝트 기본 구조
blazor가 실행되면 어떤 식으로 동작하는지에 대해 고민하다가 궁금한 점이 생겨 질문 남깁니다.실행되면 program.cs를 거쳐 host.cshtml로 가게되는데 이게 루트페이지로서 페이지 처음 요청하면 이 페이지가 반환된다는데 이 페이지의 역할이 뭔지 모르겠습니다.이 호스트 페이지는 루트 App 구성 요소(App.razor)가 렌더링되는 위치를 지정합니다. 라고 하는데 이게 무슨의미인지 모르겠습니다.App.razor 에서 Router 컴포넌트를 사용해 브라우저 탐색을 가로채서 (intercept) 요청된 주소와 일치하는 페이지를 렌더링 한다는데 intercept한다는게 무슨 의미인지 잘 모르겠습니다.
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
RenderMode
페이지 로드 시 수명 함수들이 2번씩 실행되는 게 render mode 때문이라고 말씀해주셨는데 문서를 확인해도 Server와 ServerPrerendered의 차이점을 잘 모르겠네요혹시 간단하게 설명해 주실 수 있을까요?
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
수명 구성 요소에 대한 질문
SetParametersAsync 함수는 라우팅된 파라미터로 받은 변수를 처리하는 함수라고 이론 떄 들었는데 실전 강의에서는 데이터를 받기 전에 함수가 실행되어 빈 값이 출력되었다고 설명하셨습니다.이렇게 되면 실제로 파라미터로 받은 데이터를 쓸 수 있는 함수는 OnInitialized() 인가요?그렇게 되면 이론에서 설명하셨던 SetParametersAsync 함수가 라우팅된 변수를 처리하는 함수라는 설명과 상충되는게 아닌가요?? SetParametersAsync ~ OnAfterRender의 4가지 함수는 페이지가 로드될 때마다 모두 다 실행되는 함수인가요?이론강의에서는 1개이상의 함수가 실행된다고 하셨는데 코드로 볼때는 4가지 다 동작하는 상황만 나온거 같아 궁금합니다.
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
SPA에 대한 질문 -2
위 질문 댓글에 작성했는데 혹시나 시스템상 새로운 댓글은 확인이 어려우실까 싶어 새 글로도 작성했습니다.댓글에 답변해주시면 해당글은 삭제하도록 하겠습니다. 자세한 답변 감사합니다.그런데 스택오버플로우에 질문했을때는 사람들이 다 블레이저 서버는 SPA라고 해서 혼란스럽네요 ㅠ잘못된 정보인지 아니면 블레이저 서버자체가 SPA, MPA 라고 딱 떨어지는 개념이 원래부터 아닌건지 모르겠네요.제가 받은 답변은블레이저 서버는 SSR 이면서 SPA이다.처음 로드된 페이지는 응용프로그램이다.클라이언트 측 코드는 "페이지"를 업데이트하거나 "페이지" 사이를 이동하기 위해 DOM의 비트를 변경한다."페이지"는 HTML 페이지가 아닌 components이다.요정도인데 사실 마지막 HTML 페이지가 아닌 컴포넌트이다 라는 부분은 잘 이해가 안가고제가 이해한 느낌은 블레이저 서버는 랜더링이 필요할때 완전한 페이지 전체를 전달하고받지만 실제로 랜더링할때 SPA로 구현이 된다 라고 이해했는데 맞는지 잘 모르겠습니다.도움이 되실까싶어 제가 질문한 글 링크 남깁니다.c# - Is Blazer server SSR and SPA? - Stack Overflow추가..방금 학습하다 느낀바로는 MainLayout.razor에서 body만 변경되는 형태로 페이지 전환이 이루어진다.업데이트 발 생시 랜더링 될때 diff(차이점)만 계산하여 DOM을 편집한다.=> SPA 방식이다이렇게 이해했는데 맞는지도 확인 부탁드립니다.이해가 부족해 질문이 너무 중구난방이라 죄송합니다...
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
SPA에 대한 질문
blazor 관련 위키를 보면 블레이저 웹어셈블리는 SPA를 구현하는 에디션이라고 나와있는걸 본적이 있습니다.또 어디서는 blazor 자체가 SPA를 구현하는 프레임워크라고 본 적도 있습니다.그러면 블레이저 서버의 경우에는 기존의 웹 어플리케이션 방식처럼 예를들면 counter 페이지에서 클릭을 하면 서버에서 완전히 새로운 페이지를 전달해주는 방식으로 동작하는 건가요?? 아니면 블레이저 서버의 경우에도 SPA 방식으로 동작하나요??혹시 샘플예제에서 page를 변경했을때 크롬의 개발자 툴의 네트워크탭에서 새로운 파일들의 변화가 없는게 spa라서 그런건가요?? 제 생각에는 네트워크탭에 변화도 없고 페이지 전환 시 깜빡임도 없어서 spa인거같기는한데...그러면 위키에는 왜 웹어셈블리에만 spa를 구현한다고 강조했나 싶기도하고 헷갈리네요...추가적으로 페이지 전체가 전달되는지 확인하는 툴이나 방법이 있다면 알려주시면 감사하겠습니다. 질문이 많고 중구난방이라 요약하면 이렇습니다...blazor server는 spa로 동작하나요?spa라면 샘플예제의 사이드바를 통해 페이지를 변경했을때 크롬 F12의 네트워크탭의 변화가 없는것도 spa 이기 때문인가요?크롬 개발자도구의 네트워크 부분을 통해 서버 통신에 관한 동작을 확인하는게 맞나요? 아니라면 다른 툴이나 방법은 어떤게 있을까요?
- 미해결ASP.NET core Blazor 디테일 강의 - 초급편
종속성 주입
강의에서 C# 파일로부터 코드를 레이저페이지로 가져오는 방법에 대해 2가지로 설명해 주셨는데 종속성 주입의 이유로 두번째 방법이 좋다고 해주셨습니다. 검색을 통해 종속성 주입에 대한 내용은 학습하였는데 어떻게 종속성 주입이 되는지 확실하지가 않아 문의드립니다. 예를들어 Test 클래스의 자식클래스를 만들게 된다면 첫번째 방법에서는 "Test test = new Test()" 를 했기때문에 저 코드가 적힌 모든 부분을 바꾸어주어야하지만 두번째 방법으로는 Program.cs에서 AddScoped<Test> 부분만 바꾸어주면 되기에 종속성이 줄어든다고 이해하면 될까요??
- 해결됨ASP.NET core Blazor 디테일 강의 - 초급편
페이지 생성
페이지 생성하는 부분에서 razor 페이지를 어떻게 생성하는지 모르겠어요."비어있는 razor 페이지"로 생성하면 자동으로 cshtml파일로 생성되는데 razor파일은 어떻게 생성하나요??