Skip to content

사설 네트워크 / 내부 호스팅

공개 CDN(sdk.turacocloud.com) 없이 SDK를 사내 nginx로 자체 호스팅하고, 위젯 iframe이 내부 chat 호스트를 가리키도록 구성하는 방법을 설명합니다. 인터넷이 차단된 폐쇄망(air-gapped) 환경을 포함합니다.

구성 요소

위젯이 동작하려면 두 가지가 내부망에서 서비스되어야 합니다.

구성역할내부 호스팅
SDK 번들 (msap-ai-chat.min.js)iframe을 주입하는 초경량 로더nginx 정적 서빙
chat 위젯 앱 (/widget/:applicationKey)실제 채팅 UI (iframe 내부)chat 앱 + /api 백엔드

SDK는 로더일 뿐이며 실제 UI는 chat 위젯 앱이 담당합니다. 따라서 SDK만 내부에 올린다고 끝이 아니라, chat 위젯 앱과 그 API도 같은 내부망에서 서비스되어야 합니다.

1. SDK 자체 호스팅

빌드 산출물(msap-ai-chat.min.js, .esm.js, .js)을 사내 nginx로 서빙하고, 임베드 페이지에서 그 내부 주소로 스크립트를 로드합니다.

html
<script src="https://sdk.내부도메인/msap-ai-chat.min.js"></script>

정적 파일이므로 별도 백엔드가 필요 없습니다. CORS(Access-Control-Allow-Origin: *)와 적절한 캐시 헤더만 설정하면 됩니다.

2. iframe 위젯 호스트 지정 (iframeSrc)

SDK는 iframeSrc(위젯 origin)를 런타임에 해석합니다. 임베드 페이지(호스트 페이지)가 내부 chat 호스트를 지정하는 것이 기본 방식입니다.

해석 우선순위

SDK는 다음 순서로 위젯 origin을 결정합니다.

  1. init({ iframeSrc }) — 명시적으로 전달한 값 (최우선)
  2. window.MSAP_CHAT_IFRAME_SRC — 스크립트 로드 전에 설정한 전역 값
  3. SDK 스크립트 origin 자동 유추 — SDK와 위젯이 같은 호스트일 때 zero-config로 동작
  4. 레거시 기본값 (https://ai-chat.turacocloud.com)

방법 A — init 옵션 (권장)

호스트 페이지에서 내부 chat 주소를 직접 전달합니다.

html
<script src="https://sdk.내부도메인/msap-ai-chat.min.js"></script>
<script>
  MSAPChat.init({
    applicationKey: 'your-application-key',
    iframeSrc: 'https://chat.내부도메인',
  });
</script>

방법 B — 전역 변수

여러 페이지에서 공통 주소를 쓰거나, 초기화 코드를 건드리기 어려운 경우 SDK 로드 전에 전역 변수를 설정합니다.

html
<script>
  window.MSAP_CHAT_IFRAME_SRC = 'https://chat.내부도메인';
</script>
<script src="https://sdk.내부도메인/msap-ai-chat.min.js"></script>
<script>
  MSAPChat.init({ applicationKey: 'your-application-key' });
</script>

같은 호스트에 함께 올린 경우

SDK와 chat 위젯을 동일 origin에서 서비스한다면 위 설정 없이도 SDK가 자신의 스크립트 origin을 자동으로 사용합니다(우선순위 3). 단, 서로 다른 서브도메인(예: sdk.*chat.*)이라면 방법 A 또는 B로 명시해야 합니다.

3. 폐쇄망(air-gapped) 체크리스트

인터넷이 완전히 차단된 환경에서는 런타임에 외부로 나가는 요청이 하나도 없어야 합니다.

  • SDK 번들을 사내 nginx에서 서빙 (공개 CDN 미사용)
  • chat 위젯 앱(/widget)과 /api 백엔드를 내부망에 배포
  • iframeSrc를 내부 chat 호스트로 지정 (방법 A/B)
  • chat 위젯 앱이 외부 폰트/CDN/텔레메트리를 호출하지 않도록 점검 (폰트·에셋 self-host)
  • 임베드 페이지 CSP에 내부 호스트만 허용 (아래 참고)

SDK 번들은 자급자족

SDK 번들 자체는 외부 의존성을 모두 인라인하도록 빌드되어 런타임에 추가 네트워크 요청을 하지 않습니다. 외부 호출 여부는 chat 위젯 앱 쪽을 별도로 점검해야 합니다.

4. CSP 설정

임베드 페이지에서 Content-Security-Policy를 사용하는 경우 내부 호스트를 허용합니다.

html
<meta
  http-equiv="Content-Security-Policy"
  content="
    script-src 'self' https://sdk.내부도메인;
    frame-src https://chat.내부도메인;
    connect-src https://api.내부도메인;
  "
/>

보안 메커니즘 전반은 보안 문서를 참고하세요.

다음 단계