---
url: 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
title: '방화벽과 데이터 레지던시 | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T14:02:23+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builder는 페이지를 사용자의 Drupal 데이터베이스에 저장합니다. 라이선스 확인, 에디터 애셋, AI 요청을 위해 DXPR 서비스에 연결합니다. 이 페이지에서는 모든 연결, 각 연결이 전달하는 내용, DXAI Kavya 모델의 실행 위치, 제품 키 저장 방법, 아웃바운드 접근이 제한될 때 작동하는 항목을 나열합니다.'
tags:
  - 'Meet compliance requirements'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: '방화벽과 데이터 레지던시'
      description: 'DXPR Builder는 페이지를 사용자의 Drupal 데이터베이스에 저장합니다. 라이선스 확인, 에디터 애셋, AI 요청을 위해 DXPR 서비스에 연결합니다. 이 페이지에서는 모든 연결, 각 연결이 전달하는 내용, DXAI Kavya 모델의 실행 위치, 제품 키 저장 방법, 아웃바운드 접근이 제한될 때 작동하는 항목을 나열합니다.'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T14:02:23+0000'
      dateModified: '2026-10-24T17:19:22+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
      articleSection: '규정 준수 요건 충족'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
      description: 'DXPR Builder는 페이지를 사용자의 Drupal 데이터베이스에 저장합니다. 라이선스 확인, 에디터 애셋, AI 요청을 위해 DXPR 서비스에 연결합니다. 이 페이지에서는 모든 연결, 각 연결이 전달하는 내용, DXAI Kavya 모델의 실행 위치, 제품 키 저장 방법, 아웃바운드 접근이 제한될 때 작동하는 항목을 나열합니다.'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 홈
            item: 'https://dxpr.com/ko'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: ko
---
[도움말 센터](/ko/node/75)/[문서](/ko/hc/documentation) /[DXPR Builder 배우기](/ko/hc/documentation/learn-dxpr-builder) /[사이트 관리](/ko/hc/documentation/learn-dxpr-builder/manage) /[규정 준수 요건 충족](/ko/hc/documentation/learn-dxpr-builder/manage/compliance) # 방화벽과 데이터 레지던시.

 DXPR Builder 배우기사이트 관리규정 준수 요건 충족

   ## 이 가이드의 내용

 관련 가이드

- [Drupal 사이트에 DXPR Builder 설치](/ko/hc/documentation/learn-dxpr-builder/getting-started/installation)
- [보안](/ko/hc/documentation/learn-dxpr-builder/advanced/security)
- [라이선스 및 제품 키 오류](/ko/hc/documentation/learn-dxpr-builder/troubleshooting/licence-and-product-key)

DXPR Builder는 페이지를 사용자의 Drupal 데이터베이스에 저장합니다. 라이선스 확인, 에디터 애셋, AI 요청을 위해 DXPR 서비스에 연결합니다. 이 페이지에서는 모든 연결, 각 연결이 전달하는 내용, DXAI Kavya 모델의 실행 위치, 제품 키 저장 방법, 아웃바운드 접근이 제한될 때 작동하는 항목을 나열합니다.

## 연결 한눈에 보기

| 호스트 | 연결 주체 | 목적 | 필요 항목 |
|---|---|---|---|
| `dxpr.com` | Drupal 서버 | 라이선스 상태, 도메인 확인, 라이선스 사용자 동기화 | 편집 |
| `cdn2.dxpr.com` | 에디터의 브라우저 | 에디터 JavaScript와 CSS(기본) | 편집 |
| `cdn.dxpr.com` | 에디터의 브라우저 | 에디터 JavaScript와 CSS(대체) | 편집 |
| `kavya.dxpr.com` | Drupal 서버 | AI 요청과 AI 크레딧 잔액 | AI 기능 |
| `html-extract.dxpr.com` | 에디터의 브라우저 | AI "URL에서 복제" | AI 기능 |
| `r.jina.ai` (서드 파티) | 에디터의 브라우저 | 프롬프트에 URL이 나타난 웹 페이지 읽기 | AI 기능 |
| `tuur.dxpr.com` | 에디터의 브라우저 | 에디터 사용 분석 | 선택 사항 |

모든 연결은 포트 443의 HTTPS를 사용합니다. 사이트 방문자는 DXPR 서버에서 어떤 것도 로드하지 않습니다. 게시된 페이지는 데이터베이스에 저장된 HTML에서 렌더링되며 프런트엔드 스크립트(`dxpr_builder/dxpr_frontend.min.js`)는 모듈 안에 포함되어 있습니다. `app.dxpr.com`은 관리자에게 표시되는 링크에만 나타납니다.

## 라이선스 확인(`dxpr.com`)

Drupal 서버는 `src/Service/DxprBuilderLicenseServiceInterface.php`에 정의된 네 엔드포인트를 호출하며 각각 제품 키를 `Authorization: Bearer` 헤더로 전달합니다.

| 엔드포인트 | 호출 시점 | 전송 데이터 |
|---|---|---|
| `GET /api/user-license` | 인가된 경우 24시간마다, 그렇지 않은 경우 30분마다 | `gba`와 `users_tier`(`edit with dxpr builder` 권한이 있는 계정 수와 해당 등급), `values_count`(빌더 필드를 사용하는 콘텐츠 항목), `site_base_url`, `site`(사이트 해시 솔트의 HMAC. 솔트 자체는 전송하지 않음), `site_mail`(`system.site`에서 가져옴), `project`, `version` |
| `GET /api/domain-blacklist/{hostname}` | 매시간 | 호스트 이름만. 인증 헤더 없음 |
| `POST /api/central-user-storage/{add,remove,sync}` | 계정, 권한, 제품 키가 변경될 때. 후속 작업은 대기열에 들어가 cron에서 실행 | 호스트 이름과 편집 권한이 있는 각 계정의 이메일 주소, 역할 이름. 유효한 이메일 주소가 없는 계정은 건너뜀 |
| `GET /api/user-license/users` | 사용자 라이선스 페이지를 열 때 | 키 외에는 없음 |

페이지 콘텐츠는 라이선스 요청에 포함되지 않습니다. 모듈은 첫 페이지에 고정 마커 문자열, 라이선스 등급, 에디터 수, 저장 횟수를 담은 숨겨진 `<div>`도 출력합니다(`dxpr_builder_page_bottom()`(`dxpr_builder.module` 안)). 페이지 소스에서 읽을 수 있습니다.

## 에디터 애셋(`cdn2.dxpr.com`, `cdn.dxpr.com`)

다음 **에디터 애셋**이 **클라우드**(기본값)이면 에디터의 브라우저가 `https://cdn2.dxpr.com/<version>/`에서 빌더 JavaScript와 CSS를 로드하며 `/health` 프로브 실패 시 `https://cdn.dxpr.com/<version>/`로 대체합니다. 제품 키는 `jwt` 쿼리 매개변수로 각 애셋 URL에 추가됩니다(`dxpr_builder_library_info_build()`). CDN이 해당 키를 확인합니다. 401 응답이면 `js/editor_validation.js`에 "Your product key is not valid"가 표시됩니다.

다음 **로컬(축소)**과 **로컬(비축소)** 옵션은 모듈의 `dxpr_builder/` 디렉터리에 에디터의 빌드 복사본이 있을 때만 설정 양식에 표시되며 클라우드가 선택되어 있어도 해당 복사본이 자동으로 사용됩니다. git 리포지토리는 이러한 빌드 파일을 추적하지 않으므로 drupal.org에서 다운로드한 릴리스는 CDN에서 에디터를 로드합니다.

## AI 요청(`kavya.dxpr.com`)

브라우저는 `kavya.dxpr.com`에 절대 연결하지 않습니다. 에디터는 자체 사이트의 경로(`/dxpr_builder/ajax/ai/chat`, `/dxpr_builder/ajax/ai/image`, `/dxpr_builder/ajax/ai/image/edit`. 모두 `edit with dxpr builder` 권한, CSRF 토큰, 라이선스 계정 필요)에 게시합니다. 사이트는 각 요청을 Drupal AI 모듈의 DXPR 공급자(`ai_provider_dxpr`)를 통해 `https://kavya.dxpr.com/v1/chat/completions`, `/v1/images/generations`, `/v1/images/edits`로 전달하며 Key 모듈에 저장된 DXPR API 키로 인증합니다. 공급자의 `host` 설정(`ai_provider_dxpr.settings`)으로 요청 대상 호스트를 바꿀 수 있습니다. 별도로 AI 설정 페이지는 제품 키와 함께 `GET https://kavya.dxpr.com/v1/account/balance`를 호출하여 크레딧 잔액을 표시합니다.

### AI 요청의 포함 내용

AI 기능만 페이지 콘텐츠를 사이트 외부로 전송하며 에디터가 실행할 때만 전송합니다(`dxpr_builder/build/dxpr-global/ai-service.js`).

| 요청 | 전송 내용 |
|---|---|
| 텍스트와 페이지 생성 | 시스템 프롬프트, 에디터의 프롬프트, 채팅 기록 |
| 요소를 선택한 경우 | 요소의 외부 HTML. 500자 이하면 전체, 그 이상이면 처음과 마지막 200자 |
| 페이지 수준 작업 | 기존 페이지 HTML(최대 50,000자). 전체 페이지를 교체할 때는 전체 페이지 |
| 선택적 필드 | 모델 이름, 활성화된 공급자 순서, 예측 HTML 결과, 허용 태그와 클래스, `web_search` 플래그, 응답 형식 |
| 이미지 생성 | 프롬프트, 크기, 품질, 배경 |
| 이미지 편집 | 위 내용에 원본 이미지 추가. base64 인코딩 |

두 가지 편의 기능은 에디터의 브라우저에서 웹 페이지를 가져옵니다(`ai-service-url-fetch.js`). 프롬프트의 URL은 `.md`를 붙여 요청하며 실패하면 DXPR이 운영하지 않는 타사 리더 서비스인 `https://r.jina.ai/<url>`을 통하고 페이지를 복제해 달라는 프롬프트는 URL을 `https://html-extract.dxpr.com/?url=...`로 보냅니다. 두 경우 모두 URL만 전송됩니다.

AI 출력은 반환되는 과정에서 필터링됩니다. 허용 도메인, 차단 태그, 허용 태그는 `/admin/dxpr_studio/dxpr_builder/ai_settings`의 **AI 출력 필터링**에서 설정합니다.

## DXAI Kavya 모델의 실행 위치

DXPR Builder는 세 가지 모델을 제공합니다(`src/Constants/AiModelConstants.php`).

| 모델 | API 이름 | 설정 양식의 설명 |
|---|---|---|
| DXAI Kavya M1 | `kavya-m1` | 최고 성능(OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | `kavya-m1-eu` | 개인정보 보호 중심(MistralAI) |
| DXAI Kavya M1 Fast | `kavya-m1-fast` | 가장 빠른 응답, 낮은 품질 |

어느 모듈에도 지역 설정은 없습니다. 데이터 레지던시는 모델과 활성화하는 업스트림 공급자에 따라 정해집니다.

- `kavya-m1`은 다섯 공급자 사이에서 장애 조치되며 DXPR AI 공급자 설정 양식에 국가와 함께 나열됩니다. Anthropic(미국), Google Gemini(미국), MistralAI(프랑스), OpenAI(미국), XAI(미국). **수동 우선순위** 모드에서는 공급자를 **활성화**와 **비활성화** 사이로 끌어 순서를 설정합니다.
- `kavya-m1-eu`는 MistralAI만 사용합니다. DXPR AI 공급자 README에는 "데이터를 유럽 경계 안에 유지(네덜란드의 서버)"한다고 적혀 있습니다. 문서에는 Kavya 서버가 네덜란드에서 실행되고 독일에 백업이 있으며 요청은 프랑스의 MistralAI 서버를 거치고 비EU 공급자로 절대 대체되지 않는다고 적혀 있습니다. 이러한 위치는 DXPR이 문서화한 것이며 Drupal 코드에서 강제하는 것은 아닙니다.

다음 `ai_provider_dxpr`가 설치되어 있으면 `/admin/config/ai/providers/dxpr`에서 모델을 선택하며 `allowed_models` 설정이 에디터가 선택할 수 있는 모델을 제어합니다. 없으면 `/admin/dxpr_studio/dxpr_builder/ai_settings`에서 모델과 공급자 순서를 설정합니다.

## 제품 키 저장 방법

다음 **라이선스** 섹션(`/admin/dxpr_studio/dxpr_builder/settings`)에는 두 가지 **저장 방법** 옵션(`src/Form/DxprBuilderSettingsForm.php`, `src/Service/DxprBuilderKeyService.php`)이 있습니다.

- **Key 모듈**. **키**에서 선택한 Key 엔티티에서 키를 읽습니다. `dxpr_builder_update_9020()`은 `dxpr_builder.settings`에서 찾은 키를 Key 엔티티 `dxpr_builder_jwt`로 옮기며 해당 엔티티의 **구성** 공급자는 여전히 내보냅니다. **파일** 또는 **환경** 공급자만 구성 내보내기에서 키를 제외합니다.
- **구성 저장소**. 키는 `dxpr_builder.settings.json_web_token`으로 일반 텍스트로 저장되며 구성 내보내기에 포함됩니다.

제품 키는 라이선스 호출, 크레딧 잔액 호출, CDN 애셋 URL을 인증하는 JSON Web Token입니다. 자격 증명으로 취급합니다.

## 방화벽 구성

| 출발지 | 아웃바운드 HTTPS 허용 대상 | 참고 |
|---|---|---|
| Drupal 서버 | `dxpr.com` | 라이선스 |
| Drupal 서버 | `kavya.dxpr.com` | AI만 |
| 에디터의 워크스테이션 | `cdn2.dxpr.com`, `cdn.dxpr.com` | 에디터 애셋 |
| 에디터의 워크스테이션 | `html-extract.dxpr.com`, `r.jina.ai` | AI만. 차단해도 URL 조사와 복제만 비활성화됨 |
| 에디터의 워크스테이션 | `tuur.dxpr.com` | 분석. 차단해도 편집에 영향 없음 |

분석(`dxpr_builder/build/dxpr-analytics/`, PostHog)은 에디터의 이메일 주소와 사이트 호스트 이름으로 이벤트를 식별합니다. 다음 명령으로 끕니다. `drush config:set dxpr_builder.settings record_analytics 0`. 해당 키에는 양식 필드가 없습니다. 양식 필드가 없는 두 키는 `dxpr_builder.settings`에서 읽습니다. `cloud_url`은 CDN 기본 URL을 대체하고(`VERSION`은 모듈 버전으로 치환됨) `license_endpoint`는 중앙 사용자 저장소 엔드포인트를 대체합니다. `settings.php`의 구성 재정의로 설정합니다.

## 프록시 구성

라이선스와 AI 호출은 Drupal의 HTTP 클라이언트를 사용하므로 프록시는 `settings.php`에서 구성합니다.

```php
$settings['http_client_config']['proxy'] = [
  'http' => 'http://proxy.example.com:8080',
  'https' => 'http://proxy.example.com:8080',
  'no' => ['localhost', '127.0.0.1'],
];

```

에디터의 브라우저는 CDN 애셋을 로드하고 분석 및 리더 서비스를 직접 호출하므로 해당 요청은 워크스테이션의 프록시 설정을 따릅니다.

## 에어갭 및 온프레미스 배포

DXPR Builder는 자체 서버에서 실행되며 호스팅 구성 요소를 거치는 콘텐츠가 없습니다. 서버와 에디터 모두 DXPR에 접근할 수 없을 때:

| 기능 | DXPR 접근 없이 |
|---|---|
| 게시된 페이지 제공 | 작동. DXPR에서 로드되는 것 없음 |
| 콘텐츠 저장 | 작동. 페이지는 데이터베이스의 필드 값 |
| 에디터 로드 | 에디터의 로컬 빌드가 없으면 실패합니다. 위치: `dxpr_builder/` |
| 라이선스 검증 | 실패합니다. 모듈이 오류를 기록하고 관리자에게 "We are having trouble connecting to the DXPR servers"를 표시한 뒤 30분마다 다시 시도합니다. 제품 키가 구성되어 있는 동안 편집은 차단되지 않습니다 |
| 사용자 라이선스 페이지 | 비어 있음. 필요: `dxpr.com` |
| AI 기능 | 사용 불가. 모든 요청은 다음을 거침. `kavya.dxpr.com` |
| 분석, URL 조사, URL에서 복제 | 조용히 건너뜀 |

제품 키가 전혀 없으면 모듈이 코드에서 무료 등급 한도를 적용합니다. 에디터 1명과 콘텐츠 항목 100개입니다.

따라서 완전한 온프레미스 배포는 콘텐츠 제공과 저장에 작동합니다. 편집에는 CDN 접근 또는 로컬 에디터 빌드가 필요하고 라이선스 검증에는 `dxpr.com`이 필요합니다. 내부 호스팅용 에디터 빌드가 필요하면 DXPR에 문의합니다.

## 다음 단계

- [설치](/ko/hc/documentation/learn-dxpr-builder/getting-started/installation). 제품 키와 저장 방법을 구성합니다.
- [AI 기능](/hc/documentation/learn-dxpr-builder/ai). AI를 활성화하고 모델을 선택합니다.
- [보안](/ko/hc/documentation/learn-dxpr-builder/advanced/security). 권한과 출력 필터링입니다.
- [라이선스와 제품 키](/ko/hc/documentation/learn-dxpr-builder/troubleshooting/licence-and-product-key). 라이선스 오류 문제 해결입니다.