프로젝트 소개
개요
이 저장소인 sqlite-multi-tenant는 .NET용 멀티테넌트 SQLite 데이터베이스 관리자로, 테넌트별 격리, 마이그레이션 및 백업 기능을 제공합니다. README는 클래스별 참조 문서로 구성되어 있으며, 각 섹션은 서비스, 헬퍼 또는 검증기를 설명하고 C# 사용 예제를 통해 이를 보여줍니다. 이 문서는 시작 가이드보다는 API 문서 형식으로 작성되었으므로, 아래 내용은 README에서 실제로 시연하는 내용을 반영합니다.
멀티테넌시 전략
README의 엔드-투-엔드 격리 테스트에서는 두 가지 지원 방식을 설명합니다:
- 테넌트당 연결(Connection-per-tenant): 각 테넌트가 자체적인 물리적 SQLite 파일을 가지며 파일 수준의 격리를 제공합니다. 테넌트의 연결 문자열은 해당 테넌트의 데이터베이스만 가리킵니다.
- 공유 스키마(Shared-schema): 모든 테넌트가 단일 SQLite 파일을 공유하며, TenantId 구분자 열이 모든 쿼리의 범위를 지정하여 각 테넌트가 자신의 행만 읽거나 쓸 수 있도록 합니다.
격리 테스트는 두 모델 모두에서 테넌트가 다른 테넌트의 행을 읽거나 업데이트 또는 삭제할 수 없음을 확인하는 의도적인 적대적 체크 방식으로 제시됩니다. 샘플 테스트 코드는 테넌트별 임시 데이터베이스 파일을 생성하고, 테넌트 태그가 지정된 문서를 삽입하며, TenantId 필터로 쿼리했을 때 해당 테넌트의 제목만 반환되는지 확인합니다. 여러 테넌트의 행을 포함하는 공유 파일에 대해서도 동일한 패턴이 표시됩니다. 샘플의 헬퍼 메서드는 연결 문자열을 생성하고, Id, TenantId, Title 열이 있는 Documents 테이블을 만들며, 매개변수화된 명령으로 행을 삽입하고, 테넌트로 필터링된 제목을 읽습니다.
무결성 검사
IntegrityCheckService는 테넌트 데이터베이스 전체에 대해 SQLite PRAGMA integrity_check 작업을 수행합니다. 문서화된 진입점은 다음과 같습니다:
- ID로 단일 테넌트 검사.
- maxDegreeOfParallelism 인수를 사용하여 명시적인 테넌트 목록 검사.
- 구성 가능한 병렬 처리를 통해 시스템의 모든 테넌트 검사.
- 활성 테넌트만 검사.
결과는 최소한 TenantId와 IsOk를 노출하는 TenantIntegrityCheckResult 객체로 제공됩니다. 구성 가능한 병렬 처리는 검증 중 시스템 부하를 관리하는 방법으로 제시됩니다.
테넌트 컨텍스트 헬퍼
TenantContextHelperExtensions는 멀티테넌트 범위 내에서 작업하기 위해 TenantContextHelper에 확장 메서드를 추가합니다. README에서는 다음 내용을 보여줍니다: 현재 테넌트가 대상 ID와 일치하는지 확인, 테넌트 ID와 사용자 ID를 전달할 수 있고 using 블록에서 사용되는 검증된 범위 생성, 필수 테넌트 컨텍스트 검색, 필수 테넌트 ID 직접 검색, 지정된 테넌트 컨텍스트 내에서 작업 또는 값 반환 함수 실행. 이는 테넌트 인식 코드 경로 주변의 반복적인 보일러플레이트 코드를 줄이는 것을 목표로 합니다.
미들웨어 검증
두 가지 검증기가 문서화되어 있습니다:
- RateLimitingMiddlewareValidation은 RateLimitingMiddleware 인스턴스, RateLimitingConfig 객체(MaxRequestsPerSecond, MaxBurst, WindowSize, Enabled, BanDuration 등의 필드 포함), RateLimitExceededResult(IsExceeded, RetryAfter, CurrentRequestCount, Limit, Window) 및 RateLimitStatistics(TotalRequests, AllowedRequests, DeniedRequests, PeakRequestsPerSecond, CurrentActiveLimits)를 검증합니다. 각 오버로드에 대해 README는 문제 문자열 목록을 반환하는 Validate, 불리언을 반환하는 IsValid, 입력이 잘못되었을 때 예외를 던지는 EnsureValid를 보여줍니다. 워크플로 예제는 사용 전 미들웨어 설정을 검증하고 결과로 발생하는 인수 예외를 캡처합니다.
- ErrorHandlingMiddlewareValidation는 ErrorHandlingMiddleware 인스턴스와 Result 객체를 검증하는 확장 메서드를 제공합니다. null 참조, 성공 플래그와 오류 메시지 간의 일관성, 성공적인 결과가 기본값이 아닌 값을 가지고 있는지를 확인합니다. 문서화된 인터페이스는 미들웨어의 Validate, IsValid, EnsureValid와 Result 값에 대한 동일한 세 가지 메서드로, 요청 파이프라인 초기 단계에서 불변성을 강제할 수 있습니다.
설정 액세스
SettingsControllerExtensions는 SettingsController에 강력한 형식의 작업 및 일괄 작업을 추가합니다. 문서화된 메서드에는 다음이 포함됩니다: 구체적인 형식으로 설정 읽기(예: DateTime을 위한 사용자 정의 파싱 함수 옵션 포함), 강력한 형식의 값 쓰기, 한 번의 일괄 호출로 설정 딕셔너리 업데이트, 설정 존재 여부 테스트, 서술자(predicate)로 필터링된 설정 검색 및 설정 값 목록 반환. 결과는 예제의 OkObjectResult 체크에서 보듯 Data 페이로드가 포함된 API 응답 객체로 래핑됩니다.
직렬화 유틸리티
- ReportGeneratorJsonExtensions는 모니터링 데이터(상태 요약, 작업 통계 및 성능 메트릭)를 위해 System.Text.Json 직렬화를 래핑합니다. 쓰기를 위한 ToJson, 통계 읽기를 위한 FromJsonToOperationStatistics, 불리언 성공 결과를 반환하는 성능 메트릭용 TryFromJson을 문서화합니다.
- StringUtilitiesJsonExtensions는 문자열을 직렬화 및 역직렬화하며, SHA256 해시를 첨부하거나 snake_case로 변환하는 변형 및 예외를 던지지 않고 성공 여부를 보고하는 try-deserialize 메서드를 제공합니다.
테스트 유틸리티
TenantNameValidatorTestsExtensions는 테넌트 이름 검증을 위한 어설션 스타일 헬퍼를 제공합니다: 이름이 예상되는 정규화된 테넌트 ID로 매핑되는지 확인, 이름이 유효한 테넌트 ID로 간주되는지 확인, 잘못된 이름이 특정 예상 오류 메시지를 생성하는지 확인, 오류가 포함된 내장 잘못된 테넌트 ID 컬렉션과 유효한 이름-ID 매핑 나열. 이는 테스트 스위트에서 재사용하기 위한 용도입니다.
평가 참고 사항
README는 사용 스니펫이 포함된 개별 API 문서이며, 설치 지침, 패키지 이름, 지원되는 .NET 버전, 마이그레이션 또는 백업 절차, 라이선스 및 기여 세부 정보는 포함되어 있지 않습니다(저장소 설명에 마이그레이션과 백업이 언급되어 있음에도 불구하고). 샘플은 SqliteMultiTenant.Services, SqliteMultiTenant.Models, SqliteMultiTenant.Utilities, SqliteMultiTenant.Middleware, SqliteMultiTenant.Monitoring, SqliteMultiTenant.Validation 및 SqliteMultiTenant.Api.Controllers와 같은 네임스페이스를 참조하며, System.Data.SQLite 및 테스트 프레임워크에 의존합니다. 독자는 샘플을 예시로 취급하고, 도입 전 소스 코드를 통해 현재 API, 패키징 및 격리 보장 내용을 확인해야 합니다. README 끝부분의 반복되는 블록은 문서 자체에 일부 중복이 있음을 시사합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.