From 3f2397df5aba6244b9458cf8ff67ec6b9a129e13 Mon Sep 17 00:00:00 2001 From: JK Date: Fri, 27 Feb 2026 01:30:51 +0900 Subject: [PATCH 1/2] =?UTF-8?q?confluence-mdx:=20callout=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=20reverse=20sync=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=202=EA=B1=B4=EC=9D=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 544380354: callout 내부 리스트 패치 (direct 전략 DOM 파괴) - 544112828: callout 내부 코드 블록 포함 시 텍스트 누수 Co-Authored-By: Claude Opus 4.6 --- .../tests/reverse-sync/544112828/improved.mdx | 316 +++++++++++ .../tests/reverse-sync/544112828/mapping.yaml | 534 ++++++++++++++++++ .../tests/reverse-sync/544112828/original.mdx | 316 +++++++++++ .../tests/reverse-sync/544112828/page.xhtml | 5 + .../tests/reverse-sync/544380354/improved.mdx | 44 ++ .../tests/reverse-sync/544380354/mapping.yaml | 58 ++ .../tests/reverse-sync/544380354/original.mdx | 44 ++ .../tests/reverse-sync/544380354/page.xhtml | 1 + 8 files changed, 1318 insertions(+) create mode 100644 confluence-mdx/tests/reverse-sync/544112828/improved.mdx create mode 100644 confluence-mdx/tests/reverse-sync/544112828/mapping.yaml create mode 100644 confluence-mdx/tests/reverse-sync/544112828/original.mdx create mode 100644 confluence-mdx/tests/reverse-sync/544112828/page.xhtml create mode 100644 confluence-mdx/tests/reverse-sync/544380354/improved.mdx create mode 100644 confluence-mdx/tests/reverse-sync/544380354/mapping.yaml create mode 100644 confluence-mdx/tests/reverse-sync/544380354/original.mdx create mode 100644 confluence-mdx/tests/reverse-sync/544380354/page.xhtml diff --git a/confluence-mdx/tests/reverse-sync/544112828/improved.mdx b/confluence-mdx/tests/reverse-sync/544112828/improved.mdx new file mode 100644 index 000000000..3b7d81245 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544112828/improved.mdx @@ -0,0 +1,316 @@ +--- +title: 'User Agent' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544112828/User+Agent' +--- + +import { Callout } from 'nextra/components' + +# User Agent + +QueryPie Agent를 설치하면, DataGrip, DBeaver와 같은 SQL Client, iTerm/SecureCRT와 같은 SSH Client, Lens, k9s와 같은 3rd Party 애플리케이션을 사용할 수 있습니다. + +### 에이전트 앱 다운로드 및 실행하기 + +#### 1. QueryPie 로그인 후 우측 상단 프로필을 클릭하여 `Agent Download` 버튼을 클릭합니다. + +
+QueryPie Web > 프로필 메뉴 +
+QueryPie Web > 프로필 메뉴 +
+
+ +#### 2. 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다. + +QueryPie Agent Downloads 팝업창의 Step 1 에서, 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다. +Step 3 섹션에 표시된 QueryPie URL을 복사해 둡니다. + +
+QueryPie Web > Agent Downloads 팝업창 +
+QueryPie Web > Agent Downloads 팝업창 +
+
+ + +QueryPie Agent는 Mac, Windows, Linux OS를 지원합니다. + + +#### 3. 다운로드받은 QueryPie Agent 설치 프로그램을 실행하여 설치를 완료합니다. + +
+Mac OS 설치 프로그램 +
+Mac OS 설치 프로그램 +
+
+ +#### 4. 설치된 QueryPie Agent를 실행합니다. + +QueryPie Host 입력란에 미리 복사해뒀던 QueryPie URL을 입력하고 `Next` 버튼을 클릭하면 로그인 화면으로 진입하게 됩니다. + +
+Agent > QueryPie Host 입력 +
+Agent > QueryPie Host 입력 +
+
+ +### QueryPie Agent에 로그인하기 + +#### 1. Agent 앱 내 로그인 화면에서 `Login` 버튼을 클릭합니다. + +
+screenshot-20240804-173713.png +
+ +#### 2. 웹 브라우저가 열리면, 로그인 페이지에서 인증정보를 입력하고, `Continue` 버튼을 클릭합니다. + +
+QueryPie Web > Agent Login Page +
+QueryPie Web > Agent Login Page +
+
+ +#### 3. 로그인을 성공하면 아래와 같이 로그인 성공 화면이 표시되며 이후 Agent로 돌아갑니다. + +
+QueryPie Web > Agent Login Success Page +
+QueryPie Web > Agent Login Success Page +
+
+ +#### 4. Agent 열기를 명시적으로 수행하여 인증정보를 Agent로 전달합니다. + +
+Chrome - Agent App 열기 모달 +
+Chrome - Agent App 열기 모달 +
+
+ +### 에이전트로 데이터베이스 접속하기 + +#### 1. Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인합니다. + +로그인이 정상적으로 완료되면 Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인할 수 있습니다. +접속할 커넥션에 할당된 `Port` 를 클릭하면, 해당 커넥션의 `Proxy Credentials` 정보를 확인할 수 있습니다. + +
+Agent > DB Connection Information +
+Agent > DB Connection Information +
+
+ +#### 2. 위의 접속 정보를 3rd Party 클라이언트에 입력하면 DB 커넥션 접속이 가능합니다. + +
+3rd Party Client를 이용한 DB 커넥션 접속 +
+3rd Party Client를 이용한 DB 커넥션 접속 +
+
+ + +### 에이전트를 통한 서버 접속 + +로그인이 정상적으로 완료되면 Agent 앱 내 Server 탭에서 권한 있는 서버를 확인할 수 있습니다. + +#### 1. 서버 역할 선택하기 + +사용자 프로필 영역 하단의 `Role` 버튼을 클릭하여 원하는 역할을 고르고 `OK` 버튼을 클릭하세요. `Default` 역할을 선택하는 경우, Workflow > Server Access Request 요청에 의해 할당받은 서버 권한을 사용합니다. + +
+Agent > Server > Select a Role +
+Agent > Server > Select a Role +
+
+ + +역할이 두 개 이상이라면, Agent 로그인 후 Server 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다. + + +#### 2. Agent로 서버 접속하기 + +접속할 서버를 우클릭 후 `Open Connection with` 메뉴를 선택하여, 사용하려는 터미널 툴을 선택합니다. + +
+Agent > Server > Open Connection with +
+Agent > Server > Open Connection with +
+
+ +이후 해당 서버에 접속 가능한 계정이 여러 개라면, Account 선택창이 열립니다. +사용하려는 계정을 선택하고, 필요 시 비밀번호를 입력한 뒤, `OK` 버튼을 클릭하여 세션을 엽니다. + +
+Agent > Server > Open New Session +
+Agent > Server > Open New Session +
+
+ +#### 3. Seamless SSH 설정하기 + +Seamless SSH란 기존 터미널 사용성을 그대로 유지하면서 QueryPie를 통해 서버에 접속할 수 있는 기능입니다. +다음 방법으로 `.ssh` 폴더에 `config` 파일을 생성하여 손쉽게 Seamless SSH를 설정할 수 있습니다. + +##### 3.1. 터미널을 열고, `.ssh` 폴더로 이동합니다. + +``` +$ cd .ssh +``` + +##### 3.2. `.ssh` 폴더에서 `config` 파일을 생성하기 위해 vi 에디터를 엽니다. + +``` +$ vi config +``` + +##### 3.3. 아래의 내용을 입력 후, `Esc` 와 `:wq` 를 입력하여 변경사항을 저장하고, vi 에디터를 종료합니다. + +``` +Host {{Server Name}} + Hostname {{Server URL}} + Port {{Server SSH Port}} + ProxyCommand qpa ssh %r %h %p +``` + + +`config` 파일 작성 시 Seamless SSH 설정하고자 하는 서버마다 서버 이름, URL, 포트를 입력함으로써 서버를 특정합니다. +서버 간 URL, 포트가 겹치지 않는 경우 아래와 같이 입력해도 접속할 수 있습니다. +``` +Host * + ProxyCommand qpa ssh %r %h %p +``` + + +##### 3.4. 이상으로 설정이 완료됩니다. + +Agent > Server 탭에서 역할을 선택하면 기존 ssh 명령어로 서버에 접속할 수 있습니다. +``` +$ ssh deploy@{{Server Name}} +``` + + +### 에이전트를 통한 쿠버네티스 접속 + +
+kubernetes-agent-access-flow.png +
+ +권한을 부여 받은 사용자는 에이전트 실행 시 현재 정책에 따른 `kubeconfig` 파일이 자동으로 수신됩니다. +이를 통해 Kubernetes Client (kubectl, lens, k9s 등) 툴로 Kubernetes API 리소스에 접근할 수 있습니다. + +에이전트에서는 접근 가능한 클러스트 리스트를 표시하며, 각 클러스터에 적용된 정책을 확인할 수 있습니다. +또한 설정 메뉴를 통해 `kubeconfig` 파일의 위치를 확인하고, 파일의 경로를 변경할 수 있습니다. + +#### 1. Kubernetes 역할 선택하기 + +사용자 프로필 영역 하단의 `Role` 버튼을 클릭하면 역할 선택 모달이 열립니다. +원하는 역할을 고르고 `OK` 버튼을 클릭하세요. + +
+Agent > Kubernetes > Select a Role +
+Agent > Kubernetes > Select a Role +
+
+ + +역할이 두 개 이상이라면, Agent 로그인 후 Kubernetes 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다. + + + +#### 2. Policy 조회하기 + +선택된 역할에 따라 접근 가능한 리소스가 표시됩니다. +각 클러스터 우측의 `🔍` 버튼을 누르면 Policy Information 팝업창이 나타나며 이곳에서 해당 클러스터에 적용된 정책 목록을 자세히 확인할 수 있습니다. + +
+Agent > Policy Information +
+Agent > Policy Information +
+
+ +#### 3. Kubeconfig 경로 설정하기 + +Agent 설정 메뉴에서 `KubeConfig Path` 버튼을 클릭하여 Kubeconfig 경로 설정 모달을 엽니다. + +
+Agent > Settings > Configure Kubeconfig Path +
+Agent > Settings > Configure Kubeconfig Path +
+
+ +* **Path Configuration** : Kubeconfig 파일 저장 경로를 사용자가 지정할 수 있습니다. + * 기본값은 `$HOME/.kube/querypie-kubeconfig` 입니다. + * 경로 필드 우측 `Upload` 버튼을 누르면 로컬 파일 경로를 지정할 수 있는 팝업이 나타납니다. + + +
+경로 지정 팝업 +
+경로 지정 팝업 +
+
+ +* **Where** : 우측의 `🔽` 버튼을 클릭하여 원하는 폴더를 지정합니다. +* **Save As** : Kubeconfig 파일의 이름을 입력합니다. 변경하지 않으면 기본값으로 적용됩니다. +* **Command Line** : KUBECONFIG 환경 변수를 선언하기 위한 커맨드 라인을 제공합니다. + +1) KUBECONFIG 환경 변수를 최초 설정하는 경우, 명령 줄 내의 디폴트 "`${KUBECONFIG}`" 값을 사용 전에 "`${HOME}/.kube/config`"로 변경해야 합니다. +``` +export KUBECONFIG="${HOME}/.kube/config:${HOME}/.kube/querypie-kubeconfig" +``` + +2) QueryPie에서 제공된 사용자 지정 kubeconfig 경로를 변경한 경우 새 경로로 환경 변수를 다시 선언해야 합니다. +``` +export KUBECONFIG="${KUBECONFIG}:" +``` + +3) 보다 자세한 kubeconfig에 대한 내용은 다음 링크를 참조하시기 바랍니다. + +* 참고: [kubeconfig 파일 병합](https://kubernetes.io/ko/docs/concepts/configuration/organize-cluster-access-kubeconfig/#kubeconfig-%ED%8C%8C%EC%9D%BC-%EB%B3%91%ED%95%A9) +* 참고: [KUBECONFIG 환경 변수 설정](https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#kubeconfig-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95) + +4) `Copy`로 커맨드라인을 복사해 클라이언트에 선언하고 컨텍스트를 접근 가능한 클러스터로 스위칭할 수 있습니다. +``` +export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/querypie-kubeconfig" +``` + + +### QueryPie Agent 세팅 초기화하기 + +세팅을 초기화하면 입력하였던 QueryPie Host 정보가 초기화되어 다시 입력할 수 있게 됩니다. +#### Agent 내 설정 메뉴에서 초기화 + +프로필 영역 우측 `⚙️` 버튼을 클릭하여 설정 메뉴를 엽니다. `Reset All Settings` 버튼을 클릭합니다. + +
+Agent > Settings +
+Agent > Settings +
+
+ + +#### (Mac) 메뉴 막대 내 앱 메뉴에서 초기화 + +메뉴 막대에서 QueryPie Agent 아이콘을 클릭하여 앱 메뉴를 엽니다. `Reset All Settings` 버튼을 클릭합니다. + +
+Agent > App menu +
+Agent > App menu +
+
+ + diff --git a/confluence-mdx/tests/reverse-sync/544112828/mapping.yaml b/confluence-mdx/tests/reverse-sync/544112828/mapping.yaml new file mode 100644 index 000000000..2616d08da --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544112828/mapping.yaml @@ -0,0 +1,534 @@ +lost_info: + filenames: + - normalized: screenshot-20240804-173002.png + original: 스크린샷 2024-08-04 오후 5.30.02.png + - normalized: screenshot-20240804-174002.png + original: 스크린샷 2024-08-04 오후 5.40.02.png + - normalized: screenshot-20240804-173713.png + original: 스크린샷 2024-08-04 오후 5.37.13.png + - normalized: screenshot-20240729-171236.png + original: 스크린샷 2024-07-29 오후 5.12.36.png + - normalized: screenshot-20240729-171314.png + original: 스크린샷 2024-07-29 오후 5.13.14.png + - normalized: screenshot-20240804-174209.png + original: 스크린샷 2024-08-04 오후 5.42.09.png + - normalized: screenshot-20240730-151001.png + original: 스크린샷 2024-07-30 오후 3.10.01.png + - normalized: screenshot-20240730-162653.png + original: 스크린샷 2024-07-30 오후 4.26.53.png + - normalized: screenshot-20240730-161729.png + original: 스크린샷 2024-07-30 오후 4.17.29.png + - normalized: screenshot-20240730-162532.png + original: 스크린샷 2024-07-30 오후 4.25.32.png + - normalized: screenshot-20240730-152705.png + original: 스크린샷 2024-07-30 오후 3.27.05.png + - normalized: screenshot-20240730-161141.png + original: 스크린샷 2024-07-30 오후 4.11.41.png + - normalized: screenshot-20240730-154623.png + original: 스크린샷 2024-07-30 오후 3.46.23.png + - normalized: screenshot-20240730-163530.png + original: 스크린샷 2024-07-30 오후 4.35.30.png + - normalized: screenshot-20240730-153518.png + original: 스크린샷 2024-07-30 오후 3.35.18.png + - normalized: screenshot-20240730-153524.png + original: 스크린샷 2024-07-30 오후 3.35.24.png + images: + - raw:

QueryPie Web > 프로필 메뉴

+ src: /user-manual/user-agent/screenshot-20240804-173002.png + - raw:

QueryPie Web > Agent Downloads 팝업창

+ src: /user-manual/user-agent/image-20240723-154847.png + - raw:

Mac OS 설치 프로그램

+ src: /user-manual/user-agent/screenshot-20240804-174002.png + - raw:

Agent > QueryPie Host 입력

+ src: /user-manual/user-agent/agent-03.png + - raw: + src: /user-manual/user-agent/screenshot-20240804-173713.png + - raw:

QueryPie Web > Agent Login Page

+ src: /user-manual/user-agent/screenshot-20240729-171236.png + - raw:

QueryPie Web > Agent Login Success Page

+ src: /user-manual/user-agent/screenshot-20240729-171314.png + - raw:

Chrome - Agent App 열기 모달

+ src: /user-manual/user-agent/screenshot-20240804-174209.png + - raw:

Agent > DB Connection Information

+ src: /user-manual/user-agent/screenshot-20240730-151001.png + - raw:

3rd Party Client를 이용한 DB 커넥션 접속

+ src: /user-manual/user-agent/agent-07.png + - raw:

Agent > Server > Select a Role

+ src: /user-manual/user-agent/screenshot-20240730-162653.png + - raw:

Agent > Server > Open Connection with

+ src: /user-manual/user-agent/screenshot-20240730-161729.png + - raw:

Agent > Server > Open New Session

+ src: /user-manual/user-agent/screenshot-20240730-162532.png + - raw: + src: /user-manual/user-agent/kubernetes-agent-access-flow.png + - raw:

Agent > Kubernetes > Select a Role

+ src: /user-manual/user-agent/screenshot-20240730-152705.png + - raw:

Agent > Policy Information

+ src: /user-manual/user-agent/screenshot-20240730-161141.png + - raw:

Agent > Settings > Configure Kubeconfig + Path

+ src: /user-manual/user-agent/screenshot-20240730-154623.png + - raw:

경로 지정 팝업

+ src: /user-manual/user-agent/screenshot-20240730-163530.png + - raw:

Agent > Settings

+ src: /user-manual/user-agent/screenshot-20240730-153518.png + - raw:

Agent > App menu

+ src: /user-manual/user-agent/screenshot-20240730-153524.png +mappings: +- mdx_blocks: + - 6 + xhtml_type: paragraph + xhtml_xpath: p[1] +- mdx_blocks: + - 8 + xhtml_type: heading + xhtml_xpath: h2[1] +- mdx_blocks: + - 10 + xhtml_type: heading + xhtml_xpath: h3[1] +- mdx_blocks: + - 12 + xhtml_type: html_block + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 14 + xhtml_type: heading + xhtml_xpath: h3[2] +- mdx_blocks: + - 16 + xhtml_type: paragraph + xhtml_xpath: p[2] +- mdx_blocks: + - 18 + xhtml_type: html_block + xhtml_xpath: ac:image[2] +- mdx_blocks: + - 20 + xhtml_type: html_block + xhtml_xpath: macro-info[1] +- mdx_blocks: + - 22 + xhtml_type: heading + xhtml_xpath: h3[3] +- mdx_blocks: + - 24 + xhtml_type: html_block + xhtml_xpath: ac:image[3] +- mdx_blocks: + - 26 + xhtml_type: heading + xhtml_xpath: h3[4] +- mdx_blocks: + - 28 + xhtml_type: paragraph + xhtml_xpath: p[3] +- mdx_blocks: + - 30 + xhtml_type: html_block + xhtml_xpath: ac:image[4] +- mdx_blocks: + - 32 + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: + - 34 + xhtml_type: heading + xhtml_xpath: h3[5] +- mdx_blocks: [] + xhtml_type: html_block + xhtml_xpath: ac:image[5] +- mdx_blocks: + - 38 + xhtml_type: heading + xhtml_xpath: h3[6] +- mdx_blocks: + - 40 + xhtml_type: html_block + xhtml_xpath: ac:image[6] +- mdx_blocks: + - 42 + xhtml_type: heading + xhtml_xpath: h3[7] +- mdx_blocks: + - 44 + xhtml_type: html_block + xhtml_xpath: ac:image[7] +- mdx_blocks: + - 46 + xhtml_type: heading + xhtml_xpath: h3[8] +- mdx_blocks: + - 48 + xhtml_type: html_block + xhtml_xpath: ac:image[8] +- mdx_blocks: + - 50 + xhtml_type: heading + xhtml_xpath: h2[3] +- mdx_blocks: + - 52 + xhtml_type: heading + xhtml_xpath: h3[9] +- mdx_blocks: + - 54 + xhtml_type: paragraph + xhtml_xpath: p[4] +- mdx_blocks: + - 56 + xhtml_type: html_block + xhtml_xpath: ac:image[9] +- mdx_blocks: + - 58 + xhtml_type: heading + xhtml_xpath: h3[10] +- mdx_blocks: + - 60 + xhtml_type: html_block + xhtml_xpath: ac:image[10] +- mdx_blocks: + - 61 + xhtml_type: paragraph + xhtml_xpath: p[5] +- mdx_blocks: + - 63 + xhtml_type: heading + xhtml_xpath: h2[4] +- mdx_blocks: + - 65 + xhtml_type: paragraph + xhtml_xpath: p[6] +- mdx_blocks: + - 67 + xhtml_type: heading + xhtml_xpath: h3[11] +- mdx_blocks: + - 69 + xhtml_type: paragraph + xhtml_xpath: p[7] +- mdx_blocks: + - 71 + xhtml_type: html_block + xhtml_xpath: ac:image[11] +- mdx_blocks: + - 73 + xhtml_type: html_block + xhtml_xpath: macro-info[2] +- mdx_blocks: + - 75 + xhtml_type: heading + xhtml_xpath: h3[12] +- mdx_blocks: + - 77 + xhtml_type: paragraph + xhtml_xpath: p[8] +- mdx_blocks: + - 79 + xhtml_type: html_block + xhtml_xpath: ac:image[12] +- mdx_blocks: + - 81 + xhtml_type: paragraph + xhtml_xpath: p[9] +- mdx_blocks: + - 83 + xhtml_type: html_block + xhtml_xpath: ac:image[13] +- mdx_blocks: + - 85 + xhtml_type: heading + xhtml_xpath: h3[13] +- mdx_blocks: + - 87 + xhtml_type: paragraph + xhtml_xpath: p[10] +- mdx_blocks: + - 89 + xhtml_type: heading + xhtml_xpath: h4[1] +- mdx_blocks: + - 91 + xhtml_type: code + xhtml_xpath: macro-code[1] +- mdx_blocks: + - 93 + xhtml_type: heading + xhtml_xpath: h4[2] +- mdx_blocks: + - 95 + xhtml_type: code + xhtml_xpath: macro-code[2] +- mdx_blocks: + - 97 + xhtml_type: heading + xhtml_xpath: h4[3] +- mdx_blocks: + - 99 + xhtml_type: code + xhtml_xpath: macro-code[3] +- mdx_blocks: + - 101 + xhtml_type: html_block + xhtml_xpath: macro-info[3] +- mdx_blocks: + - 103 + xhtml_type: heading + xhtml_xpath: h4[4] +- mdx_blocks: + - 105 + xhtml_type: paragraph + xhtml_xpath: p[11] +- mdx_blocks: + - 106 + xhtml_type: code + xhtml_xpath: macro-code[4] +- mdx_blocks: + - 107 + xhtml_type: paragraph + xhtml_xpath: p[12] +- mdx_blocks: + - 109 + xhtml_type: heading + xhtml_xpath: h2[5] +- mdx_blocks: [] + xhtml_type: html_block + xhtml_xpath: ac:image[14] +- mdx_blocks: + - 113 + xhtml_type: paragraph + xhtml_xpath: p[13] +- mdx_blocks: + - 115 + xhtml_type: paragraph + xhtml_xpath: p[14] +- mdx_blocks: + - 117 + xhtml_type: heading + xhtml_xpath: h3[14] +- mdx_blocks: + - 119 + xhtml_type: paragraph + xhtml_xpath: p[15] +- mdx_blocks: + - 121 + xhtml_type: html_block + xhtml_xpath: ac:image[15] +- mdx_blocks: + - 123 + xhtml_type: html_block + xhtml_xpath: macro-info[4] +- mdx_blocks: + - 124 + xhtml_type: paragraph + xhtml_xpath: p[16] +- mdx_blocks: + - 126 + xhtml_type: heading + xhtml_xpath: h3[15] +- mdx_blocks: + - 128 + xhtml_type: paragraph + xhtml_xpath: p[17] +- mdx_blocks: + - 130 + xhtml_type: html_block + xhtml_xpath: ac:image[16] +- mdx_blocks: + - 132 + xhtml_type: heading + xhtml_xpath: h3[16] +- mdx_blocks: + - 134 + xhtml_type: paragraph + xhtml_xpath: p[18] +- mdx_blocks: + - 136 + xhtml_type: html_block + xhtml_xpath: ac:image[17] +- mdx_blocks: + - 138 + xhtml_type: list + xhtml_xpath: ul[1] +- mdx_blocks: + - 139 + xhtml_type: paragraph + xhtml_xpath: p[19] +- mdx_blocks: + - 141 + xhtml_type: html_block + xhtml_xpath: ac:image[18] +- mdx_blocks: + - 143 + xhtml_type: list + xhtml_xpath: ul[2] +- mdx_blocks: + - 145 + xhtml_type: paragraph + xhtml_xpath: p[20] +- mdx_blocks: + - 146 + xhtml_type: code + xhtml_xpath: macro-code[5] +- mdx_blocks: + - 148 + xhtml_type: paragraph + xhtml_xpath: p[21] +- mdx_blocks: + - 149 + xhtml_type: code + xhtml_xpath: macro-code[6] +- mdx_blocks: + - 151 + xhtml_type: paragraph + xhtml_xpath: p[22] +- mdx_blocks: + - 153 + xhtml_type: list + xhtml_xpath: ul[3] +- mdx_blocks: + - 155 + xhtml_type: paragraph + xhtml_xpath: p[23] +- mdx_blocks: + - 156 + xhtml_type: code + xhtml_xpath: macro-code[7] +- mdx_blocks: + - 157 + xhtml_type: paragraph + xhtml_xpath: p[24] +- mdx_blocks: + - 159 + xhtml_type: heading + xhtml_xpath: h2[6] +- mdx_blocks: + - 161 + xhtml_type: paragraph + xhtml_xpath: p[25] +- mdx_blocks: + - 162 + xhtml_type: heading + xhtml_xpath: h3[17] +- mdx_blocks: + - 164 + xhtml_type: paragraph + xhtml_xpath: p[26] +- mdx_blocks: + - 166 + xhtml_type: html_block + xhtml_xpath: ac:image[19] +- mdx_blocks: + - 167 + xhtml_type: paragraph + xhtml_xpath: p[27] +- mdx_blocks: + - 169 + xhtml_type: heading + xhtml_xpath: h3[18] +- mdx_blocks: + - 171 + xhtml_type: paragraph + xhtml_xpath: p[28] +- mdx_blocks: + - 173 + xhtml_type: html_block + xhtml_xpath: ac:image[20] +- mdx_blocks: + - 174 + xhtml_type: paragraph + xhtml_xpath: p[29] +mdx_file: page.mdx +source_page_id: '544112828' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544112828/original.mdx b/confluence-mdx/tests/reverse-sync/544112828/original.mdx new file mode 100644 index 000000000..373b8116d --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544112828/original.mdx @@ -0,0 +1,316 @@ +--- +title: 'User Agent' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544112828/User+Agent' +--- + +import { Callout } from 'nextra/components' + +# User Agent + +QueryPie Agent를 설치하면, DataGrip, DBeaver와 같은 SQL Client, iTerm/SecureCRT와 같은 SSH Client, Lens, k9s와 같은 3rd Party 애플리케이션을 사용할 수 있습니다. + +### 에이전트 앱 다운로드 및 실행하기 + +#### 1. QueryPie 로그인 후 우측 상단 프로필을 클릭하여 `Agent Download` 버튼을 클릭합니다. + +
+QueryPie Web > 프로필 메뉴 +
+QueryPie Web > 프로필 메뉴 +
+
+ +#### 2. 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다. + +QueryPie Agent Downloads 팝업창의 Step 1 에서, 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다. +Step 3 섹션에 표시된 QueryPie URL을 복사해 둡니다. + +
+QueryPie Web > Agent Downloads 팝업창 +
+QueryPie Web > Agent Downloads 팝업창 +
+
+ + +QueryPie Agent는 Mac, Windows, Linux OS를 지원합니다. + + +#### 3. 다운로드받은 QueryPie Agent 설치 프로그램을 실행하여 설치를 완료합니다. + +
+Mac OS 설치 프로그램 +
+Mac OS 설치 프로그램 +
+
+ +#### 4. 설치된 QueryPie Agent를 실행합니다. + +QueryPie Host 입력란에 미리 복사해뒀던 QueryPie URL을 입력하고 `Next` 버튼을 클릭하면 로그인 화면으로 진입하게 됩니다. + +
+Agent > QueryPie Host 입력 +
+Agent > QueryPie Host 입력 +
+
+ +### QueryPie Agent에 로그인하기 + +#### 1. Agent 앱 내 로그인 화면에서 `Login` 버튼을 클릭합니다. + +
+screenshot-20240804-173713.png +
+ +#### 2. 웹 브라우저가 열리면, 로그인 페이지에서 인증정보를 입력하고, `Continue` 버튼을 클릭합니다. + +
+QueryPie Web > Agent Login Page +
+QueryPie Web > Agent Login Page +
+
+ +#### 3. 로그인을 성공하면 아래와 같이 로그인 성공 화면이 표시되며 이후 Agent로 돌아갑니다. + +
+QueryPie Web > Agent Login Success Page +
+QueryPie Web > Agent Login Success Page +
+
+ +#### 4. Agent 열기를 명시적으로 수행하여 인증정보를 Agent로 전달합니다. + +
+Chrome - Agent App 열기 모달 +
+Chrome - Agent App 열기 모달 +
+
+ +### 에이전트로 데이터베이스 접속하기 + +#### 1. Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인합니다. + +로그인이 정상적으로 완료되면 Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인할 수 있습니다. +접속할 커넥션에 할당된 `Port` 를 클릭하면, 해당 커넥션의 `Proxy Credentials` 정보를 확인할 수 있습니다. + +
+Agent > DB Connection Information +
+Agent > DB Connection Information +
+
+ +#### 2. 위의 접속 정보를 3rd Party 클라이언트에 입력하면 DB 커넥션 접속이 가능합니다. + +
+3rd Party Client를 이용한 DB 커넥션 접속 +
+3rd Party Client를 이용한 DB 커넥션 접속 +
+
+ + +### 에이전트를 통한 서버 접속 + +로그인이 정상적으로 완료되면 Agent 앱 내 Server 탭에서 권한 있는 서버를 확인할 수 있습니다. + +#### 1. 서버 역할 선택하기 + +사용자 프로필 영역 하단의 `Role` 버튼을 클릭하여 원하는 역할을 고르고 `OK` 버튼을 클릭하세요. `Default` 역할을 선택하는 경우, Workflow > Server Access Request 요청에 의해 할당받은 서버 권한을 사용합니다. + +
+Agent > Server > Select a Role +
+Agent > Server > Select a Role +
+
+ + +역할이 두 개 이상이라면, Agent 로그인 후 Server 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다. + + +#### 2. Agent로 서버 접속하기 + +접속할 서버를 우클릭 후 `Open Connection with` 메뉴를 선택하여, 사용하려는 터미널 툴을 선택합니다. + +
+Agent > Server > Open Connection with +
+Agent > Server > Open Connection with +
+
+ +이후 해당 서버에 접속 가능한 계정이 여러 개라면, Account 선택창이 열립니다. +사용하려는 계정을 선택하고, 필요 시 비밀번호를 입력한 뒤, `OK` 버튼을 클릭하여 세션을 엽니다. + +
+Agent > Server > Open New Session +
+Agent > Server > Open New Session +
+
+ +#### 3. Seamless SSH 설정하기 + +Seamless SSH란 기존 터미널 사용성을 그대로 유지하면서 QueryPie를 통해 서버에 접속할 수 있는 기능입니다. +다음의 방법으로 `.ssh` 폴더에 `config` 파일을 생성하여 손쉽게 seamless SSH 설정이 가능합니다. + +##### 3.1. 터미널을 열고, `.ssh` 폴더로 이동합니다. + +``` +$ cd .ssh +``` + +##### 3.2. `.ssh` 폴더에서 `config` 파일을 생성하기 위해 vi 에디터를 엽니다. + +``` +$ vi config +``` + +##### 3.3. 아래의 내용을 입력 후, `Esc` 와 `:wq` 를 입력하여 변경사항을 저장하고, vi 에디터를 종료합니다. + +``` +Host {{Server Name}} + Hostname {{Server URL}} + Port {{Server SSH Port}} + ProxyCommand qpa ssh %r %h %p +``` + + +`config` 파일 작성 시 Seamless SSH 설정하고자 하는 서버마다 서버 이름, URL, 포트를 입력함으로써 서버를 특정합니다. +서버 간에 URL, 포트가 겹치지 않는 경우 아래와 같이 입력하여도 접속이 가능합니다. +``` +Host * + ProxyCommand qpa ssh %r %h %p +``` + + +##### 3.4. 이상으로 설정이 완료됩니다. + +Agent > Server 탭에서 역할을 선택하면 기존 ssh 명령어로 서버에 접속할 수 있습니다. +``` +$ ssh deploy@{{Server Name}} +``` + + +### 에이전트를 통한 쿠버네티스 접속 + +
+kubernetes-agent-access-flow.png +
+ +권한을 부여 받은 사용자는 에이전트 실행 시 현재 정책에 따른 `kubeconfig` 파일이 자동으로 수신됩니다. +이를 통해 Kubernetes Client (kubectl, lens, k9s 등) 툴로 Kubernetes API 리소스에 접근할 수 있습니다. + +에이전트에서는 접근 가능한 클러스트 리스트를 표시하며, 각 클러스터에 적용된 정책을 확인할 수 있습니다. +또한 설정 메뉴를 통해 `kubeconfig` 파일의 위치를 확인하고, 파일의 경로를 변경할 수 있습니다. + +#### 1. Kubernetes 역할 선택하기 + +사용자 프로필 영역 하단의 `Role` 버튼을 클릭하면 역할 선택 모달이 열립니다. +원하는 역할을 고르고 `OK` 버튼을 클릭하세요. + +
+Agent > Kubernetes > Select a Role +
+Agent > Kubernetes > Select a Role +
+
+ + +역할이 두 개 이상이라면, Agent 로그인 후 Kubernetes 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다. + + + +#### 2. Policy 조회하기 + +선택된 역할에 따라 접근 가능한 리소스가 표시됩니다. +각 클러스터 우측의 `🔍` 버튼을 누르면 Policy Information 팝업창이 나타나며 이곳에서 해당 클러스터에 적용된 정책 목록을 자세히 확인할 수 있습니다. + +
+Agent > Policy Information +
+Agent > Policy Information +
+
+ +#### 3. Kubeconfig 경로 설정하기 + +Agent 설정 메뉴에서 `KubeConfig Path` 버튼을 클릭하여 Kubeconfig 경로 설정 모달을 엽니다. + +
+Agent > Settings > Configure Kubeconfig Path +
+Agent > Settings > Configure Kubeconfig Path +
+
+ +* **Path Configuration** : Kubeconfig 파일 저장 경로를 사용자가 지정할 수 있습니다. + * 기본값은 `$HOME/.kube/querypie-kubeconfig` 입니다. + * 경로 필드 우측 `Upload` 버튼을 누르면 로컬 파일 경로를 지정할 수 있는 팝업이 나타납니다. + + +
+경로 지정 팝업 +
+경로 지정 팝업 +
+
+ +* **Where** : 우측의 `🔽` 버튼을 클릭하여 원하는 폴더를 지정합니다. +* **Save As** : Kubeconfig 파일의 이름을 입력합니다. 변경하지 않으면 기본값으로 적용됩니다. +* **Command Line** : KUBECONFIG 환경 변수를 선언하기 위한 커맨드 라인을 제공합니다. + +1) KUBECONFIG 환경 변수를 최초 설정하는 경우, 명령 줄 내의 디폴트 "`${KUBECONFIG}`" 값을 사용 전에 "`${HOME}/.kube/config`"로 변경해야 합니다. +``` +export KUBECONFIG="${HOME}/.kube/config:${HOME}/.kube/querypie-kubeconfig" +``` + +2) QueryPie에서 제공된 사용자 지정 kubeconfig 경로를 변경한 경우 새 경로로 환경 변수를 다시 선언해야 합니다. +``` +export KUBECONFIG="${KUBECONFIG}:" +``` + +3) 보다 자세한 kubeconfig에 대한 내용은 다음 링크를 참조해주시기 바랍니다. + +* 참고: [kubeconfig 파일 병합](https://kubernetes.io/ko/docs/concepts/configuration/organize-cluster-access-kubeconfig/#kubeconfig-%ED%8C%8C%EC%9D%BC-%EB%B3%91%ED%95%A9) +* 참고: [KUBECONFIG 환경 변수 설정](https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#kubeconfig-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95) + +4) `Copy` 로 커맨드라인을 복사하여 클라이언트에 선언하고 컨텍스트를 접근 가능한 클러스터로 스위칭할 수 있습니다 +``` +export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/querypie-kubeconfig" +``` + + +### QueryPie Agent 세팅 초기화하기 + +세팅을 초기화하면 입력하였던 QueryPie Host 정보가 초기화되어 다시 입력할 수 있게 됩니다. +#### Agent 내 설정 메뉴에서 초기화 + +프로필 영역 우측 `⚙️` 버튼을 클릭하여 설정 메뉴를 엽니다. `Reset All Settings` 버튼을 클릭합니다. + +
+Agent > Settings +
+Agent > Settings +
+
+ + +#### (Mac) 메뉴 막대 내 앱 메뉴에서 초기화 + +메뉴 막대에서 QueryPie Agent 아이콘을 클릭하여 앱 메뉴를 엽니다. `Reset All Settings` 버튼을 클릭합니다. + +
+Agent > App menu +
+Agent > App menu +
+
+ + diff --git a/confluence-mdx/tests/reverse-sync/544112828/page.xhtml b/confluence-mdx/tests/reverse-sync/544112828/page.xhtml new file mode 100644 index 000000000..f06b2a559 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544112828/page.xhtml @@ -0,0 +1,5 @@ +

QueryPie Agent를 설치하면, DataGrip, DBeaver와 같은 SQL Client, iTerm/SecureCRT와 같은 SSH Client, Lens, k9s와 같은 3rd Party 애플리케이션을 사용할 수 있습니다.

에이전트 앱 다운로드 및 실행하기

1. QueryPie 로그인 후 우측 상단 프로필을 클릭하여 Agent Download 버튼을 클릭합니다.

QueryPie Web > 프로필 메뉴

2. 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다.

QueryPie Agent Downloads 팝업창의 Step 1 에서, 사용 중인 PC 운영체제에 맞는 설치 파일을 다운로드합니다. Step 3 섹션에 표시된 QueryPie URL을 복사해 둡니다.

QueryPie Web > Agent Downloads 팝업창

QueryPie Agent는 Mac, Windows, Linux OS를 지원합니다.

3. 다운로드받은 QueryPie Agent 설치 프로그램을 실행하여 설치를 완료합니다.

Mac OS 설치 프로그램

4. 설치된 QueryPie Agent를 실행합니다.

QueryPie Host 입력란에 미리 복사해뒀던 QueryPie URL을 입력하고 Next 버튼을 클릭하면 로그인 화면으로 진입하게 됩니다.

Agent > QueryPie Host 입력

QueryPie Agent에 로그인하기

1. Agent 앱 내 로그인 화면에서 Login 버튼을 클릭합니다.

2. 웹 브라우저가 열리면, 로그인 페이지에서 인증정보를 입력하고, Continue 버튼을 클릭합니다.

QueryPie Web > Agent Login Page

3. 로그인을 성공하면 아래와 같이 로그인 성공 화면이 표시되며 이후 Agent로 돌아갑니다.

QueryPie Web > Agent Login Success Page

4. Agent 열기를 명시적으로 수행하여 인증정보를 Agent로 전달합니다.

Chrome - Agent App 열기 모달

에이전트로 데이터베이스 접속하기

1. Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인합니다.

로그인이 정상적으로 완료되면 Agent 앱 내 Database 탭에서 권한 있는 커넥션들의 접속 정보를 확인할 수 있습니다. 접속할 커넥션에 할당된 Port 를 클릭하면, 해당 커넥션의 Proxy Credentials 정보를 확인할 수 있습니다.

Agent > DB Connection Information

2. 위의 접속 정보를 3rd Party 클라이언트에 입력하면 DB 커넥션 접속이 가능합니다.

3rd Party Client를 이용한 DB 커넥션 접속

에이전트를 통한 서버 접속

로그인이 정상적으로 완료되면 Agent 앱 내 Server 탭에서 권한 있는 서버를 확인할 수 있습니다.

1. 서버 역할 선택하기

사용자 프로필 영역 하단의 Role 버튼을 클릭하여 원하는 역할을 고르고 OK 버튼을 클릭하세요. Default 역할을 선택하는 경우, Workflow > Server Access Request 요청에 의해 할당받은 서버 권한을 사용합니다.

Agent > Server > Select a Role

역할이 두 개 이상이라면, Agent 로그인 후 Server 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다.

2. Agent로 서버 접속하기

접속할 서버를 우클릭 후 Open Connection with 메뉴를 선택하여, 사용하려는 터미널 툴을 선택합니다.

Agent > Server > Open Connection with

이후 해당 서버에 접속 가능한 계정이 여러 개라면, Account 선택창이 열립니다. 사용하려는 계정을 선택하고, 필요 시 비밀번호를 입력한 뒤, OK 버튼을 클릭하여 세션을 엽니다.

Agent > Server > Open New Session

3. Seamless SSH 설정하기

Seamless SSH란 기존 터미널 사용성을 그대로 유지하면서 QueryPie를 통해 서버에 접속할 수 있는 기능입니다. 다음의 방법으로 .ssh 폴더에 config 파일을 생성하여 손쉽게 seamless SSH 설정이 가능합니다.

3.1. 터미널을 열고, .ssh 폴더로 이동합니다.

wide760

3.2. .ssh 폴더에서 config 파일을 생성하기 위해 vi 에디터를 엽니다.

wide760

3.3. 아래의 내용을 입력 후, Esc:wq 를 입력하여 변경사항을 저장하고, vi 에디터를 종료합니다.

wide760

config 파일 작성 시 Seamless SSH 설정하고자 하는 서버마다 서버 이름, URL, 포트를 입력함으로써 서버를 특정합니다. 서버 간에 URL, 포트가 겹치지 않는 경우 아래와 같이 입력하여도 접속이 가능합니다.

3.4. 이상으로 설정이 완료됩니다.

Agent > Server 탭에서 역할을 선택하면 기존 ssh 명령어로 서버에 접속할 수 있습니다.

wide760

에이전트를 통한 쿠버네티스 접속

권한을 부여 받은 사용자는 에이전트 실행 시 현재 정책에 따른 kubeconfig 파일이 자동으로 수신됩니다. 이를 통해 Kubernetes Client (kubectl, lens, k9s 등) 툴로 Kubernetes API 리소스에 접근할 수 있습니다.

에이전트에서는 접근 가능한 클러스트 리스트를 표시하며, 각 클러스터에 적용된 정책을 확인할 수 있습니다. 또한 설정 메뉴를 통해 kubeconfig 파일의 위치를 확인하고, 파일의 경로를 변경할 수 있습니다.

1. Kubernetes 역할 선택하기

사용자 프로필 영역 하단의 Role 버튼을 클릭하면 역할 선택 모달이 열립니다. 원하는 역할을 고르고 OK 버튼을 클릭하세요.

Agent > Kubernetes > Select a Role

역할이 두 개 이상이라면, Agent 로그인 후 Kubernetes 기능 사용을 위해 역할 선택을 먼저 완료해야 합니다.

2. Policy 조회하기

선택된 역할에 따라 접근 가능한 리소스가 표시됩니다. 각 클러스터 우측의 🔍 버튼을 누르면 Policy Information 팝업창이 나타나며 이곳에서 해당 클러스터에 적용된 정책 목록을 자세히 확인할 수 있습니다.

Agent > Policy Information

3. Kubeconfig 경로 설정하기

Agent 설정 메뉴에서 KubeConfig Path 버튼을 클릭하여 Kubeconfig 경로 설정 모달을 엽니다.

Agent > Settings > Configure Kubeconfig Path

  • Path Configuration : Kubeconfig 파일 저장 경로를 사용자가 지정할 수 있습니다.

    • 기본값은 $HOME/.kube/querypie-kubeconfig 입니다.

    • 경로 필드 우측 Upload 버튼을 누르면 로컬 파일 경로를 지정할 수 있는 팝업이 나타납니다.

경로 지정 팝업

  • Where : 우측의 🔽 버튼을 클릭하여 원하는 폴더를 지정합니다.

  • Save As : Kubeconfig 파일의 이름을 입력합니다. 변경하지 않으면 기본값으로 적용됩니다.

  • Command Line : KUBECONFIG 환경 변수를 선언하기 위한 커맨드 라인을 제공합니다.

1) KUBECONFIG 환경 변수를 최초 설정하는 경우, 명령 줄 내의 디폴트 "${KUBECONFIG}" 값을 사용 전에 "${HOME}/.kube/config"로 변경해야 합니다.

wide760

2) QueryPie에서 제공된 사용자 지정 kubeconfig 경로를 변경한 경우 새 경로로 환경 변수를 다시 선언해야 합니다.

wide760"]]>

3) 보다 자세한 kubeconfig에 대한 내용은 다음 링크를 참조해주시기 바랍니다.

4) Copy 로 커맨드라인을 복사하여 클라이언트에 선언하고 컨텍스트를 접근 가능한 클러스터로 스위칭할 수 있습니다

wide760

QueryPie Agent 세팅 초기화하기

세팅을 초기화하면 입력하였던 QueryPie Host 정보가 초기화되어 다시 입력할 수 있게 됩니다.

Agent 내 설정 메뉴에서 초기화

프로필 영역 우측 ⚙️ 버튼을 클릭하여 설정 메뉴를 엽니다. Reset All Settings 버튼을 클릭합니다.

Agent > Settings

(Mac) 메뉴 막대 내 앱 메뉴에서 초기화

메뉴 막대에서 QueryPie Agent 아이콘을 클릭하여 앱 메뉴를 엽니다. Reset All Settings 버튼을 클릭합니다.

Agent > App menu

\ No newline at end of file diff --git a/confluence-mdx/tests/reverse-sync/544380354/improved.mdx b/confluence-mdx/tests/reverse-sync/544380354/improved.mdx new file mode 100644 index 000000000..ca9072d73 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544380354/improved.mdx @@ -0,0 +1,44 @@ +--- +title: 'Default Privilege 설정하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544380354/Default+Privilege' +--- + +import { Callout } from 'nextra/components' + +# Default Privilege 설정하기 + +### Overview + +단일 DB 커넥션에 다수의 Privilege 권한이 부여된 경우에 기본으로 접속하는 Default Privilege를 설정하는 기능입니다. + + +### Default Privilege 설정하기 + +

+QueryPie Web > Database Access Control > Databases > Privileges +
+QueryPie Web > Database Access Control > Databases > Privileges +
+
+ +1. 부여받은 권한이 1개일 경우, 웹, 프록시, SQL Request, Export Request, SQL Jobs 모두 해당 권한으로 접속하며 별도의 Default Privilege 설정을 하지 않습니다. +2. 부여받은 권한이 2개 이상인 경우, 사용자는 별도로 Default Privilege 설정을 해야 합니다. + +
+QueryPie Web > Database Access Control > Databases > Privileges > Default Privilege Setting +
+QueryPie Web > Database Access Control > Databases > Privileges > Default Privilege Setting +
+
+ +1. Privileges 우측에 `Edit` 버튼 또는 `> Go to Settings` 링크를 클릭합니다. +2. Privilege 항목에서 부여받은 권한 중 기본 값으로 사용할 Privilege를 선택합니다. +3. Save 버튼을 클릭하여 Default Privilege 설정을 완료합니다. + + + +* 부여받은 권한이 2개 이상이지만 Default Privilege 설정이 안 되어 있는 경우에는 가장 먼저 grant된 privilege가 default privilege가 됩니다. 에이전트 프록시, SQL Request, Export Request에서 접속 시 Default Privilege로 선택된 권한으로 DB에 접속합니다. +* Default Privilege 변경은 웹과 Multi-Agent에서 제공합니다. User Agent에서는 Default Privilege 변경 기능을 제공하지 않으므로, 접속할 Privilege를 변경하려면 웹페이지에서 변경해야 합니다. +* Default Privilege로 커넥션에 이미 접속되어 있는 상태에서 Default Privilege를 변경한 경우 또는 해당 권한을 회수한 경우, 기존 세션은 Disconnect 처리하고 새로운 Default 권한으로 새로 Connect 처리합니다. +* 부여받은 권한이 2개 이상인 경우 Default privilege 설정이 되어 있지 않고 privilege deactivation period 초과로 inactive 상태가 된 경우 agent를 통해 접속할 수 없습니다. Default privilege가 설정되어 있어도 상태가 privilege deactivation period 초과로 inactive 인 경우 접속할 수 없습니다. + diff --git a/confluence-mdx/tests/reverse-sync/544380354/mapping.yaml b/confluence-mdx/tests/reverse-sync/544380354/mapping.yaml new file mode 100644 index 000000000..3adfbacd6 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544380354/mapping.yaml @@ -0,0 +1,58 @@ +lost_info: + images: + - raw:

QueryPie + Web > Database Access Control > Databases > Privileges

+ src: /user-manual/database-access-control/setting-default-privilege/image-20240731-124310.png + - raw:

QueryPie + Web > Database Access Control > Databases > Privileges > Default + Privilege Setting

+ src: /user-manual/database-access-control/setting-default-privilege/image-20240731-124808.png +mappings: +- mdx_blocks: + - 6 + xhtml_type: heading + xhtml_xpath: h2[1] +- mdx_blocks: + - 8 + xhtml_type: paragraph + xhtml_xpath: p[1] +- mdx_blocks: + - 9 + xhtml_type: paragraph + xhtml_xpath: p[2] +- mdx_blocks: + - 11 + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: + - 13 + xhtml_type: html_block + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 15 + xhtml_type: list + xhtml_xpath: ol[1] +- mdx_blocks: + - 17 + xhtml_type: html_block + xhtml_xpath: ac:image[2] +- mdx_blocks: + - 19 + xhtml_type: list + xhtml_xpath: ol[2] +- mdx_blocks: + - 20 + xhtml_type: paragraph + xhtml_xpath: p[3] +- mdx_blocks: [] + xhtml_type: html_block + xhtml_xpath: macro-note[1] +mdx_file: page.mdx +source_page_id: '544380354' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544380354/original.mdx b/confluence-mdx/tests/reverse-sync/544380354/original.mdx new file mode 100644 index 000000000..056192787 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544380354/original.mdx @@ -0,0 +1,44 @@ +--- +title: 'Default Privilege 설정하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544380354/Default+Privilege' +--- + +import { Callout } from 'nextra/components' + +# Default Privilege 설정하기 + +### Overview + +단일 DB 커넥션에 다수의 Privilege 권한이 부여된 경우에 기본으로 접속하는 Default Privilege를 설정하는 기능입니다. + + +### Default Privilege 설정하기 + +
+QueryPie Web > Database Access Control > Databases > Privileges +
+QueryPie Web > Database Access Control > Databases > Privileges +
+
+ +1. 부여받은 권한이 1개일 경우, 웹, 프록시, SQL Request, Export Request, SQL Jobs 모두 해당 권한으로 접속하며 별도의 Default Privilege 설정을 하지 않습니다. +2. 부여받은 권한이 2개 이상인 경우, 사용자는 별도로 Default Privilege 설정을 해야 합니다. + +
+QueryPie Web > Database Access Control > Databases > Privileges > Default Privilege Setting +
+QueryPie Web > Database Access Control > Databases > Privileges > Default Privilege Setting +
+
+ +1. Privileges 우측에 `Edit` 버튼 또는 `> Go to Settings` 링크를 클릭합니다. +2. Privilege 항목에서 부여받은 권한 중 기본 값으로 사용할 Privilege를 선택합니다. +3. Save 버튼을 클릭하여 Default Privilege 설정을 완료합니다. + + + +* 부여받은 권한이 2개 이상이지만 Default Privilege 설정이 안 되어 있는 경우에는 가장 먼저 grant된 privilege가 default privilege가 됩니다. 에이전트 프록시, SQL Request, Export Request에서 접속 시 Default Privilege로 선택된 권한으로 DB에 접속합니다. +* Default Privilege 변경은 웹과 Multi-Agent에서 제공합니다. User Agent에서는 Default Privilege 변경 기능은 제공하지 않으며, 사용자는 접속할 Privilege를 변경하고자 하는 경우 웹페이지에서 변경하여야 합니다. +* Default Privilege로 커넥션에 이미 접속되어 있는 상태에서 Default Privilege를 변경한 경우 또는 해당 권한을 회수한 경우, 기존 세션은 Disconnect 처리하고 새로운 Default 권한으로 새로 Connect 처리합니다. +* 부여받은 권한이 2개 이상인 경우 Default privilege 설정이 되어 있지 않고 privilege deactivation period 초과로 inactive 상태가 된 경우 agent를 통해 접속할 수 없습니다. Default privilege가 설정되어 있어도 상태가 privilege deactivation period 초과로 inactive 인 경우 접속할 수 없습니다. + diff --git a/confluence-mdx/tests/reverse-sync/544380354/page.xhtml b/confluence-mdx/tests/reverse-sync/544380354/page.xhtml new file mode 100644 index 000000000..7d9270802 --- /dev/null +++ b/confluence-mdx/tests/reverse-sync/544380354/page.xhtml @@ -0,0 +1 @@ +

Overview

단일 DB 커넥션에 다수의 Privilege 권한이 부여된 경우에 기본으로 접속하는 Default Privilege를 설정하는 기능입니다.

Default Privilege 설정하기

QueryPie Web > Database Access Control > Databases > Privileges

  1. 부여받은 권한이 1개일 경우, 웹, 프록시, SQL Request, Export Request, SQL Jobs 모두 해당 권한으로 접속하며 별도의 Default Privilege 설정을 하지 않습니다.

  2. 부여받은 권한이 2개 이상인 경우, 사용자는 별도로 Default Privilege 설정을 해야 합니다.

QueryPie Web > Database Access Control > Databases > Privileges > Default Privilege Setting

  1. Privileges 우측에 Edit 버튼 또는 > Go to Settings 링크를 클릭합니다.

  2. Privilege 항목에서 부여받은 권한 중 기본 값으로 사용할 Privilege를 선택합니다.

  3. Save 버튼을 클릭하여 Default Privilege 설정을 완료합니다.

  • 부여받은 권한이 2개 이상이지만 Default Privilege 설정이 안 되어 있는 경우에는 가장 먼저 grant된 privilege가 default privilege가 됩니다. 에이전트 프록시, SQL Request, Export Request에서 접속 시 Default Privilege로 선택된 권한으로 DB에 접속합니다.

  • Default Privilege 변경은 웹과 Multi-Agent에서 제공합니다. User Agent에서는 Default Privilege 변경 기능은 제공하지 않으며, 사용자는 접속할 Privilege를 변경하고자 하는 경우 웹페이지에서 변경하여야 합니다.

  • Default Privilege로 커넥션에 이미 접속되어 있는 상태에서 Default Privilege를 변경한 경우 또는 해당 권한을 회수한 경우, 기존 세션은 Disconnect 처리하고 새로운 Default 권한으로 새로 Connect 처리합니다.

  • 부여받은 권한이 2개 이상인 경우 Default privilege 설정이 되어 있지 않고 privilege deactivation period 초과로 inactive 상태가 된 경우 agent를 통해 접속할 수 없습니다. Default privilege가 설정되어 있어도 상태가 privilege deactivation period 초과로 inactive 인 경우 접속할 수 없습니다.

\ No newline at end of file From d94109a115dd12c0894b5a3a64f29f9def133809 Mon Sep 17 00:00:00 2001 From: JK Date: Fri, 27 Feb 2026 01:30:59 +0900 Subject: [PATCH 2/2] =?UTF-8?q?confluence-mdx:=20callout=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=20reverse=20sync=20=ED=8C=A8=EC=B9=98=202=EA=B1=B4?= =?UTF-8?q?=EC=9D=84=20=EC=88=98=EC=A0=95=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - patch_builder: callout 블록이 child 매핑에 direct 전략으로 해석될 때 _convert_callout_inner가
  • 구조를 생성하지 못하는 문제를 containing 전략으로 전환하여 수정합니다. - xhtml_patcher: _apply_text_changes에서 텍스트 노드가 old_text 전체를 커버하지 않을 때 effective_end +1이 비텍스트 영역(ac:plain-text-body)에 침범하여 잘못된 문자가 포함되는 문제를 수정합니다. Co-Authored-By: Claude Opus 4.6 --- confluence-mdx/bin/reverse_sync/patch_builder.py | 4 ++++ confluence-mdx/bin/reverse_sync/xhtml_patcher.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/confluence-mdx/bin/reverse_sync/patch_builder.py b/confluence-mdx/bin/reverse_sync/patch_builder.py index 6c657252a..9cc32a859 100644 --- a/confluence-mdx/bin/reverse_sync/patch_builder.py +++ b/confluence-mdx/bin/reverse_sync/patch_builder.py @@ -110,6 +110,10 @@ def _resolve_mapping_for_change( if mapping is not None and mapping.children: child = _resolve_child_mapping(old_plain, mapping, id_to_mapping) if child is not None: + # callout 블록은 direct 전략 시 _convert_callout_inner가 + #

  • 구조를 생성할 수 없으므로 containing 전략 사용 + if change.old_block.type == 'callout': + return ('containing', mapping) return ('direct', child) # 블록 텍스트가 parent에 포함되는지 확인 _old_ns = strip_for_compare(old_plain) diff --git a/confluence-mdx/bin/reverse_sync/xhtml_patcher.py b/confluence-mdx/bin/reverse_sync/xhtml_patcher.py index 18e2eb22c..afff75289 100644 --- a/confluence-mdx/bin/reverse_sync/xhtml_patcher.py +++ b/confluence-mdx/bin/reverse_sync/xhtml_patcher.py @@ -333,7 +333,12 @@ def _apply_text_changes(element: Tag, old_text: str, new_text: str): # _map_text_range는 half-open [start, end)를 사용하므로, # 마지막 non-empty 노드에서는 end를 확장하여 trailing insert를 포함한다. - effective_end = node_end + 1 if i == last_nonempty_idx else node_end + # 단, 텍스트 노드가 old_text 전체를 커버하지 않는 경우(예: callout 내부 + # 코드 블록이 ac:plain-text-body로 제외된 경우) +1이 비텍스트 영역에 + # 침범하여 잘못된 문자가 포함되는 것을 방지한다. + effective_end = (node_end + 1 + if i == last_nonempty_idx and node_end >= len(old_stripped) + else node_end) # 블록 경계에서는 include_insert_at_end/exclude_insert_at_start로 # insert를 올바른 노드에 할당한다. include_at_end = i in claim_end_set and i != last_nonempty_idx