#경계 맵 — 어디서 엄격하고, 어디서 유연해야 하는지 알기
버전: 0.33.0 최종 업데이트: 2026-03-15 적용 대상: ranvier (모든 크레이트) 카테고리: 철학 & 아키텍처
"코어"(독단적)와 "에지"(유연한) 사이의 경계를 이해하는 것은 효과적인 Ranvier 사용에 매우 중요합니다.
#코어 영역 (독단적 — Ranvier 패러다임 필수)
다음은 반드시 Transition/Outcome/Bus/Schematic을 사용해야 합니다:
- 비즈니스 로직: 시각화, 조합, 테스트 용이성을 위해
#[transition]사용 - 데이터 흐름: 타입 안전 오류 전파를 위해
Outcome<T, E>반환 - 상태 공유: 명시적 의존성을 위해
Bus에 저장 - 파이프라인 조합: Schematic 그래프 생성을 위해
Axon::pipe(),.parallel()사용 - 도메인 오류: 명확한 실패 모드를 위해 사용자 정의 오류 열거형 정의
#에지 영역 (유연 — 어떤 Rust 도구든 사용 가능)
다음은 어떤 Rust 라이브러리나 패턴이든 사용할 수 있습니다:
- HTTP 서버: Hyper, Tower, Axum, actix-web, warp
- 데이터베이스: sqlx, diesel, sea-orm, mongodb, postgres
- 캐싱: redis, memcached, moka, dashmap
- 직렬화: serde_json, bincode, msgpack, protobuf
- 메트릭: prometheus, opentelemetry, statsd
- 트레이싱: tracing, log, slog, env_logger
- 비동기 런타임: tokio, async-std, smol (Ranvier는 런타임에 구애받지 않습니다)
#회색 지대 (상황에 따라 다름)
일부 영역은 어느 쪽이든 가능합니다. 필요에 따라 선택하세요:
#미들웨어 / 가드
| 접근 방식 | 적합한 경우 |
|---|---|
| Transition 기반 | 새 프로젝트 — Schematic 시각화, 테스트 가능, 조합 가능 |
| Tower 미들웨어 | 기존 Tower 앱 — 에코시스템 재사용, 팀 지식 활용 |
#오류 처리
- Transition 내부: 항상
Outcome(#[transition]에서 필수) - Transition 외부:
Result사용 가능, 경계에서 변환
#상태 관리
- 요청 범위 데이터 (인증, 테넌트): Bus (Schematic에서 시각화)
- 전역 공유 리소스 (DB 풀, 설정): 프레임워크 상태 또는
Arc
#경험 법칙
- 코어 (비즈니스 로직, 데이터 흐름, 조합) → Ranvier 패러다임
- 에지 (인프라, I/O, 배포) → 어떤 Rust 도구든
- 회색 지대 → 다음을 기준으로 선택: 시각화 필요성, 팀 지식, 마이그레이션 경로
#관련 문서
- 의사결정 프레임워크 — 단계별 의사결정 트리
- PHILOSOPHY.md — 경계 맵 — 상세 경계 규칙과 안티패턴