wwwroot
wwwroot는 HandStack 화면과 정적 리소스를 제공하는 모듈입니다. 계약 기반 화면 리소스는 ContractRequestPath 아래에 노출하고, 실제 정적 자산은 WWWRootBasePath에서 서비스합니다.
책임 범위
contracts/wwwroot의 애플리케이션별 화면 리소스를 기본/view경로로 노출합니다.modules/wwwroot/wwwroot아래의 실제 정적 파일을 서비스합니다.- 정적 파일 요청에 대해 대소문자 무시 탐색과 캐시 정책을 적용합니다.
- Basic token 기반 파일 동기화 API를 제공합니다.
- 계약 파일 업로드 후 대상 모듈의 refresh API를 호출해 런타임 계약 캐시를 갱신합니다.
주요 API
| 메서드 | 경로 | 용도 |
|---|---|---|
POST | /wwwroot/api/sync/upload | 계약 또는 정적 파일을 업로드 동기화합니다. |
GET | /wwwroot/api/sync/refresh | 대상 모듈 refresh API를 호출합니다. |
GET | /wwwroot/api/htmx/* | HTMX 샘플/보조 API입니다. |
GET | /wwwroot/api/index/* | 화면 보조 API와 거래 직접 호출 래퍼입니다. |
핵심 구현
ModuleInitializer.cs: 정적 파일 provider, 계약 리소스 경로, CORS/필터 처리를 구성합니다.Areas/wwwroot/Controllers/SyncController.cs: 파일 업로드와 refresh 동기화 API입니다.Areas/wwwroot/Controllers/IndexController.cs: 화면 보조 API와transact직접 호출을 제공합니다.Extensions/ModuleApiClient.cs: 화면에서 업무 거래를 직접 호출하는 래퍼입니다.Contracts/wwwroot: 계약 기반 화면/자산 매핑입니다.
주요 설정
| 설정 | 설명 |
|---|---|
ContractRequestPath | 계약 기반 정적 리소스 요청 경로입니다. 기본값은 view입니다. |
ContractBasePath | 계약 기반 화면 리소스 루트입니다. |
WWWRootBasePath | 실제 정적 파일 루트입니다. |
FileSyncTokens | /wwwroot/api/sync/* 호출을 허용할 Basic token 목록입니다. |
BusinessServerUrl | 화면 보조 API가 거래를 실행할 transact URL입니다. |
ModuleLogFilePath | wwwroot 모듈 로그 파일 경로입니다. |
동기화 대상
SyncController는 계약 동기화 시 허용된 모듈만 처리합니다. 현재 소스 기준으로 dbclient, graphclient, transact, function, wwwroot 계약을 대상으로 합니다.
파일 업로드 후 refresh가 필요한 경우 대상 모듈의 refresh API가 호출됩니다. 예를 들어 DB 계약을 업로드하면 dbclient의 query 계약 캐시를 갱신해야 합니다.
실행 흐름
- 모듈 초기화 시
ContractBasePath/{ApplicationID}를ContractRequestPath아래 정적 파일 provider로 등록합니다. WWWRootBasePath는 실제 정적 파일 루트로 등록됩니다.- 화면 요청은 계약 경로 또는 실제 정적 경 로에서 파일을 찾습니다.
- 동기화 API는 Basic token을 검증한 뒤 파일을 저장하고 대상 모듈 refresh를 수행합니다.
운영 주의사항
FileSyncTokens가 비어 있으면 동기화 요청은 거부됩니다.ContractRequestPath와WWWRootBasePath는 요청 경로가 충돌하지 않게 분리합니다.- 정적 파일 동기화는 운영 화면에 직접 영향을 주므로 배포 권한과 감사 로그를 함께 관리합니다.
- 화면에서 직접 거래를 호출하는 경우
BusinessServerUrl, 인증 토큰, 공개 거래 범위를transact설정과 함께 점검합니다.