> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/ko/maintenance/data-and-backups.md).

# 데이터 및 백업

때때로 Overleaf를 발전시키면서 데이터베이스의 데이터 스키마를 변경해야 하며, 이 과정을 자동화하기 위해 마이그레이션 스크립트를 사용합니다. 이들은 실행되었을 것입니다 [overleaf.com](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit) 먼저, 이는 세계에서 가장 큰 Overleaf 인스턴스이므로 대부분의 경우는 이미 겪었을 것입니다. 그러나 귀하의 데이터에 대해서는 어떠한 보증도 하지 않습니다. 반드시 **일관된** 데이터 백업 **이전** 인스턴스를 업그레이드할 때.

{% hint style="info" %}
새 Docker 이미지로 업그레이드할 때, 이미 **하지** 아직 실행되지 않은 마이그레이션은 자동으로 실행됩니다. 데이터셋의 크기에 따라 시간이 걸릴 수 있으며, 로그를 따라가면 진행 상황을 확인할 수 있습니다. 자세한 내용은 우리의 [로깅](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging) 문서를 참조하세요.
{% endhint %}

### 데이터 저장

Overleaf Community Edition과 Server Pro는 데이터를 세 곳에 분리하여 저장합니다:

* **MongoDB 데이터베이스:** 사용자 및 프로젝트 데이터가 저장되는 곳입니다.
* **Redis:** 진행 중인 데이터에 대한 고성능 캐시로 작동하며, 주로 프로젝트 편집과 협업과 관련된 정보를 저장합니다.
* **Overleaf 파일 시스템:** 편집할 수 없는 프로젝트 파일(이미지 포함)을 저장하며, 프로젝트 컴파일 중 임시 디스크 캐시로도 작동합니다.

{% hint style="info" %}
다음일 수 있습니다 `~/sharelatex_data` 또는 `~/overleaf_data`인스턴스가 언제 설정되었는지에 따라 달라집니다.
{% endhint %}

{% hint style="success" %}
프로젝트 파일과 전체 프로젝트 기록 데이터의 경우 S3 호환 저장 백엔드도 지원합니다.
{% endhint %}

디스크상의 폴더 레이아웃에 대한 자세한 내용은 폴더 상세 정보를 참조하세요.

### 일관된 백업 수행

일관된 백업을 수행할 때 포함해야 하는 저장소는 세 곳입니다:

* MongoDB
* Redis
* Overleaf 파일 시스템 데이터

일관된 백업을 생성하려면 **필수입니다** 백업 프로세스가 실행되는 동안 사용자가 새 데이터를 생성하지 못하도록 해야 합니다. 따라서 사용자가 인스턴스에 접근하거나 프로젝트를 편집할 수 없는 유지보수 시간을 예약할 것을 권장합니다.

백업 프로세스를 시작하기 전에 인스턴스를 오프라인으로 전환해야 합니다. Server Pro부터는 `3.5.0` 종료 프로세스가 사이트 종료와 사용자 연결 해제를 자동화합니다.

인스턴스를 종료하려면 다음을 실행해야 합니다 `bin/docker-compose stop sharelatex` Toolkit 배포를 사용 중이라면 또는 `docker compose stop sharelatex` Docker Compose를 사용 중이라면.

일단 `sharelatex` 컨테이너가 중지되면 백업 프로세스를 시작할 수 있습니다.

백업 프로세스가 완료되면 **성공적으로** 다음 항목을 시작해야 합니다 `sharelatex` 컨테이너입니다. 이를 위해 다음을 실행하세요 `bin/docker-compose start sharelatex` Toolkit 배포를 사용 중이라면 또는 `docker compose start sharelatex` Docker Compose를 사용 중이라면.

{% hint style="danger" %}

* 백업은 Overleaf 인스턴스가 실행 중인 서버와는 별도의 서버에, 이상적으로는 완전히 다른 위치에 저장해야 합니다.
* 데이터베이스를 여러 MongoDB 인스턴스에 복제하면 어느 정도 이중화를 제공할 수 있지만, 손상으로부터는 보호하지 못합니다.
* 백업을 테스트하는 것이 완전하고 정상적으로 작동하는지 확인하는 가장 좋은 방법입니다.
  {% endhint %}

### MongoDB

MongoDB에는 다음과 같은 명령줄 도구가 함께 제공됩니다 [mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/) 이를 사용하여 데이터베이스에 저장된 사용자 및 프로젝트 데이터의 백업을 만들 수 있습니다.

### Overleaf 파일 시스템 데이터

Toolkit 배포의 경우, 편집할 수 없는 파일이 저장되는 경로는 다음에 지정됩니다 `config/overleaf.rc` 다음을 사용하여 `OVERLEAF_DATA_PATH` 환경 변수이지만, 인스턴스가 언제 생성되었는지에 따라 다음일 수 있습니다 `data/sharelatex`.

다음과 같은 도구를 사용하여 **rsync** 이 디렉터리를 재귀적으로 복사해야 완전한 백업이 생성됩니다.

### Redis

Redis는 사용자 세션과 보류 중인 문서 업데이트를 MongoDB에 반영되기 전에 저장합니다.

Append Only File(AOF) 지속성은 Redis 지속성에 권장되는 구성입니다.

Toolkit 사용자는 기본적으로 AOF 지속성이 다음에 대해 활성화되어 있습니다 **새** 설치본에 대해, 기존 사용자는 AOF 활성화에 대한 자세한 정보를 찾을 수 있습니다 [여기](/on-premises/ko/configuration/overleaf-toolkit/redis.md#enabling-append-only-file-persistence).

AOF 지속성과 함께 RDB 스냅샷 사용을 계속하기로 결정했다면, RDB 파일을 안전한 위치에 복사하여 백업으로 사용할 수 있습니다.

### 서버 간 데이터 마이그레이션

최소한 새 인스턴스에는 아직 중요한 데이터가 없습니다. 우리는 인스턴스의 데이터를 병합하는 프로세스를 제공하지 않습니다.

새 인스턴스에 아직 데이터가 없다고 가정하면, 따를 수 있는 몇 가지 단계는 다음과 같습니다. 큰 틀에서 보면, 우리는 다음의 tar 파일을 만듭니다 `mongo`, `redis` 및 `Overleaf` 볼륨을 새 서버로 복사한 다음, 그곳에서 다시 압축을 풉니다.

#### Toolkit

```bash
# 이전 인스턴스를 정상적으로 종료
old-server$ bin/stop

# tar 파일 만들기
old-server$ tar --create --file backup-old-server.tar config/ data/

# backup-old-server.tar 파일을 old-server에서
# 적절한 방법으로 new-server로 복사

# 새 인스턴스를 정상적으로 종료(아직 시작했다면)
new-server$ bin/stop

# 새 데이터를 옮깁니다. 삭제해도 됩니다
new-server$ mkdir backup-new-server
new-server$ mv config/ data/ backup-new-server/

# config/data 디렉터리를 다시 채우기
new-server$ tar --extract --file backup-old-server.tar

# 컨테이너 시작
new-server$ bin/up
```

#### Docker Compose

```bash
# 이전 인스턴스를 정상적으로 종료
old-server$ docker stop sharelatex
old-server$ docker stop mongo redis

# tar 파일 만들기
old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data

# backup-old-server.tar 파일을 old-server에서
# 적절한 방법으로 new-server로 복사

# 새 인스턴스를 정상적으로 종료(아직 시작했다면)
new-server$ docker stop sharelatex
new-server$ docker stop mongo redis

# 새 데이터를 옮깁니다. 삭제해도 됩니다
new-server$ mkdir backup-new-server
new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/

# 데이터 디렉터리를 다시 채우기
new-server$ tar --extract --file backup-old-server.tar

# 컨테이너 시작
new-server$ docker start mongo redis
new-server$ docker start sharelatex
```

다음에 따라 **docker-compose.yml** 파일, 경로를 조정해야 할 수 있습니다 `mongo`, `redis`, `Overleaf` 볼륨의

{% hint style="info" %}
root 사용자(또는 sudo 사용)로 실행하면 tar가 파일 소유자/그룹 및 권한을 유지하며, 이는 백업을 복원할 때 매우 중요합니다.
{% endhint %}

### 폴더 상세

{% hint style="info" %}
다음 폴더에는 추가 힌트가 있습니다:

* (b) 백업에 포함, 일관성을 보장하려면 인스턴스가 중지된 상태가 가장 좋음
* (d) 삭제할 수 있음
* (e) 임시 파일, 인스턴스가 중지되면 삭제할 수 있음
  {% endhint %}

1. `~/mongo_data` (b)
   * MongoDB 데이터 디렉터리
2. `~/redis_data` (b)
   * Redis DB 데이터 디렉터리
3. `~/overleaf_data`
   1. bin
      1. synctex (d)
         * 최신 릴리스에서는 사용되지 않음. 이전에는 사용자 정의 synctex 바이너리를 사용했습니다(synctex는 .tex 파일과 PDF 사이의 소스 매핑에 사용됩니다)
   2. data
      1. 캐시 (e)
         * 컴파일을 위한 바이너리 파일 캐시
      2. 컴파일 (e)
         * LaTeX 컴파일이 이곳에서 이루어집니다
      3. db.sqlite (d)
         * 최신 릴리스에서는 사용되지 않음. 이전에는 clsi 캐시 세부 정보가 저장되었습니다(현재는 단순한 인메모리 맵으로 옮겨졌거나 디스크를 스캔합니다)
      4. db.sqlite-wal (d)
         * 최신 릴리스에서는 사용되지 않음. db.sqlite를 참조하세요
      5. 출력 (e)
         * 클라이언트에 제공할 LaTeX 컴파일 출력 저장소
      6. template\_files (b)
         * 템플릿 시스템의 이미지 미리보기(Server Pro 전용)
      7. user\_files (b)
         * 프로젝트의 바이너리 파일
      8. history (b)
         * 전체 프로젝트 기록 파일
   3. tmp
      1. dumpFolder (e)
         * zip 파일을 처리하는 과정에서 생성되는 임시 파일
      2. 업로드 (e)
         * 파일 업로드 버퍼링(바이너리 파일/zip에서 새 프로젝트 업로드)
      3. projectHistories (e)
         * 전체 프로젝트 기록 마이그레이션을 위한 임시 파일


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/ko/maintenance/data-and-backups.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
