Atomic HTTP
고성능 HTTP 서버 라이브러리 - Arena 메모리 관리와 Zero-copy 기술을 활용한 최적화된 HTTP 서버
🚀 주요 기능
- Arena 메모리 관리: 효율적인 메모리 할당과 관리
- Zero-copy 기술: 메모리 복사 없는 파일 서빙
- 멀티파트 지원: 고성능 파일 업로드 처리
- 비동기 처리: Tokio 기반 비동기 I/O
- 타입 안전성: Rust의 타입 시스템 활용
📦 설치
[]
= { = "0.6.0", = ["arena"] }
🛠️ 기능별 Features
arena: Arena 메모리 관리 (기본 활성화)response_file: 파일 응답 지원env: 환경변수 설정 지원debug: 디버그 출력 활성화
🧪 테스트 실행 가이드
📋 새로운 통합 테스트 (추천)
1. 완전 통합 테스트
서버와 클라이언트를 자동으로 시작하고 종합적인 테스트 실행
# Arena + Zero-copy 모드
# 표준 모드
2. 성능 비교 벤치마크
Arena 서버와 표준 서버의 성능을 직접 비교
# Arena vs 표준 서버 성능 비교
# 릴리즈 모드로 정확한 성능 측정
3. 멀티파트 테스트
파일 업로드와 멀티파트 폼 데이터 처리 테스트
# Arena 멀티파트 테스트
# 표준 멀티파트 테스트
🔧 간단한 테스트
0. 문제 해결용 디버그 테스트
# Arena 서버 디버그
# 표준 서버 디버그
1. 간단한 벤치마크 테스트 (추천)
# Arena 간단 벤치마크
# 표준 간단 벤치마크
2. 기본 서버 테스트
# Arena 서버
# 표준 서버
2. 간단한 성능 테스트
# Arena 성능 테스트
# 표준 성능 테스트
📊 벤치마크
Criterion을 사용한 마이크로 벤치마크:
🔍 기존 테스트들 (레거시)
필요시 개별 기능 테스트:
# 기존 서버 테스트
# 부하 테스트 클라이언트 (별도 실행)
# 파일 서빙 테스트
# 제로카피 테스트
📈 성능 특징
Arena 서버의 장점
- ✅ 제로카피: 메모리 복사 없음
- ✅ 낮은 메모리 사용량: 원본 데이터만 유지
- ✅ 빠른 파싱: String 생성 없이 바이트 직접 접근
- ✅ 예측 가능한 성능: GC 압박 없음
- ✅ 대용량 파일 최적화: 메모리 효율적
표준 서버 특징
- 📝 안정적이고 검증된 방식
- 📝 메모리 복사와 String 할당 포함
- 📝 상대적으로 높은 메모리 사용량
💡 사용 예제
기본 서버 설정
use *;
use StatusCode;
async
멀티파트 파일 업로드
// Arena 멀티파트 처리
match request.get_multi_part_arena?
🔧 환경 설정
환경변수를 통한 서버 설정 (env 피쳐 활성화 시):
🏗️ 개발 및 기여
요구사항
- Rust 1.77 이상
- Tokio 런타임
컴파일
# 기본 빌드
# Arena + Zero-copy 모든 기능
# 릴리즈 빌드
테스트
# 단위 테스트
# 통합 테스트
# 성능 벤치마크
📄 라이선스
Apache License 2.0
🤝 기여
이슈와 풀 리퀘스트를 환영합니다. 주요 변경사항은 먼저 이슈를 열어 논의해 주세요.
📞 지원
추천 테스트 순서:
cargo run --example debug_test --features arena- 기본 동작 확인cargo run --example simple_benchmark_test --features arena- 간단한 벤치마크cargo run --example integrated_test --features arena- 전체 기능 확인cargo run --example comparative_benchmark --features arena- 성능 비교cargo bench- 마이크로 벤치마크
각 테스트는 서버와 클라이언트를 자동으로 관리하므로 별도 설정이 필요하지 않습니다.
🚨 문제 해결
벤치마크 실패 문제
만약 comparative_benchmark에서 요청이 실패한다면:
-
기본 테스트부터 실행:
-
간단한 벤치마크 실행:
-
포트 충돌 확인:
# 다른 포트 사용
일반적인 문제들
- 컴파일 오류:
cargo clean && cargo build --features arena - 연결 실패: 방화벽이나 포트 사용 중인지 확인
- 성능 측정:
--release모드로 실행
로그 확인
각 테스트는 상세한 로그를 출력하므로 실패 지점을 쉽게 파악할 수 있습니다.