> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Zotero 연동

> Kubernetes 배포에서 사용자가 Zotero 라이브러리에서 .bib 파일을 가져올 수 있도록 합니다.

Zotero 가져오기는 모든 Ayakaleaf Pro 파드의 **web** 서비스(`tpr-webmodule` 모듈)에서 실행됩니다. [Zotero 연동](https://ayakaleaf-pro.mintlify.site/ko/on-premises/configuration/overleaf-toolkit/integrations/zotero-integration.md)에 설명된 대로 콜백 URL `${OVERLEAF_SITE_URL}/user/zotero/oauth/callback`을 사용하여 Zotero OAuth 클라이언트를 등록한 다음, 아래와 같이 Kubernetes를 구성하세요.

| | |
| - | - |
| 서비스 | web, 모든 Ayakaleaf Pro 파드에 포함; web 시작 시 읽음 |
| 파드 → Zotero | 사용자가 Zotero를 연결하거나 파일을 가져오거나 새로 고칠 때 `https://www.zotero.org/oauth/*` 및 `https://api.zotero.org` |
| 브라우저 → Zotero | `https://www.zotero.org/oauth/authorize`로 이동한 뒤 콜백 URL로 돌아옴 |
| Zotero → Overleaf | 없음: 인스턴스가 인터넷에서 접근 가능할 필요가 없음 |
| 저장되는 데이터 | 암호화된 사용자의 Zotero 키, MongoDB에 저장 |
| 주기적 작업 | 없음: 사용자가 요청할 때만 파일이 새로 고쳐짐 |

### 구성

**1. ConfigMap**

```yaml title="30-config.yaml (changes)" theme={null}
  ENABLED_LINKED_FILE_TYPES: project_file,project_output_file,url,zotero
  ZOTERO_CLIENT_ID: <client key>
  # optional: send the module's requests to Zotero through an HTTP proxy
  # ZOTERO_PROXY_URL: http://proxy.example.com:3128
```

`ENABLED_LINKED_FILE_TYPES`는 설치 시의 값을 대체하므로, 기존 유형은 유지하고 `zotero`를 추가하세요(둘 다 사용한다면 `mendeley`도 추가).

**2. Secret**

```bash theme={null}
kubectl -n overleaf patch secret overleaf-secrets --type merge -p '{"stringData":{
  "ZOTERO_CLIENT_SECRET":"<client secret>",
  "ZOTERO_CIPHER_PASSWORD":"'"$(openssl rand -hex 32)"'"}}'
```

`ZOTERO_CIPHER_PASSWORD`는 MongoDB에 저장되는 사용자의 Zotero 키를 암호화합니다. 이 값이 없으면 각 파드는 자체 `/var/lib/overleaf/data`에 키 파일을 생성합니다. [여러 레플리카](https://ayakaleaf-pro.mintlify.site/ko/on-premises/configuration/kubernetes/horizontal-scaling.md)를 사용하는 경우 노드마다 키가 달라지며, 다른 레플리카가 처리하는 사용자는 연결된 Zotero 계정을 사용할 수 없습니다. 첫 사용자가 Zotero를 연결하기 전에 설정하세요. 나중에 변경하면 모든 사용자가 Zotero를 다시 연결해야 합니다.

**3. 적용 및 재시작**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
```

### 여러 레플리카

위에서 설명한 대로 Secret에 `ZOTERO_CIPHER_PASSWORD`를 설정하세요. 이 값이 없으면 한 레플리카에서 가져온 파일을 다른 레플리카에서 새로 고칠 수 없습니다. 해당 레플리카의 키 파일로는 사용자의 Zotero 키를 복호화할 수 없으므로 새로 고침이 "The remote service produced an error"와 함께 실패합니다. Secret에 비밀번호를 설정하면 모든 레플리카에서 동작합니다. 두 경우 모두 `overleaf-0`에서 가져오고 `overleaf-1`에서 새로 고치는 방식으로 테스트했습니다. OAuth 핸드셰이크는 상태를 Redis의 세션에 보관하므로 콜백은 어느 레플리카에 도달해도 됩니다.

### Kubernetes에서의 테스트

[www.zotero.org](http://www.zotero.org) 및 api.zotero.org의 모의 서버(`overleaf-certs`의 `NODE_EXTRA_CA_CERTS`를 통해 신뢰됨)를 대상으로, HAProxy 뒤에 레플리카 세 개를 둔 Kubernetes 1.37에서 Zotero에 대한 엔드 투 엔드 테스트가 통과했습니다(18개 케이스). 테스트 항목은 OAuth 1.0a를 통한 연결 및 연결 해제, 라이브러리와 그룹을 `.bib` 파일로 가져오기, 파일 새로 고침, Zotero에서 키 취소, 다시 연결 요청, 공동 작업자가 검색할 수 있는 참고문헌, 가져온 사용자만 새로 고칠 수 있는지 여부, API 오류, Zotero와의 느린 연결입니다.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.