철학 / 경계 지도
어디서 엄격해야 하고, 어디서 유연해야 하는지 알기
"코어"(명확한 철학)와 "바깥층"(유연함) 사이의 경계를 이해하는 것이 효과적인 Ranvier 사용에 필수적입니다.
코어 영역 (명확한 철학 — Ranvier 패러다임 필수)
이것들은 Transition/Outcome/Bus/Schematic을 반드시 사용해야 합니다:
비즈니스 로직: 시각화, 조합, 테스트 용이성을 위해 `#[transition]` 사용
데이터 흐름: 타입 안전한 에러 전파를 위해 `Outcome<T, E>` 반환
상태 공유: 명시적 의존성을 위해 `Bus`에 저장
파이프라인 조합: Schematic 그래프 생성을 위해 `Axon::pipe()`, `.parallel()` 사용
도메인 에러: 명확한 실패 모드를 위해 사용자 정의 에러 enum 정의
바깥층 영역 (유연함 — 모든 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 풀, 설정): 프레임워크 state 또는 Arc
경험 법칙:
• 코어 (비즈니스 로직, 데이터 흐름, 조합) → Ranvier 패러다임
• 바깥층 (인프라, I/O, 배포) → 모든 Rust 도구
• 회색 지대 → 시각화 필요성, 팀 지식, 마이그레이션 경로에 따라 선택
• 코어 (비즈니스 로직, 데이터 흐름, 조합) → Ranvier 패러다임
• 바깥층 (인프라, I/O, 배포) → 모든 Rust 도구
• 회색 지대 → 시각화 필요성, 팀 지식, 마이그레이션 경로에 따라 선택
상세한 경계 규칙과 안티패턴은 PHILOSOPHY.md — 경계 지도를 참조하세요.