Rust로 웹앱을 만들 때 API 계층과 클라이언트 빌드 단계를 덜어내는 방법
서버에서 데이터를 조회하고 HTML을 렌더링하는 동안, 버튼 클릭 같은 작은 상호작용은 브라우저에서 즉시 반응하게 만듭니다. 별도의 API 서버를 세우거나 JavaScript 번들을 따로 빌드할 필요 없이, Rust 코드로 작성한 로직이 서버와 클라이언트 양쪽에서 자연스럽게 동작합니다. Topcoat는 이러한 전방위 웹 애플리케이션 개발을 위한 Rust 프레임워크입니다.
서버와 클라이언트를 잇는 반응성
컴포넌트는 비동기 함수로 작성되어 데이터베이스에 직접 쿼리를 보낼 수 있습니다. 이는 전통적인 웹 개발에서 필요한 별도 API 계층의 부하를 줄여줍니다. $(...) 표현식은 타입 체크가 된 Rust 코드로, 초기 렌더링 시 서버에서 평가되고 브라우저에서는 JavaScript로 변환되어 즉시 실행됩니다. wasm 번들이나 클라이언트 빌드 단계 없이도 인터랙티브한 UI를 구현할 수 있습니다. 서버 업데이트가 필요한 경우 #[shard]를 사용하면 해당 컴포넌트만 서버에서 다시 렌더링되어 HTML이 교체됩니다.
모듈 구조를 따르는 라우팅과 템플릿
라우트 트리는 앱의 모듈 구조에서 자동으로 유추되며, 별도의 빌드 단계 없이 동작합니다. view! 매크로는 HTML과 Rust의 제어 흐름을 자연스럽게 결합하여 템플릿을 작성하게 합니다. for 루프나 if 조건문처럼 익숙한 Rust 문법을 템플릿 안에서 그대로 사용할 수 있습니다. topcoat fmt 명령어를 사용하면 코드베이스 전체의 매크로 형식을 자동으로 정리해 줍니다.
수정 가능한 UI 컴포넌트와 자산 관리
Topcoat UI는 Tailwind와 shadcn/ui에서 영감을 받은 컴포넌트 라이브러리입니다. topcoat ui 명령어로 컴포넌트를 프로젝트에 복사해 오면, 디자인과 기능을 자유롭게 수정할 수 있습니다. 자산 번들러는 컴파일된 바이너리에서 asset! 호출을 스캔하여 파일을 로컬 디렉토리로 복사하거나 다운로드합니다. 이를 통해 브라우저 캐싱을 적극 활용하여 자산을 효율적으로 서빙합니다. 웹 폰트와 아이콘 통합, Tailwind CSS 지원도 내장되어 있습니다.
초기 단계 프로젝트의 특성
이 프로젝트는 초기 단계이며 실험적인 성격을 띠고 있어, 깨지는 변경 사항이 발생할 수 있습니다. 정적 내보내기, 더 많은 반응성 기능, OpenAPI 엔드포인트, 인증, 백그라운드 작업 등은 로드맵에 계획된 기능으로 아직 구현되지 않았습니다. 배포 문서나 이미지 최적화, 마크다운 지원 등도 향후 추가 예정으로 명시되어 있습니다. 도입 전에는 이러한 미완성 상태와 변경 가능성을 충분히 고려해야 합니다.