PDF를 합치거나 개인정보를 지울 때는 Stirling PDF, 웹사이트에서 가격처럼 정해진 항목을 표로 모을 때는 Maxun, 웹페이지 본문을 AI가 읽을 마크다운으로 만들 때는 Crawl4AI를 써보세요. 앱에 데이터베이스와 로그인이 필요하면 Supabase, Git에 올린 앱을 내 서버에 배포하고 싶으면 Coolify가 맞아요.
짐코딩 뉴스레터
매주 1통
클로드 코드·AI 개발 실전 노하우를 매주 한 통, 이메일로 받아보세요.
이 글 공유하기
다섯 도구는 내 컴퓨터나 서버에 직접 설치할 수 있어요. 이를 셀프 호스팅이라고 합니다. 서버·저장소·백업은 직접 부담하고, 외부 모델 API나 관리형 서비스를 붙이면 별도 요금이 생길 수 있어요. Stirling PDF는 공개 저장소 안에서도 구성 요소마다 라이선스가 다릅니다.
2026년 11월 12일 공식 안정 릴리스 기준으로 Stirling PDF는 3.3.0, Maxun은 0.1.0, Crawl4AI는 0.9.5, Supabase CLI는 3.1.0, Coolify는 4.7.5를 확인했습니다. Supabase의 버전은 이 글에서 실습에 쓰는 CLI 기준이에요.
Stirling PDF는 PDF 합치기, 나누기, 압축, 서명, 민감정보 삭제를 한곳에서 할 수 있는 도구예요. 계약서처럼 파일이 밖으로 나가면 곤란한 작업에는 데스크톱 앱에서 로그인 없이 Local Only로 시작하는 방법이 있어요. 이 모드에서는 문서가 컴퓨터 안에서 처리되고, 로컬에서 실행할 수 없는 도구는 사용할 수 없어요.
스캔한 PDF는 페이지가 이미지여서 글자를 검색할 수 없는 경우가 많아요. OCR은 이미지 속 글자를 인식해 PDF에 검색 가능한 텍스트를 추가합니다. 데스크톱에서 OCR과 PDF를 Word(.docx)로 바꾸는 기능은 보통 Stirling Cloud나 연결한 서버가 필요해요. 두 기능을 내 환경에서 쓰려면 표준 Docker 이미지를 사용하세요. 경량 이미지 latest-ultra-lite의 지원 범위는 기본 PDF 도구입니다. 한국어가 OCR 언어 목록에 없으면 서버에 Tesseract 한국어 언어팩을 추가하세요.
Maxun은 웹사이트에서 정해진 항목을 반복해서 수집하는 도구예요. 쇼핑몰 목록을 열고 Recorder Mode → Capture List에서 반복되는 상품 카드와 가격을 선택하면, 같은 동작을 다시 수행하는 Extract 로봇을 만들 수 있어요. 목록이 여러 페이지라면 사이트의 페이지 이동 방식에 맞춰 Next 버튼이나 스크롤을 설정하세요.
AI Mode는 직접 운영하는 Maxun에서 지정한 페이지의 데이터를 자연어로 추출합니다. 로봇을 만들 때 Anthropic 같은 모델 제공업체나 Ollama를 연결해야 하고, 목록의 스크롤이나 Next를 활용할 수 있어요. 웹에서 대상을 찾아 여러 사이트를 탐색하는 기능은 Maxun Cloud의 Agent가 맡습니다.
Google Sheets 연동은 Extract 로봇에서 지원해요. 직접 설치한 버전에서는 Google OAuth 설정이 필요하고, 연결한 뒤 성공한 실행의 데이터부터 새 행으로 추가됩니다. 매일 돌리면 같은 상품도 여러 번 쌓이므로 가격 기록에는 유용하고, 최신 가격표가 필요하면 URL 기준으로 최신 행을 골라야 해요.
Monitoring을 켜면 실행 결과가 바뀌었을 때 Runs에서 차이를 볼 수 있어요. 화면 이미지 비교, 사이트 전체를 돌며 비교하는 Crawl 모니터링, 이메일 알림은 Cloud 기능입니다. 공식 Claude Code 스킬에 Maxun API 키를 설정하면 이미 만든 로봇을 실행하고 결과를 가져올 수 있어요.
.env에서 JWT_SECRET, SESSION_SECRET, ENCRYPTION_KEY, DB_PASSWORD, MINIO_SECRET_KEY를 각각 새 값으로 바꿔요. openssl rand -hex 32를 항목마다 한 번씩 실행하면 임의의 값을 만들 수 있어요. 받은 Compose 파일은 여러 포트를 호스트에 게시하므로, 개인 컴퓨터 실습이라면 ports의 각 매핑 앞에 127.0.0.1:을 추가하세요. 예를 들어 프런트엔드는 "127.0.0.1:${FRONTEND_PORT:-5173}:${FRONTEND_PORT:-5173}"처럼 바꿉니다.
docker compose config -qdocker compose up -ddocker compose ps
기본 설정에서는 localhost:5173에서 열려요. Robots → Create Robot → Extract → AI Mode에서 모델을 선택하고, 아래의 페이지 URL과 프롬프트를 각각 입력하세요. Books to Scrape는 웹 스크래핑 연습용 사이트예요.
페이지 URL: https://books.toscrape.com/프롬프트:지정한 도서 목록에서 최대 25권을 수집해 줘.도서명, 표시 가격, 상품 URL을 각각 한 열로 만들어 줘.현재 페이지에서 25권을 채우지 못하면 목록의 다음 페이지로 이동해 줘.가격이 표시되지 않으면 빈 값으로 두고, 같은 상품 URL은 한 번만 넣어 줘.
첫 실행에서 25행이 나왔다면 두 번째 페이지의 도서까지 들어왔는지 확인하세요. 변화 감지까지 시험하려면 직접 관리하는 테스트 페이지에서 가격 하나를 바꾼 뒤 로봇을 다시 실행해 보세요.
Crawl4AI는 웹페이지를 마크다운으로 바꿔 AI 검색이나 문서 요약에 넣기 쉽게 만드는 크롤러예요. Maxun으로 제품명·가격처럼 정해진 열을 모으고, Crawl4AI로 제품 설명이나 문서의 본문을 파일로 저장할 수 있어요. 메뉴나 바닥글이 많이 따라오면 PruningContentFilterLXML로 본문에 가까운 결과를 만들 수 있습니다.
스크롤할 때 보이는 항목이 교체되는 가상 목록은 VirtualScrollConfig로 스크롤 대상과 횟수를 설정해요. 수집 범위는 이 설정과 사이트가 실제로 불러온 항목에 따라 달라집니다. 로그인 세션은 Python SDK에서 별도 브라우저 프로필을 만든 뒤 user_data_dir로 재사용할 수 있어요. 접근 권한이 있는 페이지에서 사용하고, 쿠키가 담긴 프로필은 Git에 올리지 마세요.
Python 3.12 또는 3.13이 설치된 macOS·Linux에서 새 실습 폴더를 열고 아래 명령을 실행하세요. Python 3.13을 쓰면 첫 줄의 python3.12를 python3.13으로 바꿔요. 이 예제는 공개 페이지 한 개를 읽으므로 LLM API 키가 필요하지 않습니다.
관리형 서비스인 Crawl4AI Cloud의 MCP를 쓰려면 서비스에서 발급한 키를 CRAWL4AI_API_KEY 환경 변수에 넣고, 같은 터미널에서 Claude Code를 실행하세요. 새 프로젝트의 .mcp.json에 아래 설정을 넣을 수 있어요. 기존 파일이 있다면 mcpServers 안에 crawl4ai 항목을 추가하세요. 사용량은 Cloud 플랜의 크레딧에 반영됩니다.
Claude Code에서 /mcp를 열어 연결 상태를 확인하세요. 셀프 호스팅 Docker 서버도 MCP를 제공하지만, 컨테이너 밖에서 접속하려면 서버에 토큰을 설정하고 클라이언트도 인증 헤더를 보내야 해요. 0.9.5까지의 Docker API 서버는 CVE-2026-112363 영향 범위에 포함됩니다. 공개 운영이 필요하면 수정된 공식 릴리스와 보안 설정을 먼저 확인하세요. 위 Python 예제는 Docker API 서버를 띄우지 않습니다.
출처 표기도 확인하세요. Crawl4AI는 UncleCode가 개발한 프로젝트예요. 확인한 버전의 LICENSE에는 Apache 2.0 본문 뒤에 별도 표기 조항이 있습니다. 배포하거나 공개 서비스에 쓴다면 해당 버전의 LICENSE에 지정된 문구와 표기 위치를 확인하세요. 저장소 README의 배지 안내와 함께 읽으면 표기 방법을 찾기 쉬워요.
Supabase는 PostgreSQL 데이터베이스에 인증, 파일 저장, 실시간 변경 구독을 더한 앱 백엔드예요. 예를 들어 가격 추적 앱이라면 수집한 가격은 PostgreSQL에 저장하고, Auth로 사용자를 로그인시키고, CSV는 Storage에 보관할 수 있어요. Realtime을 연결하면 등록한 테이블의 데이터 변경을 화면에 반영할 수 있습니다.
처음에는 Supabase CLI로 내 컴퓨터에서 실습하고, 서버에 직접 운영할 때는 공식 Docker Compose 배포 가이드를 따라가세요. 서버 운영에는 보안 설정, 업데이트, 백업, 복구가 필요해요. Realtime으로 테이블 변경을 받으려면 대상 테이블을 supabase_realtime 게시 목록에 추가하세요. 사용자별 데이터 접근은 RLS(Row Level Security) 정책으로 제한합니다.
출력된 Studio URL을 열고 SQL Editor에서 아래 쿼리를 실행하세요. 결과에 테스트 상품과 12900이 표시되면 데이터가 들어간 거예요.
create table if not exists public.watch_items ( id bigint generated always as identity primary key, name text not null unique, price_krw integer not null check (price_krw >= 0));alter table public.watch_items enable row level security;insert into public.watch_items (name, price_krw)values ('테스트 상품', 12900)on conflict (name) do nothing;select name, price_krwfrom public.watch_itemsorder by name;
Studio의 SQL Editor에서 조회에 성공해도 앱에서 바로 읽을 수 있는 것은 아니에요. Supabase Data API로 읽으려면 필요한 역할에 GRANT SELECT로 테이블 읽기 권한을 부여하고, RLS 정책으로 그 역할이 읽을 수 있는 행을 정하세요. 2026년 변경 이후에는 새 public 테이블의 API 접근 권한을 명시적으로 부여하는 방식이 기본입니다.
아래 명령은 Supabase Cloud 개발 프로젝트용이에요. YOUR_DEV_PROJECT_REF를 개발 프로젝트의 참조 ID로 바꾸고, Claude Code에서 /mcp를 열어 브라우저 인증을 진행하세요.
claude mcp add --scope local --transport http supabase \ "https://mcp.supabase.com/mcp?project_ref=YOUR_DEV_PROJECT_REF&read_only=true&features=database"
Supabase MCP로 연결된 개발 프로젝트에서 public 스키마의 테이블 이름과각 테이블의 컬럼 이름, 데이터 타입, 기본 키만 확인해 줘.사용자 데이터 행은 읽지 말고 결과를 표로 보여 줘.
Supabase Cloud의 읽기 전용 MCP는 쓰기를 제한하지만 허용 범위의 데이터는 조회할 수 있어요. 첫 연결에는 테스트 데이터만 있는 개발 프로젝트를 쓰세요.
로컬 CLI 스택을 연결하려면 아래 명령을 사용하세요. 포트를 바꿨다면 npx supabase status의 MCP 주소로 바꾸세요.
claude mcp add --scope local --transport http supabase-local http://localhost:54321/mcp
Coolify는 내 Linux 서버에서 앱을 빌드하고 배포하는 오픈소스 플랫폼이에요. GitHub App을 연결해 배포 브랜치에 푸시할 때 빌드와 배포를 시작하도록 설정할 수 있어요. 내 도메인의 DNS가 서버를 가리키고 TCP 80·443이 열려 있으면, Coolify의 도메인 설정에서 HTTPS를 선택해 내장 프록시의 자동 인증서 발급을 사용할 수 있어요.
GitHub의 Pull Request(PR)마다 테스트 주소를 만드는 Preview Deployments도 지원해요. Preview Deployments를 활성화한 뒤 저장소 구성원에게만 허용하고, 프리뷰에는 테스트용 환경변수를 넣으세요. Rollback에서는 서버에 남아 있거나 지원되는 레지스트리에서 다시 가져올 수 있는 이전 앱 이미지로 배포합니다. 배포 중에 바꾼 데이터베이스 스키마나 저장 파일은 각자의 백업·복구 절차가 필요해요.
설치 전에 서버 제공업체의 방화벽이나 보안 그룹에서 TCP 8000의 공개 접근을 막으세요. 최초 등록을 먼저 끝낸 사람이 Coolify 관리자와 서버의 root 접근 권한을 얻을 수 있습니다. 등록은 시작 후 10분 동안 가능해요. SSH 터널로 접속하거나 공식 설치 옵션으로 관리자 계정을 미리 생성하세요.
브라우저에서 127.0.0.1:8000을 열고 관리자 계정을 만들어요. 등록 시간이 지났다면 공개 접근을 막아둔 상태에서 서버의 docker restart coolify로 등록 창을 다시 열 수 있어요. 대시보드에서 Docker Image 리소스를 만들고 nginx:alpine 이미지, 컨테이너 포트 80을 지정해 배포해 보세요. 생성된 HTTP 테스트 주소를 외부 브라우저에서 열려면 앱 서버의 TCP 80을 허용해야 해요. Nginx 시작 화면이 보이면 첫 배포가 끝난 거예요. 이후 GitHub App 연결과 자동 배포를 추가하면, 연결이나 빌드가 실패했을 때 어느 단계의 문제인지 찾기 쉬워요.
아래에서 대괄호 두 곳을 바꾸고 사용하세요. 예를 들어 [도구]에 Stirling PDF, [환경]에 macOS의 Docker, 민감하지 않은 샘플 PDF로 실습을 넣으면 돼요.
[환경]에서 [도구]를 처음 시험하려고 해.공식 설치 문서와 GitHub의 최신 안정 릴리스를 확인해서 설치 순서를 작성해 줘.1. 로컬, 셀프 호스팅, 관리형 서비스 중 내 목적에 맞는 방식을 고르고 이유를 알려 줘.2. 필요한 런타임, 포트, 비밀값과 유료 기능을 구분해 줘.3. 복사 가능한 설치 명령, 첫 결과를 확인할 방법, 실습을 끝낼 때 중지할 명령을 적어 줘.4. Coolify는 초기 관리자 등록을 공개하지 않는 방법, Supabase MCP는 개발 프로젝트 읽기 전용 설정, Crawl4AI는 설치할 버전의 출처 표기 조항을 확인해 줘.5. 명령은 실행하지 말고, 근거가 된 공식 문서와 릴리스 주소를 함께 보여 줘.
처음에는 반복해서 하는 일 하나를 골라 작은 파일이나 공개 페이지로 시험해 보세요. 같은 일을 두세 번 해보면 결과가 정확한지, 절약한 시간이 직접 관리하는 시간보다 큰지 판단하기 쉬워요. PDF 편집을 끝낸 뒤 문서 본문을 Claude에 넣어 분석하고 싶다면 MarkItDown으로 PDF를 마크다운으로 바꾸는 방법도 참고해 보세요.