Hyperlane으로 개발한 학교 API 프로젝트 경험: Rust 초보자의 프레임워크 사용기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- Rust 초보자 및 학생 개발자
- 난이도: 중간 수준 이하 (Rust 기초 지식 필요)
핵심 요약
- Hyperlane의 Context API 간결성:
ctx.get_request_method().await
와 같이 복잡한 메서드 체이닝을 대체함 - Middleware Onion Model: 인증 로직을 중간 처리기로 분리하여
ctx.aborted()
로 요청 중단 가능 - WebSocket 생명주기 최적화:
ctx.closed()
로 연결 종료 처리, 100명 동시 접속 시 안정적 성능 - 성능 지표: wrk 테스트에서 32만 QPS 달성, Gin 대비 30% 빠름
섹션별 세부 요약
1. 요청/응답 처리 단순화
ctx.get_request_method().await
로 요청 메서드 추출 가능, 기존get_request().await.get_method()
보다 간결- 응답 상태 코드 설정 시
set_response_status_code
와 같이 명확한 이름 사용 #[methods(get, post)]
로 라우팅 어노테이션 단순화,#[get]
으로도 사용 가능
2. Middleware Onion Model 적용
- 인증 → 로깅 → 컨트롤러 → 응답 포맷팅 순서로 요청 처리 (Mermaid 다이어그램 참고)
ctx.aborted()
로 인증 실패 시 중간 처리기에서 즉시 요청 중단 가능- 중간 처리기 순서 오류 시, 예: 로깅이 인증 이후로 설정 시 "인증 실패" 로그 누적 발생
3. WebSocket 생명주기 설계
- 연결 → 핸드셰이킹 → 콜백 → 중간 처리기 → 메시지 처리 → 응답 단계로 정의
ctx.closed()
로 사용자 퇴장 시 연결 종료 처리, 100명 동시 연결 시 리소스 사용량 안정적- Node.js 기반 동일 기능 테스트 시 50명에서 서버 다운 발생
4. 정규 표현식 기반 동적 라우팅
server.route("/goods/{id:\\d+}")
으로 ID 숫자 제한 가능- 잘못된 정규 표현식(예:
{id:\\D+}
) 입력 시 404 에러 발생, 라우팅 오류 처리 기능
5. 성능 테스트 결과
wrk -c360 -d60s
명령어로 테스트, QPS 32만 달성- Gin 대비 30% 성능 우위, Tokio 기반 라이브러리보다는 느리지만 학교 규모 서비스에 적합
6. 버전별 기능 진화
- v4.22.0:
ctx.aborted()
로 요청 중단 기능 추가 - v5.25.1:
ctx.closed()
로 연결 강제 종료 기능 추가, 장기 연결 리소스 누수 해결
결론
- Hyperlane은 Rust 초보자도 쉽게 사용 가능한 높은 성능의 웹 프레임워크
- 중간 처리기와 WebSocket 생명주기 관리 기능을 통해 서버 안정성 확보
- wrk 테스트 결과를 바탕으로 학교 규모 서비스에 적합한 성능 제공
- 문서의 예제 코드 그대로 사용 가능으로 학생 개발자에게 추천