⏱️ 예상 읽기 시간: 8분

소개

오늘날 디지털 시대에서 문서 서명과 처리는 기업과 개인 모두에게 필수적인 요소가 되었습니다. DocuSign과 같은 상용 솔루션이 인기를 끌고 있지만, 비용이 높고 조직이 필요로 하는 유연성을 제공하지 못할 수 있습니다. 이런 상황에서 DocuSeal이라는 오픈소스 대안이 등장했습니다. DocuSeal은 안전하고 효율적인 디지털 문서 서명 기능을 제공합니다.

DocuSeal은 PDF 양식을 생성하고, 서명을 수집하며, 문서 워크플로우를 관리할 수 있는 종합적인 플랫폼입니다. 이 모든 것을 데이터와 인프라에 대한 완전한 제어권을 유지하면서 수행할 수 있습니다. GitHub에서 10,000개 이상의 스타를 받은 DocuSeal은 비용 효율적인 문서 관리 솔루션을 찾는 조직들에게 신뢰할 만한 선택지임이 입증되었습니다.

DocuSeal이란?

DocuSeal은 다음과 같은 기능을 제공하는 오픈소스 문서 서명 플랫폼입니다:

  • PDF 양식 빌더: 대화형 PDF 양식을 만들 수 있는 WYSIWYG 편집기
  • 다양한 필드 타입: 서명, 날짜, 파일, 체크박스를 포함한 12가지 필드 타입 지원
  • 다중 제출자 지원: 여러 서명이 필요한 문서 처리
  • 자동 이메일 알림: 워크플로우 자동화를 위한 내장 SMTP 통합
  • 유연한 저장소: 로컬 디스크, AWS S3, Google Storage, Azure Cloud 지원
  • 모바일 최적화: 모든 기기에서 원활하게 작동하는 반응형 디자인
  • 다국어 지원: 6개 UI 언어와 14개 언어의 서명 지원
  • API 통합: 시스템 통합을 위한 RESTful API 및 웹훅

사전 요구사항

시작하기 전에 시스템에 다음이 설치되어 있는지 확인하세요:

  • Docker: 버전 20.10 이상
  • Docker Compose: 버전 2.0 이상 (선택사항이지만 권장)
  • 웹 브라우저: JavaScript가 활성화된 최신 브라우저
  • 이메일 서버: 이메일 알림용 SMTP 서버 (선택사항)

설치 방법

DocuSeal은 여러 배포 옵션을 제공합니다. 가장 간단하고 이식 가능한 Docker 기반 설치에 중점을 두겠습니다.

방법 1: 빠른 Docker 설정

DocuSeal을 실행하는 가장 빠른 방법은 단일 Docker 명령어를 사용하는 것입니다:

docker run --name docuseal -p 3000:3000 -v $(pwd)/docuseal-data:/data docuseal/docuseal

이 명령어는:

  • docuseal이라는 이름의 컨테이너를 생성합니다
  • 컨테이너의 3000번 포트를 로컬 머신에 매핑합니다
  • docuseal-data 디렉토리에 데이터를 지속적으로 저장하기 위한 볼륨을 생성합니다
  • 기본 데이터베이스로 SQLite를 사용합니다

방법 2: Docker Compose (권장)

프로덕션 환경이나 더 많은 제어가 필요한 경우 Docker Compose를 사용하세요:

# docker-compose.yml 파일 다운로드
curl https://raw.githubusercontent.com/docusealco/docuseal/master/docker-compose.yml > docker-compose.yml

# 애플리케이션 시작
docker compose up -d

자동 SSL을 사용한 커스텀 도메인 배포의 경우:

sudo HOST=your-domain-name.com docker compose up

방법 3: 데이터베이스 구성

프로덕션 사용을 위해서는 SQLite 대신 PostgreSQL이나 MySQL을 사용할 수 있습니다:

# PostgreSQL 예제
docker run --name docuseal \
  -p 3000:3000 \
  -v $(pwd)/docuseal-data:/data \
  -e DATABASE_URL="postgresql://username:password@host:5432/docuseal" \
  docuseal/docuseal

# MySQL 예제
docker run --name docuseal \
  -p 3000:3000 \
  -v $(pwd)/docuseal-data:/data \
  -e DATABASE_URL="mysql2://username:password@host:3306/docuseal" \
  docuseal/docuseal

초기 설정 및 구성

1. 첫 번째 접속

DocuSeal이 실행되면 웹 브라우저를 열고 다음 주소로 이동하세요:

http://localhost:3000

DocuSeal 설정 마법사가 나타납니다.

2. 관리자 계정 생성

다음 정보를 제공하여 관리자 계정을 생성하세요:

  • 전체 이름: 표시될 이름
  • 이메일 주소: 로그인 및 알림에 사용됩니다
  • 비밀번호: 강력한 비밀번호를 선택하세요
  • 조직 이름: 회사 또는 조직 이름

3. SMTP 구성 (선택사항)

이메일 알림을 활성화하려면 SMTP 설정을 구성하세요:

# SMTP용 환경 변수
SMTP_ADDRESS: smtp.gmail.com
SMTP_PORT: 587
SMTP_USERNAME: your-email@gmail.com
SMTP_PASSWORD: your-app-password
SMTP_DOMAIN: gmail.com
SMTP_AUTHENTICATION: plain
SMTP_ENABLE_STARTTLS_AUTO: true

첫 번째 문서 템플릿 만들기

1단계: PDF 문서 업로드

  1. 대시보드에서 “새 템플릿”을 클릭합니다
  2. PDF 문서를 업로드하거나 새로 만듭니다
  3. 템플릿에 설명적인 이름을 지정합니다
  4. 필요한 설명이나 지침을 추가합니다

2단계: 양식 필드 추가

DocuSeal은 필드 추가를 위한 드래그 앤 드롭 인터페이스를 제공합니다:

사용 가능한 필드 타입:

  • 서명: 디지털 서명 수집용
  • 이니셜: 이니셜 수집용
  • 텍스트: 한 줄 텍스트 입력
  • 날짜: 날짜 선택기 필드
  • 숫자: 유효성 검사가 포함된 숫자 입력
  • 선택: 드롭다운 선택
  • 체크박스: 불린 체크박스
  • 라디오: 다중 선택
  • 파일: 파일 업로드 기능
  • 이미지: 이미지 삽입
  • 전화: 형식이 지정된 전화번호
  • 이메일: 유효성 검사가 포함된 이메일 주소

필드 추가하기:

  1. 도구 모음에서 필드 타입을 선택합니다
  2. 클릭하고 드래그하여 문서에 필드를 배치합니다
  3. 필요에 따라 필드 크기를 조정합니다
  4. 필드 속성을 구성합니다:
    • 필수: 필드를 필수로 만들기
    • 기본값: 기본 텍스트로 미리 채우기
    • 유효성 검사: 사용자 정의 유효성 검사 규칙 추가
    • 조건부 로직: 다른 필드에 따라 표시/숨기기

3단계: 제출자 구성

문서에 서명하거나 작성해야 하는 사람을 정의합니다:

  1. “제출자 추가”를 클릭합니다
  2. 제출자 세부 정보를 지정합니다:
    • 이름: 제출자의 표시 이름
    • 이메일: 알림용 이메일 주소
    • 역할: 역할 정의 (서명자, 검토자 등)
  3. 색상 코딩으로 특정 제출자에게 필드를 할당합니다

문서 워크플로우 관리

서명을 위한 문서 전송

  1. 템플릿 선택: 준비된 템플릿을 선택합니다
  2. 수신자 추가: 수신자 정보를 입력합니다
  3. 메시지 사용자 정의: 개인적인 메시지를 추가합니다
  4. 서명 순서 설정: 여러 서명자가 있는 경우 순서를 정의합니다
  5. 전송: DocuSeal이 자동으로 이메일 초대를 보냅니다

진행 상황 추적

대시보드는 실시간 추적을 제공합니다:

  • 대기 중: 조치를 기다리는 문서
  • 진행 중: 현재 서명 중인 문서
  • 완료됨: 완전히 실행된 문서
  • 거부됨: 거절된 문서

자동 알림

대기 중인 서명에 대한 자동 알림을 구성합니다:

# 알림 설정
REMINDER_INTERVAL: 3 # 일
MAX_REMINDERS: 3
REMINDER_MESSAGE: "문서 서명을 완료해 주세요"

고급 기능

API 통합

DocuSeal은 통합을 위한 포괄적인 REST API를 제공합니다:

# 새 제출 생성
curl -X POST https://your-docuseal-instance.com/api/submissions \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": 123,
    "submitters": [
      {
        "name": "홍길동",
        "email": "hong@example.com"
      }
    ]
  }'

웹훅 구성

실시간 알림을 받기 위한 웹훅 설정:

{
  "webhook_url": "https://your-app.com/webhooks/docuseal",
  "events": [
    "submission.created",
    "submission.completed",
    "submission.declined"
  ]
}

API를 통한 템플릿 생성

프로그래밍 방식으로 템플릿 생성:

# 업로드 및 템플릿 생성
curl -X POST https://your-docuseal-instance.com/api/templates \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -F "file=@document.pdf" \
  -F "name=계약서 템플릿"

보안 및 규정 준수

PDF 서명 검증

DocuSeal은 자동으로 PDF에 암호화 서명을 추가합니다:

  • 디지털 인증서: X.509 인증서 사용
  • 타임스탬프 기관: 신뢰할 수 있는 타임스탬프 추가
  • 서명 검증: 내장 검증 도구
  • 감사 추적: 완전한 서명 이력

데이터 보호

  • 암호화: 저장 및 전송 중 모든 데이터 암호화
  • 접근 제어: 역할 기반 권한
  • 감사 로깅: 포괄적인 활동 로그
  • GDPR 준수: 데이터 보호 기능

일반적인 문제 해결

Docker 컨테이너가 시작되지 않음

# 컨테이너 로그 확인
docker logs docuseal

# 일반적인 해결책
docker system prune  # Docker 리소스 정리
docker pull docuseal/docuseal:latest  # 최신 버전으로 업데이트

데이터베이스 연결 문제

# 데이터베이스 연결 테스트
docker exec -it docuseal rails db:migrate:status

# 필요시 데이터베이스 재설정
docker exec -it docuseal rails db:reset

이메일 전송 문제

  1. SMTP 자격 증명 확인
  2. 방화벽 설정 점검
  3. 다른 SMTP 제공업체로 테스트
  4. 애플리케이션의 이메일 로그 검토

성능 최적화

대용량 사용을 위한 설정:

# Docker Compose 최적화
services:
  docuseal:
    environment:
      - RAILS_MAX_THREADS=10
      - WEB_CONCURRENCY=3
      - RAILS_ENV=production
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G

프로덕션 배포 고려사항

SSL/TLS 구성

프로덕션에서는 항상 HTTPS를 사용하세요:

# Nginx 구성 예제
server {
    listen 443 ssl;
    server_name your-domain.com;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

백업 전략

정기적인 백업이 필수입니다:

# 데이터베이스 백업
docker exec docuseal pg_dump -U postgres docuseal > backup.sql

# 파일 저장소 백업
rsync -av ./docuseal-data/ ./backups/$(date +%Y%m%d)/

모니터링 및 로깅

프로덕션용 모니터링 설정:

# 로깅이 포함된 Docker Compose
services:
  docuseal:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

통합 예제

React 통합

import React, { useEffect } from 'react';

const DocuSealEmbed = ({ submissionId }) => {
  useEffect(() => {
    const script = document.createElement('script');
    script.src = 'https://your-docuseal-instance.com/embed.js';
    script.onload = () => {
      window.DocuSeal.embed({
        src: `https://your-docuseal-instance.com/s/${submissionId}`,
        email: 'user@example.com'
      });
    };
    document.body.appendChild(script);
  }, [submissionId]);

  return <div id="docuseal-form"></div>;
};

Node.js API 통합

const axios = require('axios');

class DocuSealClient {
  constructor(apiToken, baseUrl) {
    this.client = axios.create({
      baseURL: baseUrl,
      headers: {
        'Authorization': `Bearer ${apiToken}`,
        'Content-Type': 'application/json'
      }
    });
  }

  async createSubmission(templateId, submitters) {
    try {
      const response = await this.client.post('/api/submissions', {
        template_id: templateId,
        submitters: submitters
      });
      return response.data;
    } catch (error) {
      console.error('제출 생성 오류:', error);
      throw error;
    }
  }
}

결론

DocuSeal은 상용 문서 서명 플랫폼에 대한 강력한 오픈소스 대안을 제공합니다. 유연성, 포괄적인 기능 세트, 활발한 개발 커뮤니티로 인해 모든 규모의 조직에게 훌륭한 선택이 됩니다.

DocuSeal 사용의 주요 이점:

  • 비용 효율적: 서명당 수수료나 사용자 제한 없음
  • 데이터 소유권: 문서와 데이터에 대한 완전한 제어
  • 사용자 정의: 오픈소스로 사용자 정의 수정 가능
  • 통합: 원활한 통합을 위한 포괄적인 API
  • 보안: 엔터프라이즈급 보안 기능
  • 확장성: 소규모 팀부터 대기업까지 모든 것을 처리

문서 워크플로우를 디지털화하려는 소규모 비즈니스든, 사용자 정의 가능한 서명 솔루션이 필요한 대기업이든, DocuSeal은 필요에 맞는 도구와 유연성을 제공합니다.

고급 구성 및 엔터프라이즈 기능에 대해서는 DocuSeal의 Pro 기능을 살펴보거나 GitHub의 오픈소스 프로젝트에 기여하는 것을 고려해보세요.

추가 자료


DocuSeal에 대한 질문이 있거나 구현에 도움이 필요하신가요? 아래 댓글을 통해 연락하거나 GitHub의 커뮤니티 토론에 참여해보세요.