> ## Content Index
> Fetch the complete content index at: https://kr.vizney.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 태블로 데이터 앱 제작 중 권한·스크립트·게시 오류 해결하기
- URL: https://kr.vizney.com/tableau-error-data-app/
- Published: 2026-11-07T10:55:00.000Z
- Updated: 2026-11-07T11:36:09.000Z
- Author: 황예환
- Tags: Troubleshooting, Knowledge Base

[태블로 데이터 앱(Tableau Data Apps)](https://kr.vizney.com/what-is-tableau-data-apps/)은 AI 클라이언트와 Tableau 플러그인으로 만듭니다. 이 과정의 데이터 원본 조회, 작업 공간 준비, 게시, 확인 단계에서 아래 오류를 만날 수 있습니다. 2026년 11월 6일 Windows의 Claude Code에서 Tableau MCP와 tableau-plugin(커밋 `a8febd1`)으로 Tableau Cloud(2026.3.3)에 데이터 앱을 게시하며 만난 오류와, 직접 확인한 해결 방법입니다.

- **`VIZQL_DATA_API_ACCESS` / `Permission denied (403)`:** 데이터 원본에 API 액세스 권한이 없습니다. 권한을 요청하거나, 조회할 수 있는 데이터 원본으로 시험합니다.
- **`python3`가 `Python`만 출력하고 종료:** Microsoft Store 실행 별칭이 실행된 것으로 보입니다. `python`으로 실행합니다.
- **`Plan path escapes the unzip directory`:** Windows 경로 구분자 문제입니다. 한 줄을 고친 사본으로 실행합니다.
- **`workbookFilePath is only supported when staged S3 uploads are not configured.`:** 오류가 아니라 정상 분기입니다. 업로드 후 `workbookUploadId`로 게시합니다.
- **`get-view-image`가 로그인 화면을 반환:** 원인은 확인하지 못했습니다. 로그인한 브라우저에서 확인합니다.

---

### 1\. 데이터 원본 조회가 'VIZQL\_DATA\_API\_ACCESS' 오류로 거부되면 어떻게 하나요?

> The user does not have the required permissions: VIZQL\_DATA\_API\_ACCESS to access the data source.

> Permission denied (403): you are authenticated to this Tableau MCP server (site "…", pod "…") but this request was refused. Your account may lack the required site role or permission, or the capability may not be enabled for this site. Use an account with the required permissions, or confirm the capability is enabled for this site.

**원인**

두 오류 모두 데이터 원본에 API 액세스(API Access) 권한이 없어서 납니다. 첫 번째는 Tableau MCP의 `query-datasource`, 두 번째는 `get-datasource-metadata`에서 났습니다. [Tableau 도움말](https://help.tableau.com/current/server/ko-kr/permissions%5Fcapabilities.htm?ref=kr.vizney.com)은 API 액세스를 "VizQL 데이터 서비스를 통해 통합 문서의 데이터 원본을 쿼리"할 수 있게 하는 권한으로 설명하고, 데이터 앱의 `queryAsync()`도 같은 VizQL 데이터 서비스로 요청을 보냅니다. 검증에서는 Samples 프로젝트의 공용 데이터 원본이 이 권한 없이 조회되지 않았습니다.

**해결**

1. **데이터 원본의 API 액세스 권한 요청하기:** [공식 문서](https://tableau.github.io/extensions-api/docs/dataapps/trex%5Fdataapp%5Foverview?ref=kr.vizney.com)는 작성자에게도 사용하는 데이터 원본마다 보기·연결·API 액세스 권한을 요구합니다. 데이터 원본 권한을 설정할 수 있는 담당자에게 요청하시기 바랍니다.
2. **조회할 수 있는 데이터 원본으로 시험하기:** 검증에서는 사용자가 직접 게시한 데이터 원본으로 바꾸자 같은 도구가 성공했습니다. 소유자이기 때문으로 보이지만, 권한 규칙을 따로 확인하지는 않았습니다.

앱을 공유하기 전에는 시청자 권한도 확인해야 합니다. 시청자에게는 통합 문서의 보기·전체 데이터 쿼리·API 액세스와 데이터 원본의 보기·연결·API 액세스가 필요합니다.

---

### 2\. Windows에서 작업 공간 준비 스크립트가 실패하면 어떻게 하나요?

Windows에서 플러그인 스크립트를 직접 실행하면 두 가지 문제를 만날 수 있습니다.

**`python3` 실행 시 `Python`만 출력하고 종료**

`python3`를 실행하면 `Python`만 출력되고 종료 코드 49로 끝났습니다. 이 PC의 `python3`는 사용자 폴더의 `AppData\Local\Microsoft\WindowsApps\python3.exe`로 연결됩니다. 이름으로 보아 Microsoft Store 실행 별칭입니다. 플러그인 문서의 명령은 `python3 ...` 형식이지만, 설치된 인터프리터인 `python`(검증 환경 Python 3.14.7)으로 바꿔 실행하면 됩니다.

**`Plan path escapes the unzip directory`**

> \\u2717 Plan path escapes the unzip directory: Data App Name/Data App Name.twb

- **원인:** `apply_plan.py` 51번째 줄의 `abs_path.startswith(unzip_dir + '/')` 검사 때문입니다. Windows의 `os.path.abspath`는 `\` 구분자를 돌려주므로, 정상 경로도 경로 이탈로 판정됩니다. 더미 계획과 실제 `postUnzip` 계획 모두 실패했습니다.
- **해결:** 원본은 그대로 두고 사본에서 한 줄을 고칩니다.

```diff
-        if abs_path != unzip_dir and not abs_path.startswith(unzip_dir + '/'):
+        if abs_path != unzip_dir and not abs_path.startswith(unzip_dir + os.sep):
```

- **확인한 범위:** 더미 정상 계획은 exit 0, 더미 경로 이탈 계획(`../outside.txt`)은 exit 1로 의도대로 거부됐습니다. 실제 `postUnzip` 계획은 exit 0으로 편집 3건, 이름 변경 3건이 적용됐습니다.
- **제보:** [tableau/tableau-plugin#35](https://github.com/tableau/tableau-plugin/issues/35?ref=kr.vizney.com)로 제보했습니다.

---

### 3\. publish-workbook이 'workbookFilePath'를 거부하면 어떻게 하나요?

> workbookFilePath is only supported when staged S3 uploads are not configured. Call request-workbook-upload first and pass workbookUploadId.

- **원인:** 오류가 아니라 사이트의 업로드 방식에 따른 분기입니다. 스테이징 업로드가 구성된 사이트에서는 파일 경로 방식(`workbookFilePath`)을 쓸 수 없고, 플러그인 문서도 이 분기를 예상합니다.
- **해결:** `request-workbook-upload`로 업로드 주소를 받고, 그 주소로 `curl -X PUT`을 실행해 .twbx를 올린 뒤, `publish-workbook`에 `workbookUploadId`를 넘겨 게시합니다. 검증에서는 업로드가 HTTP 200으로 끝났고, 게시 결과로 `status: "published"`, `warnings: []`를 받았습니다.

---

### 4\. get-view-image가 앱 대신 로그인 화면을 돌려주면 어떻게 하나요?

Tableau MCP의 `get-view-image`는 오류 없이 PNG(40,604바이트)를 돌려줬지만, 이미지 내용은 앱이 아니라 "Sign in to Tableau Cloud" 화면이었습니다.

- **원인:** 확인하지 못했습니다. 같은 뷰가 로그인한 브라우저에서는 정상으로 보였으므로, 앱 자체의 문제로 볼 근거는 없습니다.
- **해결:** 게시 후 동작은 로그인한 브라우저에서 앱을 직접 열어 확인합니다. 도구가 성공 응답을 돌려줬더라도 이미지 내용까지 확인하는 편이 좋습니다.

---

### Reference

- [What are Tableau data apps? – Tableau Extensions API](https://tableau.github.io/extensions-api/docs/dataapps/trex%5Fdataapp%5Foverview?ref=kr.vizney.com)
- [Get Started with Data Apps](https://tableau.github.io/extensions-api/docs/dataapps/trex%5Fdataapp%5Fgetstarted?ref=kr.vizney.com)
- [사용 권한 기능 및 템플릿 – Tableau 도움말](https://help.tableau.com/current/server/ko-kr/permissions%5Fcapabilities.htm?ref=kr.vizney.com)
- [tableau/tableau-plugin#35](https://github.com/tableau/tableau-plugin/issues/35?ref=kr.vizney.com)
- 관련 글: [태블로 데이터 앱 게시에 필요한 권한과 관리자 승인 범위](https://kr.vizney.com/tableau-data-app-publish-permissions/)

### Note:

이번 포스트는 2026년 11월 6일 tableau-plugin 커밋 `a8febd1`과 Tableau Cloud(2026.3.3)에서 확인한 내용을 바탕으로 작성되었으며, 플러그인과 베타 기능이 업데이트되면 달라질 수 있습니다.