하이퍼레이인 프레임워크로 만난 러스트 웹 개발의 새로운 가능성
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- *초보 러스트/웹 개발자 및 대학 수업 프로젝트 진행자**
- 난이도: 중간 (러스트 비동기 프로그래밍 및 프레임워크 개념 이해 필요)
- 기술적 배경: Rust 기초, HTTP 프레임워크 사용 경험, 비동기 프로그래밍 지식
핵심 요약
- 하이퍼레이인의 핵심 기능:
- get_request_method()
와 같은 체인 호출 방식으로 코드 가독성 향상
- 미들웨어 온리온 모델을 통한 확장성과 유연성
- Tokio 비동기 아키텍처 기반으로 높은 성능 (324,323 QPS 기록)
- 중요한 핵심 기술:
- send()
와 send_once()
의 TCP 연결 유지 여부 차이
- Cargo.toml
에서 hyperlane = "5.25.1"
버전 명시로 버전 관리 강화
- 성능 비교:
- 하이퍼레이인 > Rocket > Gin (Go) > Express (139,412 QPS)
섹션별 세부 요약
1. 프레임워크 소개 및 초기 설정
- 하이퍼레이인 정의:
- "고성능, 가벼운 러스트 HTTP 프레임워크" (공식 문서)
- Cargo.toml
에 hyperlane = "5.25.1"
의존성 추가
- 초기 사용 경험:
- get_request_method()
와 같은 체인 호출 방식으로 코드 간결화
2. RESTful API 구현 및 문제점
- 메서드 매크로 사용:
- async fn user_api(ctx: Context)
로 간단한 REST API 구현
- 발생한 문제:
- 비동기 함수에 async
키워드 누락으로 컴파일러 오류 발생
- 정규표현식 라우팅(r"/user/{id:\d+}"
)에서 백슬래시 이스케이프 필요
3. 응답 처리 API와 비교 테이블
- 응답 처리 방법:
- send()
와 send_once()
의 TCP 연결 유지 여부 차이
- set_response_body_json()
으로 JSON 응답 직렬화
4. 미들웨어 시스템 및 구현
- 미들웨어 워크플로우:
- 요청 → 미들웨어 1 → 미들웨어 2 → 컨트롤러 → 미들웨어 3 → 미들웨어 4 → 응답
- 로그 미들웨어 예시:
```rust
async fn log_middleware(ctx: Context, next: Next) {
let start = Instant::now();
println!("-> {} {}", ctx.get_request_method().await, ctx.get_request_path().await);
next.run(ctx).await;
println!("<- {}ms", start.elapsed().as_millis());
}
```
5. 성능 테스트 및 버전 관리
- wrk 테스트 결과:
- AWS t2.micro 인스턴스에서 324,323 QPS 기록 (Rocket보다 5% 높음)
- 버전 관리 변화:
- v4.89+에서 ctx.aborted().await
로 요청 중단 처리
- CHANGELOG 필수 확인 (미들웨어 실행 순서 변화)
결론
- 실무 팁:
- Cargo.toml
에서 hyperlane
버전 명시로 버전 호환성 보장
- send()
와 send_once()
의 TCP 연결 유지 여부를 명확히 구분해야 함
- 미들웨어 순서와 버전 업데이트 시 CHANGELOG 검토 필수
- WebSocket 기능 활용을 통해 실시간 로깅 시스템 구현 예정