Tenant
멀티 테넌트 환경에서 테넌트 간 이동을 처리하고, 테넌트별 URL을 생성하는 모듈입니다.
Import
ts
import { TenantRouter, Tenant } from '@liner-engineering/orbit-app/tenant';지원 테넌트
| Tenant | Domain |
|---|---|
Tenant.App | app.liner.com |
Tenant.Scholar | scholar.liner.com |
TenantRouter
초기화
ts
import { TenantRouter, Tenant } from '@liner-engineering/orbit-app/tenant';
import { TouchProductGatewayLogger } from '@liner-engineering/orbit-app/analytics';
const tenantRouter = new TenantRouter({
appHostname: process.env.NEXT_PUBLIC_APP_DOMAIN || 'https://app.liner.com',
scholarHostname: process.env.NEXT_PUBLIC_SCHOLAR_DOMAIN || 'https://scholar.liner.com',
gatewayLogger: new TouchProductGatewayLogger({
cookieDomain: '.liner.com',
logEvent: ampLogEvent,
}),
});테넌트 간 이동
ts
// push 방식 (히스토리 추가)
tenantRouter.push(Tenant.Scholar, {
path: '/search',
gatewayLogParams: {
fromLinerProduct: 'ai_search',
fromLinerProductDetail: null,
toLinerProduct: 'scholar',
toLinerProductDetail: null,
entryType: 'sidebar',
entryTypeDetail: null,
componentType: 'menu_button',
uxWriting: 'Scholar로 이동',
},
});
// replace 방식 (히스토리 교체)
tenantRouter.replace(Tenant.App, {
path: '/home',
gatewayLogParams: {
/* ... */
},
});
// 쿼리 파라미터 포함
tenantRouter.push(Tenant.Scholar, {
path: '/search',
query: { q: 'machine learning' },
gatewayLogParams: {
/* ... */
},
});
// 새 탭에서 열기
tenantRouter.open(Tenant.Scholar, {
path: '/paper/123',
gatewayLogParams: {
/* ... */
},
});URL 생성
ts
const url = tenantRouter.getUrl(Tenant.Scholar, {
path: '/search',
query: { q: 'test' },
});
// -> 'https://scholar.liner.com/search?q=test'주의
push, replace, open 메서드 사용 시 gatewayLogParams는 필수입니다. getUrl 메서드는 gatewayLogParams 없이 URL만 생성합니다.
새 테넌트 추가
types.ts의Tenantenum에 새 테넌트 추가TenantRouterConfig에 새 테넌트의 호스트명 추가- TenantRouter 생성 시 호스트명 설정