🔥 Blazor에서 Razor 컴포넌트는 자바스크립트를 대체할 수 있을까?

 



Blazor를 사용하다 보면 Razor 컴포넌트의 @code {} 안에서 버튼 클릭 이벤트 같은 걸 직접 처리하게 된다.
이걸 보면서 "어? 이거 자바스크립트 하는 역할을 C#이 하네?" 라는 생각이 든다면, 그게 맞다. 😎

이 글에서는 Blazor가 클라이언트 단에서 어떻게 동작하는지,

그리고 JavaScript를 얼마나 대체할 수 있는지를 정리하려한다. 



1. Razor 컴포넌트는 클라이언트 코드다.

Blazor에는 두 가지 실행 방식이 있다. 

Blazor 종류 설명
Blazor Server 서버에서 실행되고, SignalR을 통해 브라우저와 통신
Blazor WebAssembly (WASM) C# 코드가 브라우저 안에서 직접 실행됨 (JavaScript 대체!)

 

즉, Blazor WebAssembly완전히 클라이언트 측 C# 실행이라고 볼 수 있다.


2. @code {} 안의 C# 메서드는 JavaScript 이벤트 핸들러 느낌

<button @onclick="HandleSubmit">Submit</button>

@code {
    private void HandleSubmit()
    {
        Console.WriteLine("제출됨!");
    }
}


이 구조는 마치 JavaScript에서 onclick 이벤트 핸들러를 작성한 것과 같다.

HandleSubmit() 함수는 Blazor에서 직접 바인딩되어 실행되며, C#으로 UI와의 상호작용을 완벽하게 제어할 수 있다.

 

 

Blazor는 이렇게 JavaScript 역할을 대신함

기능 JavaScript Blazor (C#)
UI 렌더링 DOM 조작 Razor + 컴포넌트
이벤트 처리 onclick, onchange @onclick, @onchange
비동기 처리 fetch().then(...) async/await, HttpClient
상태 관리 전역 변수, 라이브러리 C# 필드, StateHasChanged()
라이프사이클 DOMContentLoaded OnInitializedAsync()

 

 


3. 그럼 JavaScript는 이제 안 써도 되는건가? 

 

대부분은 C#으로 충분!

하지만 다음과 같은 경우에는 JavaScript Interop을 사용할 수 있음.

  • 브라우저 API 직접 접근 (window.scrollTo 등)
  • 외부 JS 라이브러리 사용 (예: Chart.js, Mapbox 등)
  • 복잡한 사용자 경험 구현

※ JavaScript 호출 예시 (JSInterop)

@inject IJSRuntime JSRuntime

<button @onclick="ShowAlert">Alert 띄우기</button>

@code {
    private async Task ShowAlert()
    {
        await JSRuntime.InvokeVoidAsync("alert", "헬로 자바스크립트!");
    }
}

 

 



4. 요약 정리

질문 답변
Razor 컴포넌트는 클라이언트냐? ✅ 예, 특히 WASM은 완전 클라이언트 코드
@code 함수는 JS 이벤트랑 같냐? ✅ 맞아! `onclick` 같은 역할
JavaScript 없이 가능? ✅ 거의 다 가능! API, UI, 비동기 다 C#으로!
JavaScript 완전 안 써도 되냐? ⛔ 아주 일부는 JSInterop 필요함

 


 

✍️ 마무리

Blazor는 C#만으로도 SPA(Single Page Application)을 만들 수 있게 해주는 혁신적인 프레임워크.
JavaScript 없이도 대부분의 UI 상호작용, API 호출, 상태 관리를 할 수 있음

물론, JSInterop을 통해 JS와도 잘 연동되기 때문에 “필요한 만큼만 JavaScript”를 사용할 수 있다는 점도 큰 장점.