Skip to content
Guides7 min read

자체 호스팅 주석 도구: 각 도구의 실행 요건과 호스팅 위치

Label Studio, CVAT, doccano, Argilla, INCEpTION, Potato를 자체 호스팅 설치의 서비스, 데이터베이스, 로그인, 백업 측면에서 비교하고, 호스트를 비용별로 정리합니다.

Potato Team

자체 호스팅 주석 도구가 실행되는 서버에 필요한 것은 네 가지입니다. 재시작해도 남는 디스크, 해당 도구의 문서가 프로덕션용으로 권장하는 데이터베이스, 주석자가 로그인할 방법, 그리고 적어도 한 번은 복원해 본 백업입니다. 오픈 소스 도구들은 함께 딸려 오는 서비스 수에서 가장 크게 다르며, 그 수는 컨테이너 하나부터 열여덟 개까지입니다. 연구가 떠안는 호스팅 작업의 대부분은 이 수에 따라 정해집니다.

여기서 자체 호스팅이란 연구실 서버, 대학 클라우드 할당, 임대한 VM 등 직접 관리하는 컴퓨터에서 주석 도구를 실행해 데이터가 공급업체의 서비스를 거치지 않게 하는 것을 말합니다. 윤리 위원회, 데이터 사용 협약, 병원이 데이터 반출을 허락하지 않을 때 흔히 자체 호스팅을 택합니다. 아래 비교는 2026년 10월 기준 각 프로젝트의 문서에 따라 오픈 소스 도구 여섯 개의 자체 호스팅 설치에 무엇이 필요한지 다루고, 이어서 호스트를 비용과 재시작 후에도 유지되는 것을 기준으로 비교합니다.

자체 호스팅 설치의 요건

아래의 모든 도구는 세 종류의 상태를 저장합니다. 주석을 달 항목(예: 텍스트, 이미지, 미디어), 주석, 그리고 이 둘을 묶는 계정과 프로젝트입니다. 자체 호스팅 설치는 이 세 가지를 모두 재시작해도 남는 디스크에 보관하고, 다른 곳에 백업하며, 그 앞에 로그인을 두어야 합니다. 도구의 아키텍처에 따라 두 가지 선택이 더 따라옵니다. SQLite를 기본으로 제공하는 도구는 대개 프로덕션용으로 데이터베이스 서버를 권장하고, 큐, 캐시, 검색 엔진을 함께 제공하는 도구는 그 각각도 실행하고 영속화해야 합니다. 호스팅 작업의 대부분은 이런 추가 서비스에서 나옵니다. 서비스 하나하나가 건강하게 유지해야 할 컨테이너이자 백업해야 할 볼륨이며, 업그레이드할 때마다 그 버전이 나머지와 호환되어야 합니다.

도구 여섯 개 비교

표는 각 프로젝트의 문서가 자체 호스팅 프로덕션 설치에 관해 말하는 내용을 요약합니다. "서비스"는 프로젝트의 참조 Docker Compose 파일에 있는 컨테이너 수입니다.

도구지원하는 형태서비스데이터베이스무료 에디션의 SSO서버 백업 가이드
Label Studiopip, Docker, Compose, Helm3기본은 SQLite, 대규모에서는 PostgreSQL 권장SAML SSO와 LDAP는 Enterprise 전용Enterprise 문서에만 있음
CVATCompose, Helm18PostgreSQLCommunity용으로 LDAP 문서화, OIDC와 SAML SSO는 Enterprise있음
doccanopip, Docker, Compose6기본은 SQLite, 프로덕션 Compose에서는 PostgreSQLGitHub 및 Okta OAuth찾지 못함
ArgillaHugging Face Spaces, Compose5기본은 SQLite, PostgreSQL 지원, Elasticsearch 또는 OpenSearch 추가OAuth2와 Keycloak데이터셋 내보내기만
INCEpTIONJAR, Docker, Compose2내장 HSQLDB, 프로덕션에는 MariaDB 권장SAML2와 OIDC있음
Potatopip, Docker, potato deploy1파일과 SQLite, MySQL 선택OAuth 및 OIDC 공급자HF 또는 S3로 백업하는 기능 내장

**Label Studio**는 컨테이너 하나로, 또는 nginx, 앱, PostgreSQL로 이루어진 Compose 스택으로 실행됩니다. 기본으로 SQLite를 쓰며, 스토리지 가이드는 작업이 100,000개를 넘고 동시 사용자가 5명 이상이면 PostgreSQL을 고려하라고 합니다. 설치 가이드는 RAM을 최소 8 GB, 권장 16 GB로 요구하며, 프로덕션에는 디스크 50 GB를 권장합니다. 에디션 비교에는 SAML SSO, LDAP, 역할 기반 접근 제어, 활동 로그가 유료 기능으로 나와 있으며, Community 에디션에서는 모든 사용자가 모든 프로젝트를 볼 수 있습니다.

**CVAT**는 Docker Compose 또는 Kubernetes에서 실행됩니다. 참조 Compose 파일에는 서비스 18개가 정의되어 있으며, 그중에는 PostgreSQL, Redis, 캐싱용 kvrocks, 백그라운드 워커 여덟 개, Traefik, 권한 부여를 위한 Open Policy Agent 서비스, ClickHouse와 Grafana로 이루어진 분석 스택이 있습니다. CVAT는 백업을 단계별로 문서화합니다. 가이드는 컨테이너를 멈추고 데이터베이스, 미디어, 분석 볼륨을 보관 파일로 묶으며, 복원하려면 CVAT 버전이 정확히 같아야 한다고 경고합니다. LDAP는 Community 에디션용으로 문서화되어 있고, OIDC와 SAML 싱글 사인온은 Enterprise로 표시되어 있습니다.

**doccano**는 SQLite를 쓰는 컨테이너 하나로 시작하며, 프로덕션 Compose 파일은 Celery, RabbitMQ, nginx, PostgreSQL을 추가합니다. 설치 가이드는 패키지를 업그레이드하면 SQLite 데이터베이스가 사라진다고 경고합니다. GitHub와 Okta 로그인을 문서화하고 있습니다. 2026년 10월 기준 PyPI의 최신 릴리스는 2023년 7월의 1.8.4이며, 2026년 1월 GitHub에 게시된 1.8.5는 PyPI에서 철회(yank)되었습니다.

**Argilla**는 Hugging Face Spaces 또는 Docker Compose로 배포하며, Compose에서는 서버, 워커, PostgreSQL, Elasticsearch, Redis가 함께 실행됩니다. Elasticsearch 8.5 또는 OpenSearch 2.4가 필요하며, 배포 가이드는 배포 문제의 대부분이 Elasticsearch와 관련된다고 적고 있습니다. 영구 스토리지가 없는 무료 Space에서는 재시작하면 데이터셋, 워크스페이스, 사용자가 사라집니다. 가장 최근 릴리스는 2025년 3월에 나왔습니다.

**INCEpTION**은 Java 애플리케이션 또는 컨테이너로 실행되며, 내장 HSQLDB는 컴퓨터가 비정상 종료되면 손상될 수 있으므로 프로덕션 데이터베이스로 MariaDB를 권장합니다. 주석과 텍스트는 홈 폴더 아래의 파일에 저장되며, 관리자 가이드는 시스템 수준의 백업과 복원을 빠짐없이 다룹니다. 백업 절은 "성공적으로 복원할 수 없는 백업은 쓸모가 없다"는 경고로 시작합니다.

**Potato**는 pip로 설치하든 Docker 이미지 하나로 실행하든 프로세스 하나로 돌아갑니다. 각 주석자의 작업은 출력 디렉터리 아래의 파일에 저장되고, 프로젝트 데이터는 그 옆의 SQLite에 저장되며, MySQL은 필수가 아니라 선택입니다. 프로세스가 항목 풀과 할당 큐를 메모리에 두므로 gunicorn 워커 하나에 스레드를 늘려 실행하며, 서버를 추가하는 대신 더 큰 컴퓨터로 옮겨 규모를 키웁니다. Google, GitHub, Hugging Face 또는 모든 OIDC 공급자를 통한 로그인이 오픈 소스 패키지에 포함되어 있으며, authentication.providers 아래에서 설정합니다.

각 도구의 서비스 수는 그 도구가 맡는 일을 반영합니다. CVAT의 서비스 열여덟 개에는 가져오기, 내보내기, 청킹, 품질 보고서를 위한 별도 워커와 분석 스택, 정책 기반 권한 부여가 들어 있으며, 오래 운영되는 설치를 쓰는 대규모 팀이라면 이를 활용할 수 있습니다. Argilla는 데이터셋을 위해 검색 엔진을 요구합니다. Potato는 컨테이너 하나로 유지되며, 이는 한 연구실이 설치해서 몇 주 동안 운영하고 철거하는 연구에 맞습니다.

비용과 디스크 영속성으로 본 호스트

이 도구들은 모두 Docker가 있는 VM에서 실행되며, 가장 중요한 선택은 호스트의 디스크가 재시작 후에도 남는지 여부입니다. 아래 비용은 Potato 2.10이 potato deploy 대상의 기본 크기에 대해 출력하는 추정치이며, 같은 컴퓨터에서 다른 도구도 같은 가격으로 실행할 수 있습니다. 단, 각 도구의 메모리 요건을 충족해야 합니다.

호스트월 비용재시작 후 디스크 유지
AWS Lightsail, 2 GB$12예
Hetzner Cloud, 2 vCPU 및 4 GB약 €6예
1 GB 볼륨을 붙인 Fly.io Machine약 $6예
ACCESS 할당이 있는 Jetstream2무료예
Render 웹 서비스무료, 또는 $7에 디스크 비용 추가유료 디스크에서만
Heroku Basic dyno$7아니요
Hugging Face Docker SpacePRO 또는 Team 요금제아니요

Jetstream2는 NSF가 지원하는 연구용 클라우드이므로, ACCESS 할당을 받은 미국 연구자는 비용을 내지 않으며, 각 인스턴스에는 일반 인증서가 붙은 DNS 이름이 주어집니다. Lightsail의 정액 요금에는 IPv4 주소와 60 GB 디스크가 포함되며, lightsail:*와 sts:GetCallerIdentity만 있으면 되므로 권한이 제한된 대학 IAM 역할에 잘 맞습니다. 2 GB Lightsail 인스턴스에는 Potato가 들어가지만, Label Studio가 밝힌 최소 8 GB에는 더 큰 요금제가 필요합니다.

디스크를 지우는 호스트에서의 백업

Heroku는 매일 디스크를 지우고, Render의 무료 등급과 Hugging Face Spaces는 재시작하면 디스크를 잃습니다. 이런 호스트에서 진행하는 연구에는 복원까지 되는 백업이 필요합니다. 그렇지 않으면 다시 돌아온 주석자는 빈 작업을 보게 됩니다.

버전 2.10부터 Potato의 backup 블록은 주석 출력과 프로젝트 데이터베이스의 스냅숏을 기본 5분마다 Hugging Face 데이터셋이나 S3 호환 버킷에 복사하고, 서버가 빈 디스크로 시작하면 이를 복원합니다. 복원은 주석과 함께 계정도 되살리므로 주석자는 같은 비밀번호로 로그인해 멈춘 곳에서 이어서 작업하며, 이미 디스크에 있는 주석은 절대 덮어쓰지 않습니다. 서버 환경에 HF_TOKEN을 설정하고 hosting extra를 설치한 뒤, 설정에 다음 블록을 추가하세요.

yaml
backup:
  schedule_minutes: 5
  restore_on_boot: true
  sinks:
    - type: huggingface
      repo_id: lab/pilot-annotations

potato deploy up은 --backup hf 또는 --backup s3로 같은 백업을 추가하며, --demo로 주석을 버려도 된다고 선언하지 않는 한 백업 없이는 Heroku나 Hugging Face Space에 배포하지 않습니다. Render, Railway, Fly, ECS Express는 어떤 경우에도 백업을 요구합니다. 프로젝트가 백업의 스토리지를 통해 이 호스트들에 전달되기 때문입니다. 디스크가 유지되는 호스트에서도 백업은 서버 밖에 두 번째 사본을 보관하므로, 재시작뿐 아니라 인스턴스가 삭제되는 경우에도 대비가 됩니다.

어떤 도구를 쓰든 연구를 시작하기 전에 복원을 시험하세요. 백업으로 새 인스턴스를 시작하고, 주석자로 로그인해서, 마지막으로 단 주석이 있는지 확인하세요. Potato에서는 potato deploy pull이 배포에서 수집한 모든 것을 자신의 컴퓨터로 복사하며, potato deploy destroy는 한 번도 pull하지 않은 배포는 삭제하지 않으므로 연구가 끝나면 pull을 먼저 실행하세요. 호스트별 명령은 Potato를 로컬 또는 클라우드에서 실행하기에 있습니다.

더 읽어보기