Skip to content

Tenant

멀티 테넌트 환경에서 테넌트 간 이동을 처리하고, 테넌트별 URL을 생성하는 모듈입니다.

Import

ts
import { TenantRouter, Tenant } from '@liner-engineering/orbit-app/tenant';

지원 테넌트

TenantDomain
Tenant.Appapp.liner.com
Tenant.Scholarscholar.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만 생성합니다.

새 테넌트 추가

  1. types.tsTenant enum에 새 테넌트 추가
  2. TenantRouterConfig에 새 테넌트의 호스트명 추가
  3. TenantRouter 생성 시 호스트명 설정

Released under the MIT License.