# Dioxus 0.5: 러스트로 개발하는 웹, 데스크톱, 모바일 앱

> Clean Markdown view of GeekNews topic #14052. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14052](https://news.hada.io/topic?id=14052)
- GeekNews Markdown: [https://news.hada.io/topic/14052.md](https://news.hada.io/topic/14052.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-29T10:35:22+09:00
- Updated: 2024-03-29T10:35:22+09:00
- Original source: [dioxuslabs.com](https://dioxuslabs.com/blog/release-050/)
- Points: 3
- Comments: 1

## Topic Body

### Dioxus 0.5: 신호 재작성, 수명 제거, CSS 핫리로딩 등

- Dioxus Labs에서는 연간 한 번의 재작성만 허용하는 비공식 규칙이 있음.
- Dioxus는 Rust로 GUI를 구축하기 위한 라이브러리로, 원래 Yew의 재작성으로 시작됨.
- Dioxus 0.5는 커뮤니티의 요청에 따라 더 단순하고 견고하며 세련된 방향으로 변경됨.

### 새로운 기능들

- `dioxus-core`의 완전한 재작성으로 모든 unsafe 코드 제거.
- `use_state`와 `use_ref`를 사용하지 않고 복제 없는 `Signal` 기반 API로 전환.
- 모든 수명(lifetimes)과 `cx: Scope` 상태 제거.
- 모든 플랫폼을 위한 앱 시작을 위한 단일 `launch` 함수 도입.
- Tailwind와 Vanilla CSS를 지원하는 자산 핫리로딩.
- 이벤트 재작성으로 각 플랫폼의 기본 `WebSys` 이벤트 유형에 접근 가능.
- 컴포넌트 확장으로 요소 속성 추가(예: Link가 `<a/>` 속성을 모두 받음).
- 통합된 오류 경계 및 서버 퓨처와 Suspense 통합.
- 데스크탑 조정 속도 5배 향상 및 바이트 스트리밍을 위한 사용자 정의 자산 핸들러.
- 서버 함수 스트리밍 및 전체 스택 핫리로딩.
- 많은 QoL 개선, 버그 수정 등.

### 수명 문제

- Dioxus를 더 단순하게 만들기 위해 모든 수명을 제거함.
- 수명 문제는 Rust 초보자를 쉽게 겁먹게 하고, 경험 많은 Rust 개발자들도 혼란스러워함.
- Dioxus 0.5는 수명과 `Scope`를 제거하고 `Copy` 상태 관리 솔루션인 신호를 도입함.

### 스코프와 수명 제거

- 새 버전에서는 스코프와 `'bump` 수명이 제거됨.
- 컴포넌트 선언과 컴포넌트 내 런타임 함수 사용이 훨씬 쉬워짐.

### 모든 Unsafe 코드 제거

- `'bump` 수명과 스코프 제거로 많은 unsafe 코드를 제거함.
- **dioxus-core 0.5에는 unsafe 코드가 없음**.

### 신호(Signals)

- 컴포넌트의 핵심 상태 기본 요소로서 신호 도입.
- `Signal&lt;T&gt;`는 내부 `T` 값이 아니더라도 `Copy`임.
- 신호는 더 똑똑한 구독을 제공하여, 신호를 읽는 컴포넌트만 재렌더링됨.

### CSS 핫 리로딩

- CSS 파일의 핫리로딩 지원으로, `dx` CLI가 파일을 감시하고 앱에 즉시 업데이트를 스트리밍함.

### 이벤트 시스템 재작성

- dioxus 0.5는 각 플랫폼의 기본 이벤트 유형을 노출하고, 플랫폼 간 API를 제공하는 트레이트를 도입함.

### 크로스 플랫폼 출시

- 새로운 크로스 플랫폼 API를 통해 동일한 애플리케이션으로 여러 플랫폼을 쉽게 대상으로 삼을 수 있음.

### 자산 시스템 베타

- 새로운 자산 시스템인 manganis는 CLI와 통합되어 애플리케이션 내의 자산을 확인, 번들링 및 최적화함.

### 데스크탑 렌더링 속도 5배 향상

- 렌더링 속도 향상을 위한 여러 최적화를 구현함.

### 속성 확장

- 특정 요소에 추가 기능을 제공할 때 유용함.

### 속성 축약

- 속성을 요소와 컴포넌트에 전달할 때 속성 축약 구문 사용 가능.

### 다중 줄 속성 병합

- 조건부 속성을 쉽게 만들 수 있도록 속성 병합 기능 추가.

### 서버 함수 스트리밍

- 서버 함수가 클라이언트와 데이터를 스트리밍할 수 있도록 지원함.

### 풀스택 CLI 플랫폼

- `dx` 명령을 사용하여 풀스택 앱을 서비스할 수 있음.

### 라이브뷰 라우터 지원

- 라이브뷰 앱에서 라우터가 바로 작동함.

### 사용자 정의 자산 핸들러

- 데스크탑에서 사용자 정의 자산 핸들러를 지원하여 브라우저로 데이터를 효율적으로 스트리밍할 수 있음.

### 네이티브 파일 처리

- 데스크탑에서 파일 드롭을 제대로 지원함.

### 오류 처리

- 오류 경계와 throw 트레이트를 사용하여 앱에서 오류를 쉽게 처리할 수 있음.

### 핫리로딩 기본값 및 데스크탑용 "개발" 모드

- 핫리로딩을 기본적으로 활성화하고, 데스크탑 앱 개발 경험을 크게 향상함.

### dioxus 템플릿 업데이트

- 새로운 코어 팀 멤버 Miles가 문서와 템플릿을 대대적으로 개편함.

### Dioxus-Community 및 Dioxus-std

- Dioxus Community는 중요한 생태계 크레이트를 0.5 릴리스에 맞게 업데이트함.

### 곧 출시될 기능들

- 자산 시스템의 안정화 및 통합, `.wasm`의 번들 분할, 섬(Islands) 및 재개 가능한 상호작용, 서버 컴포넌트, 개선된 개발자 도구, 모바일 및 풀스택 개편 등.

### Dioxus-Blitz 부활 미리보기

- "Blitz 2.0"으로 Servo를 통합하여 WGPU를 사용하여 Firefox를 구동하는 동일한 CSS 엔진으로 네이티브 렌더링을 할 수 있음.

### 기여 방법

- 문서 번역, "좋은 첫 이슈" 시도, 문서 개선, CLI 기여, 디스코드 커뮤니티 질문 답변 등에 기여할 수 있음.

### GN⁺의 의견

- Dioxus 0.5는 Rust 기반의 GUI 개발을 위한 중요한 업데이트로, 개발자들에게 더 쉽고 안전한 개발 환경을 제공함.
- 수명과 스코프의 제거는 Rust 개발의 복잡성을 줄이고, 신호(Signal) 기반 API는 상태 관리를 더욱 간단하게 만듦.
- CSS 핫리로딩과 이벤트 시스템의 개선은 프론트엔드 개발의 생산성을 높이는 데 기여할 것임.
- 핫리로딩과 크로스 플랫폼 런치 기능은 개발자들이 다양한 플랫폼에서 일관된 개발 경험을 가질 수 있도록 함.
- 이러한 변화는 Rust와 웹 개발 커뮤니티에 긍정적인 영향을 미칠 것으로 예상되며, 특히 Rust를 사용하여 웹 및 데스크탑 애플리케이션을 개발하는 사람들에게 유용할 것임.

## Comments



### Comment 24080

- Author: neo
- Created: 2024-03-29T10:35:23+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39852167) 
- Dioxus 0.5 버전의 변화에 대한 첫 번째 사용자의 경험
  - 작년에 Dioxus를 사용하여 Mastodon 클라이언트를 만들었는데, 전반적으로 좋은 경험이었지만 여전히 빠진 부분이 많았음.
  - Dioxus 0.5 버전의 변화로 인해 개발자가 직면했던 복잡성이 대부분 제거되었으며, 특히 생명주기(lifetimes) 제거와 끊임없는 복제(cloning) 문제가 해결되어 더 쾌적한 개발 경험을 기대함.
  - 새로운 버전을 시도해보지는 않았지만, 팀의 노력에 축하를 전함.

- SVG 지원에 대한 질문
  - 사용자는 SVG와 상호작용할 수 있는지, 예를 들어 스도쿠를 SVG로 그리고 각 셀을 클릭할 수 있는지 궁금해함.

- Rust 프로그래밍에 대한 호기심과 `generational-box` 크레이트의 작동 방식에 대한 질문
  - Rust 프로그래머는 아니지만, `generational-box` 크레이트가 어떻게 복사 없이 값을 유지하는지, 그리고 이것이 안전한지에 대해 설명을 요청함.

- Dioxus를 사용한 Freenet 홈페이지 개발 경험
  - 사용자는 Dioxus를 사용하여 Freenet의 분산 홈페이지를 개발 중이며, 이는 사람들이 Freenet을 설정할 때 처음 보게 될 분산 웹사이트임.
  - Kotlin 웹 프레임워크인 Kweb과 유사한 상태 관리와 코드에서 HTML로의 매핑 DSL 방식에 대해 긍정적인 인상을 받음.

- Dioxus의 React 성공 요소와 혁신에 대한 감상
  - 사용자는 Dioxus가 React의 성공 요소를 포착하고 그 위에 혁신을 더해 매우 빠른 속도로 출시하는 것에 대해 매우 흥분함.
  - 팀에 축하를 전하며, 이번 릴리스에서의 신호(signals) 기능을 시도해보는 것을 기대함.

- SwiftUI와 비교한 RSX에 대한 의견
  - 사용자는 RSX 대신 SwiftUI에 더 가까운 것을 선호하며, React/JSX가 2024년에 "반응형 UI" 코드로 어떻게 보일지에 대한 자신의 비전과 다름을 표현함.
  - SwiftUI가 완벽하지는 않지만, React를 사용할 때보다 코드가 더 깔끔하게 조직되고 구획화된다고 느낌.
  - JSX를 사용하는 주된 이점은 웹을 위해 만들어진 기존 라이브러리를 재사용할 수 있다는 것이지만, RSX는 개발자가 JSX에 대한 개념적 지식을 RSX로 옮길 수 있게 하는 것 외에는 "전이 가능한 가치"가 거의 없다고 주장함.
  - 사용자는 "SwiftUI but cross-platform" 프로젝트가 존재하지 않는 것에 대해 아쉬워하며, Tokamak/TokamakUI에 대해 언급하지만 아직 완성되지 않았고 활동이 줄어든 것으로 보임.

- Dioxus의 생명주기(lifetimes) 제거에 대한 우려
  - 사용자는 Dioxus에서 생명주기를 제거한 솔루션에 대해 혼란스러워하며, 이것이 성능에 어떤 영향을 미쳤는지 궁금해함.

- 웹 컴포넌트와의 통합성에 대한 질문
  - 사용자는 Yew를 사용할 때 Shoelace 컴포넌트를 잘 작동시키는 데 어려움을 겪었으며, 다른 Rust 프레임워크로 프로젝트를 다시 시도해보고 싶어함.

- 네이티브 앱 렌더링 방식에 대한 질문
  - 사용자는 Dioxus가 네이티브 앱을 렌더링하는 방식이 브라우저 인스턴스 내에서 이루어지는지 여부에 대해 궁금해함.
