[P2][refactor] api::handle_request()를 router/handler/middleware 구조로 분리 #35

Closed
opened 2026-05-02 04:34:09 +00:00 by boxqkrtm · 1 comment

문제

crates/portal-relay/src/api/mod.rshandle_request()가 routing, JSON decoding, auth precondition, lease/discovery/hop operation, logging decision, error response까지 많은 책임을 가집니다.

영향

  • endpoint 추가 시 match가 계속 비대해짐
  • endpoint별 auth/body limit/timeout/CORS/error mapping 적용이 어려움
  • route 단위 테스트보다 통합 함수 중심 테스트가 늘어남
  • 특정 endpoint에 권한 정책 누락이 발생하기 쉬움

제안 구조

api/
  router.rs
  middleware/
    auth.rs
    body_limit.rs
    error_map.rs
  handlers/
    health.rs
    sdk.rs
    discovery.rs
    admin.rs
    keyless.rs

장기적으로 Hyper/Tower와 결합하면 middleware 구조가 자연스러워집니다.

완료 기준

  • route dispatch와 handler logic이 분리됨
  • auth/body/error 정책이 middleware 또는 공통 wrapper로 적용됨
  • 주요 endpoint handler unit/integration test가 쉬워짐

검토 기준: 업로드된 Rust portal-relay 코드 정적 리뷰. 리뷰 환경에서는 cargo check/test/clippy를 실행하지 못했습니다.

## 문제 `crates/portal-relay/src/api/mod.rs`의 `handle_request()`가 routing, JSON decoding, auth precondition, lease/discovery/hop operation, logging decision, error response까지 많은 책임을 가집니다. ## 영향 - endpoint 추가 시 match가 계속 비대해짐 - endpoint별 auth/body limit/timeout/CORS/error mapping 적용이 어려움 - route 단위 테스트보다 통합 함수 중심 테스트가 늘어남 - 특정 endpoint에 권한 정책 누락이 발생하기 쉬움 ## 제안 구조 ```text api/ router.rs middleware/ auth.rs body_limit.rs error_map.rs handlers/ health.rs sdk.rs discovery.rs admin.rs keyless.rs ``` 장기적으로 Hyper/Tower와 결합하면 middleware 구조가 자연스러워집니다. ## 완료 기준 - route dispatch와 handler logic이 분리됨 - auth/body/error 정책이 middleware 또는 공통 wrapper로 적용됨 - 주요 endpoint handler unit/integration test가 쉬워짐 --- 검토 기준: 업로드된 Rust `portal-relay` 코드 정적 리뷰. 리뷰 환경에서는 `cargo check/test/clippy`를 실행하지 못했습니다.
Owner

검토했지만 이번 범위에서는 수용하지 않습니다. router/handler/middleware 분리는 방향성은 타당하지만 현재 이슈는 구체적 결함보다 대형 구조 변경이며, Go v2.1.9 relay compatibility를 안정화하는 현재 프로젝트 범위에서는 회귀 위험이 더 큽니다. 필요한 보안 누락은 PR #62에서 직접 보강했으므로 이 리팩터링 이슈는 닫습니다.

검토했지만 이번 범위에서는 수용하지 않습니다. router/handler/middleware 분리는 방향성은 타당하지만 현재 이슈는 구체적 결함보다 대형 구조 변경이며, Go v2.1.9 relay compatibility를 안정화하는 현재 프로젝트 범위에서는 회귀 위험이 더 큽니다. 필요한 보안 누락은 PR #62에서 직접 보강했으므로 이 리팩터링 이슈는 닫습니다.
gofix closed this issue 2026-05-03 18:58:40 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gofix/portal-tunnel-rs#35
No description provided.