하이퍼레이인 프레임워크 경험: 시작부터 성능 최적화까지
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 초보 개발자 및 Rust 기반 웹 프레임워크에 관심 있는 사람들
- 난이도: 중간 (Rust 언어 기본 지식 필요)
핵심 요약
- Hyperlane의 clean API 설계는
ctx.get_request_method().await
와 같은 간결한 코드로 복잡한 로직을 쉽게 처리할 수 있음 - 미들웨어 온리온 모델을 통해
auth_middleware
와 같은 인증 로직을 비즈니스 로직과 분리하여 확장성 향상 - 성능 테스트 결과: Hyperlane은
324,323 QPS
를 기록하며 Tokio(340,130 QPS) 다음으로 높은 성능
섹션별 세부 요약
1. 인트로덕션
- 하이퍼레이인은 Rust 기반의 고성능 웹 프레임워크로, Web 개발 방식을 변화시켰음
- 초보자에게도 접근성이 좋은
Context(ctx)
추상화 제공
2. Context 추상화
- 이전 프레임워크에서
ctx.get_request().await.get_method()
처럼 복잡한 코드를 사용해야 했음 - 하이퍼레이인은
ctx.get_request_method().await
로 단일 줄로 처리 가능 - 코드 가독성 향상 및 중첩 메서드 호출 제거
3. RESTful API 구현
#[get("/user")]
와 같은 매크로 사용으로 라우트 정의 간소화async fn user_profile(ctx: Context)
와 같은 비동기 처리로 HTTP 세부사항을 무시하고 비즈니스 로직 집중 가능
4. 응답 처리
ctx.set_response_status_code(404).await
와 같은 명확한 API로 상태 코드, 헤더, JSON 응답 설정- 대량 파일 전송 시 청크 전송 기능(
send_body().await
) 지원
5. 미들웨어 온리온 모델
Authentication → Logging → Route → Response Formatting → Compression
순서로 요청 처리auth_middleware
예시:
async fn auth_middleware(ctx: Context, next: Next) -> Result {
if !validate_token(&ctx).await {
return Err(Error::Unauthorized);
}
next.run(ctx).await
}
6. 동적 라우팅
- 정적 라우트:
server.route("/about/", about_page).await;
- 동적 라우트:
/post/{slug}
와/user/{id:\\d+}
등 정규 표현식 제약 적용 가능 ctx.get_route_param("slug").await
로 파라미터 추출
7. 성능 테스트 결과
wrk -c360 -d60s
명령어로 테스트- QPS 비교:
- Tokio: 340,130
- Hyperlane: 324,323
- Rocket: 298,945
- Gin (Go): 242,570
- Rust의 타입 시스템과 비동기 프로그래밍이 성능에 기여
결론
- Hyperlane의 clean API와 미들웨어 온리온 모델은 개발 효율성과 확장성을 동시에 제공
- 성능 테스트 결과를 바탕으로 Rust 기반 웹 프레임워크의 잠재력을 확인 가능
- WebSocket 지원과 마이크로서비스 아키텍처 구축을 위한 후속 조사 계획
- Rust의 zero-cost abstraction과 안전성이 하이퍼레이인의 핵심 강점으로 작용함