하이퍼레이인 런트 HTTP 프레임워크 활용 경험
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상: Rust 초보자~중급 개발자, 분산 시스템 프로젝트 수행자
- 난이도: 중간 (비동기 프로그래밍 및 미들웨어 개념 이해 필요)
핵심 요약
- 프레임워크 성능:
hyperlane = "5.25.1"
버전의 고성능, 경량 웹 프레임워크 특징 - 코드 간결성:
ctx.get_request_method().await
와 같은 직접 접근 API 제공 - 비동기 처리:
async fn
생략 시 발생하는 컴파일러 오류 주의 - 응답 처리:
send()
vssend_once()
의 TCP 연결 유지 여부 차이 중요
섹션별 세부 요약
1. 프레임워크 도입 및 설정
Cargo.toml
에hyperlane = "5.25.1"
의존성 추가- 비동기 API 기반의 고성능 웹 서비스 개발 목적
2. `Context` 추상화 활용
- 기존 프레임워크의
ctx.get_request().await.get_method()
방식 대비 - 단일 호출
ctx.get_request_method().await
로 코드 가독성 향상 - 자동 생성 getter/setter 메서드로
request.method
매핑
3. REST API 구현 시 고려사항
async fn user_api(ctx: Context)
와 같이 비동기 핸들러 정의async
키워드 누락 시 컴파일 오류 발생 (30분 이상 디버깅 필요)
4. 응답 API 비교 분석
| 작업 유형 | 예시 코드 | 목적 |
|---|---|---|
| 응답 가져오기 | ctx.get_response().await
| 전체 응답 객체 획득 |
| 상태 코드 설정 | ctx.set_response_status_code(404).await
| HTTP 404 설정 |
| 응답 전송 | ctx.set_response_body("Data").send().await
| 연결 유지 후 응답 전송 |
| 즉시 종료 | ctx.set_response_body("Bye").send_once().await
| 연결 종료 후 응답 전송 |
5. 미들웨어 워크플로우 (온리온 모델)
- 요청 흐름:
Middleware 1 (외부)
→Middleware 2 (내부)
→Controller
- 응답 흐름:
Controller
→Middleware 2 (응답)
→Middleware 1 (응답)
→Response
6. 로깅 미들웨어 구현 예시
async fn log_middleware(ctx: Context, next: Next) {
let start_time = Instant::now();
println!("Request started at: {:?}", start_time);
next.await;
let duration = start_time.elapsed();
println!("Request duration: {:?}", duration);
}
Next
타입을 통해 미들웨어 체인 처리 가능
결론
- 비동기 핸들러 정의 시
async
키워드 누락 주의 - 미들웨어 구조는
onion model
을 기반으로 설계 send()
vssend_once()
선택은 장기 연결 유지 여부에 따라 결정- 실무 적용 시:
hyperlane
의Context
API를 활용한 간결한 요청/응답 처리 추천