Blazor Server 에 대해 공부하면서 의문점이 생겼습니다.
Blazor Server에 대한 설명으로 공식문서에는 다음과 같이 작성되어 있습니다.
UI 업데이트, 이벤트 처리 및 JavaScript 호 출은 WebSockets 프로토콜을 사용하여 SignalR 연결을 통해 처리됩니다. 연결된 각 클라이언트와 연결된 서버의 상태를 회로라고 합니 다. 회로는 특정 네트워크 연결에 연결되지 있지 않으므로 일시적 네트워크 중단 및 연결이 끊어진 후 클라이언트의 서버 재연결 시도를 허용할 수 있습니다.
전형적인 서버 렌더링 앱의 경우, 여러 브라우저 화면(탭 또는 iframes)에서 동일한 앱을 열어도 일반적으로 서버의 리소스 수요가 증가 하지 않습니다. Blazor Server 앱의 경우, 각 브라우저 화면에 개별 회로 및 별도의 서버 관리 구성 요소 상태 인스턴스가 필요합니다.
이 글을 읽고 제가 이해한 것은 다음과 같습니다.
앱은 클라이언트와 Signal R 을 통해 연결되고 이 연결을 회로라고 부른다.
앱의 button, input 등과 같은 요소들은 회로 라고 불리는 통로로 서버와 연결되며 서버에는 각 요소의 상태를 관리하기 위한 각각의 컴포넌트 상태 인스턴스가 존재한다.
예를들어 button1, button2, input 1, input2가 있다면 button1 state, button2 state, input 1 state, input2 state라는 컴포넌트 상태 인스턴스가 DOM의 요소와 매핑되어 서버에 생성된다.
연결된 앱(tab 또는 iframe 등)의 개수 만큼 회로가 존재하기 때문에 많은 앱이 연결된다면 컴포넌트 상태 관리 인스턴스도 증가한다.
앱이 정상 종료되면 앱과 관련된 회로는 끊어지고 컴포넌트 상태 관리 인스턴스는 해제된다.
비정상 종료라면 회로는 일정시간 유지되며 재연결을 기다리지만 시간이 끝나면 리소스가 해제된다.
앱의 button, input 등과 같은 요소들은 회로 라고 불리는 통로로 서버와 연결되며 서버에는 각 요소의 상태를 관리하기 위한 각각의 컴포넌트 상태 인스턴스가 존재한다.
아닙니다. 여기서 컴포넌트(구성요소)의 상태 인스턴스는 element(요소)와 다르게 생성됩니다. 여기서 컴포넌트란 Markup(HTML), CSS, C#(원래는 JS여야 하겠죠)를 합친 재사용 가능한 커스텀 UI 요소로 만들어지는 것입니다.
Blazor 앱은 Razor 구성 요소 , 비공식적으로 Blazor 구성 요소로 알려진 구성 요소 로 빌드됩니다. 구성 요소는 동적 동작을 사용하도록 설정하는 처리 논리가 있는 UI(사용자 인터페이스)의 자체 포함 부분입니다. 구성 요소는 프로젝트 간에 중첩, 재사용, 공유될 수 있으며 MVC 및 Razor Pages 앱에서 사용될 수 있습니다.
아 그럼 컴포넌트 내부의 각 요소마다 컴포넌트 상태 관리 인스턴스가 생기는것이 아니라 하나의 컴포넌트에 하나의 컴포넌트 상태 관리 인스턴스가 생기는건가요?
예를들어 다음과 같은 컴포넌트가 있을 때 id, pw, btn 각각 상태관리 인스턴스가 생성되는 것이 아닌 login컴포넌트와 매핑되는 상태 관리 인스턴스 하나만 생성되고 관리되는건가요? 만약 한 페이지안에 동일한 컴포넌트가 2개이상 존재한다면 두개이상의 상태 관리 인스턴스가 생성되는것이구요.