Hyperlane 오류 처리 및 디버깅 가이드: 대학 3학년 학생의 실전 요약
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 웹 개발 초보자 및 Rust 프레임워크 사용자
- 학생 및 교육용 프로젝트 개발자
- 오류 처리 및 성능 모니터링 기술 강화를 원하는 개발자
핵심 요약
AppError
열거형과From
트레이트를 통해 오류 유형을 구조화semaphore
와tokio::time::timeout
을 활용한 동시성 제어 및 타임아웃 처리X-Trace-ID
헤더와 로깅 미들웨어로 요청 추적 및 성능 지표 모니터링
섹션별 세부 요약
1. 오류 처리 구조
AppError
열거형 정의
- NotFound
, Unauthorized
, DatabaseError(String)
, ValidationError(Vec
포함
- std::error::Error
트레이트 구현
- 오류 전환 메커니즘
- DatabaseError
를 AppError::DatabaseError
로 변환하는 From
트레이트 구현
- 미들웨어 기반 오류 처리
- error_middleware
에서 AppError
에 따라 404, 401, 500 상태 코드 설정
- 오류 메시지와 함께 응답 본문 전달
2. 인증 및 입력 검증
auth_handler
함수
- Authorization
헤더에서 토큰 추출 및 검증
- 실패 시 AppError::Unauthorized
반환
validate_input
함수
- 요청 본문 검증 후 ValidationError
반환
- 검증 실패 시 오류 메시지 목록 생성
3. 로깅 및 추적 기능
logging_middleware
- 요청 메서드, 경로, 처리 시간 로깅
- println!
매크로를 통해 요청 시작/완료 로그 생성
trace_request
함수
- uuid::Uuid
로 생성한 trace_id
를 요청/응답 헤더에 추가
- 요청 추적을 위한 분산 추적 시스템 구축 기반
4. 성능 모니터링
perf_monitor
함수
- 요청 처리 시간 및 메모리 사용량 측정
- get_memory_usage()
로 메모리 사용량 추적
- log_metrics
를 통해 지표 로깅
- 성능 지표 표
- simple query
: 평균 10ms, 95th 15ms, 99th 20ms
- database operation
: 평균 50ms, 95th 80ms, 99th 100ms
5. 동시성 및 타임아웃 관리
handle_concurrent_requests
함수
- Semaphore
를 통해 동시 요청 수 제한 (최대 10개)
- 429 Too Many Requests
응답 반환
timeout_handler
함수
- tokio::time::timeout
으로 30초 제한 설정
- 타임아웃 시 504 Gateway Timeout
응답
결론
- 오류 처리 시
AppError
열거형을 사용해 유형별 상태 코드 매핑 X-Trace-ID
와 로깅 미들웨어로 요청 추적 및 성능 분석Semaphore
와timeout
미들웨어로 동시성 제어 및 서비스 안정성 확보