# Rust를 Non-Rust 서버에서 사용해 성능 개선하기

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17549](https://news.hada.io/topic?id=17549)
- GeekNews Markdown: [https://news.hada.io/topic/17549.md](https://news.hada.io/topic/17549.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-11-02T10:04:01+09:00
- Updated: 2024-11-02T10:04:01+09:00
- Original source: [github.com/pretzelhammer](https://github.com/pretzelhammer/rust-blog/blob/master/posts/rust-in-non-rust-servers.md)
- Points: 26
- Comments: 4

## Summary

Rust를 점진적으로 도입하여 Non-Rust 서버의 성능을 개선하는 다양한 전략을 소개하며, CPU 병목을 해결하기 위한 Rust의 효과적인 사용 방법을 설명합니다. 각 Tier별로 Rust의 도입 수준에 따른 성능 개선 결과를 비교하며, Tier 3의 네이티브 함수 사용이 가장 큰 성능 향상을 가져온다고 합니다.

## Topic Body

- Non-Rust 서버(JavaScript, Python, Java 등)에서 점진적으로 Rust를 추가하는 전략 소개  
- CPU 병목으로 인해 성능 요구 사항을 충족하지 못하는 핫 함수를 식별하고, Rust로 대체 구현하는 것이 목표  
- 전략은 Tier(Rust 채택 수준)로 구분되며, Tier 0은 Rust 미사용, 마지막 Tier는 전체 서버를 Rust로 재작성  
  
### 전략  
  
#### Tier 0: Rust 미사용  
- Node.js 서버에서 QR 코드 생성 엔드포인트 구현  
- 기준 성능: 초당 1464 요청, 평균 지연 68ms, p99 지연 96ms, 평균 응답 크기 1506바이트, 메모리 1353MB   
  
#### Tier 1: Rust CLI 도구  
- QR 코드 생성 함수를 Rust로 재작성하고 CLI 도구로 컴파일  
- 호스트 서버에서 CLI 도구 호출  
- 기준 대비 성능: 초당 요청 1.76배 증가, 평균 지연 0.57배 감소, 평균 응답 크기 0.52배 감소, 메모리 0.92배 감소  
  
#### Tier 2: Rust Wasm 모듈   
- Rust 함수를 Wasm 모듈로 컴파일하고 호스트 서버에서 Wasm 런타임을 사용해 로드 및 실행  
- Node.js 서버에는 wasm-bindgen 사용  
- 기준 대비 성능: 초당 요청 2.03배 증가, 평균 지연 0.50배 감소  
- 수동으로 Wasm 바인딩 작성하는 방법 설명 (다른 언어 사용자를 위해)  
  
#### Tier 3: Rust 네이티브 함수  
- Rust로 함수 작성, 네이티브 코드로 컴파일, 호스트 런타임에서 로드 및 실행  
- Node.js에는 napi-rs 사용  
- 기준 대비 성능: 초당 요청 3.75배 증가, 평균 지연 0.26배 감소  
  
#### Tier 4: Rust 재작성  
- 호스트 서버 전체를 Rust로 재작성  
- 실제로는 호스트 서버 일부만 재작성하는 것이 현실적  
- 기준 대비 성능: 초당 요청 4.93배 증가, 평균 지연 0.21배 감소, 메모리 0.01배 감소 (13MB 사용)  
  
### 결론  
- 모든 전략이 좋지만, Tier 3이 가장 효과적  
- 오프더셸프 바인딩 생성기 라이브러리를 사용할 수 있다면 Rust로 네이티브 함수 작성이 쉬우며 성능에 큰 영향

## Comments



### Comment 30874

- Author: readiz
- Created: 2024-11-06T13:56:58+09:00
- Points: 1

오........ 여러 일들을 잡부처럼 하다가 둘 다 조금씩 쓰게 되었는데 굉장히 좋은 정보네요.

### Comment 30713

- Author: johnnydev
- Created: 2024-11-04T13:56:28+09:00
- Points: 1

최근 rust보고 있는데. 흥미로운 글이네요.

### Comment 30711

- Author: cosine20
- Created: 2024-11-04T13:29:45+09:00
- Points: 1

상당히 좋은 글이네요. 이런게 Rust를 제대로 사용한 예죠.

### Comment 30667

- Author: regentag
- Created: 2024-11-02T23:11:10+09:00
- Points: 2

전에는 C/C++로 해결했던 영역에서 확실히 Rust가 인기있나보네요.
