AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

초보자용 하이퍼레이인 프레임워크 자기학습 노트: 나의 여정

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

- Rust 언어를 사용하는 웹 개발자

- 성능 중심의 웹 프레임워크를 탐구하는 초보자

- 비동기 프로그래밍 및 미들웨어 구조에 관심 있는 개발자

- 난이도: 중간 (Rust 언어 기초 지식 필요)

핵심 요약

  • 성능 우수성 강조: Hyperlane은 Tokio 기반 비동기 아키텍처로 324,323 QPS 기록 (Gin보다 25% 빠름)
  • 코드 간결성: ctx.get_request_method().await와 같은 연쇄 호출 방식으로 코드 가독성 향상
  • 미들웨어 시스템: 양파 모델(onion model) 구조로 확장성과 유연성 제공
  • 버전 관리 주의점: v4.89+에서 ctx.aborted().await와 같은 API 변경 사항 발생

섹션별 세부 요약

1. 프레임워크 소개 및 초기 설정

  • Cargo.toml에서 hyperlane = "5.25.1" 명시하여 의존성 추가
  • Context 객체를 통해 요청 메서드(get_request_method().await)와 경로(get_route_param("id").await) 추출
  • Rust의 ? 연산자와 유사한 연쇄 호출 구조로 중첩된 메서드 호출 간결화

2. 응답 API 설계

  • send() vs send_once()

- send(): TCP 연결 유지

- send_once(): 즉시 연결 종료

  • 예시 코드:

```rust

ctx.set_response_body("Data").send().await;

ctx.set_response_body("Bye").send_once().await;

```

3. 미들웨어 워크플로우

  • 요청/응답 처리 순서:
  • *요청 → 미들웨어 1 → 미들웨어 2 → 컨트롤러 → 미들웨어 3 → 미들웨어 4 → 응답**
  • 로그 미들웨어 구현 예시:

```rust

async fn log_middleware(ctx: Context, next: Next) {

let start = Instant::now();

next.run(ctx).await;

println!("<- {}ms", start.elapsed().as_millis());

}

```

4. 라우팅 구현 및 트랩

  • 동적 라우팅:

```rust

server.route("/user/{id}", user_handler).await;

```

  • 정규식 라우팅 시 주의사항:

```rust

server.route(r"/user/{id:\d+}", user_handler).await; // 생략 불가능한 백슬래시

```

5. 성능 테스트 및 분석

  • wrk 테스트 결과:

| 프레임워크 | QPS |

|------------|---------|

| Hyperlane | 324,323 |

| Rocket | 298,945 |

| Gin (Go) | 242,570 |

| Express | 139,412 |

  • 성능 비결: Tokio 비동기 처리와 zero-copy 기술 활용

6. 버전 관리 및 API 변경

  • v4.89+ 이후 변경 사항:

```rust

if should_abort { ctx.aborted().await; } // 신규 API

```

  • 버전 진화 다이어그램:

```mermaid

graph TD

v3[3.0.0] --> v4[4.0.0]

v4 --> v4_22[4.22.0]

v4_22 --> v4_89[4.89.0]

v4_89 --> v5_25[5.25.1]

```

결론

  • 핵심 팁: Cargo.toml에서 정확한 버전 명시 (예: hyperlane = "5.25.1")로 API 호환성 보장
  • 진행 계획: WebSocket 기반 실시간 로깅 시스템 구현
  • 결론: Hyperlane은 Django와 비교해 기능은 부족하지만, 고성능 웹 서비스 개발에 적합한 "비밀 무기"로 평가됨