SchemaSpy vs SchemaCrawler – 당신에게 맞는 데이터베이스 문서화 도구는?

발행: (2026년 5월 27일 AM 08:47 GMT+9)
9 분 소요
원문: Dev.to

출처: Dev.to

SchemaSpy가 가장 잘하는 일

SchemaSpy의 가장 큰 강점은 대화형 HTML 보고서입니다. 한 번 실행하면 탐색 가능한 웹사이트가 생성됩니다: 클릭 가능한 테이블 페이지, 외래키 하이퍼링크, 이상 보고서, 그리고 각 테이블에 삽입된 ER 다이어그램. 이는 비기술적인 이해관계자, 컨설턴트, 혹은 데이터 모델을 빠르게 파악해야 하는 새로운 팀원에게 바로 전달할 수 있는 형태의 출력물입니다.

SchemaSpy는 암시적 관계도 감지합니다 – 스키마에 명시적으로 선언되지 않은 잠재적인 외래키를 찾아줍니다. 관계가 전혀 없는 테이블을 모아 보여주는 고아 테이블 페이지도 제공하므로 레거시 데이터베이스에 특히 유용합니다.

공유하고 브라우저에서 보기 좋은 탐색 가능한 보고서가 목표라면 SchemaSpy가 적합합니다.

공시: 저는 SchemaCrawler를 개발하고 있기 때문에, 이 내용은 적절히 회의적인 시각으로 받아들이시기 바랍니다. 가능한 한 공정하게 SchemaSpy를 소개하려 노력했습니다.

SchemaCrawler가 가장 잘하는 일

SchemaCrawler의 강점은 보고서 전·후에 개발자가 필요로 하는 검색, 차이 비교, 린팅, 스크립팅, 통합 전반에 있습니다.

차이 비교 가능한 텍스트 출력

SchemaCrawler의 schema 명령은 깔끔하고 구조화된 텍스트 출력을 생성합니다 – HTML이 아닙니다. 이를 프로덕션과 스테이징에 각각 실행하고, Git에서 출력물을 비교하면 정확히 무엇이 바뀌었는지 확인할 수 있습니다. 이는 CI/CD에서 스키마 변경 추적의 기반이 됩니다.

스키마 린트

lint 명령은 설계 문제를 자동으로 잡아냅니다: 기본키 누락, 고유 제약조건에 nullable 컬럼, 중복 인덱스, 관계가 없는 테이블 등. SchemaSpy에는 대응 기능이 없습니다.

Grep – 정규식으로 전체 스키마 검색

--grep-tables--grep-columns 옵션을 사용하면 정규식으로 모든 테이블, 컬럼, 저장 프로시저, 트리거, 외래키를 검색할 수 있습니다. 500개 테이블이 있는 데이터베이스에서 특정 개념을 참조하는 모든 컬럼을 한 번에 찾을 수 있죠. --parents--children을 결합하면 관련 테이블을 자동으로 추출할 수 있습니다.

다양한 출력 포맷

텍스트, HTML, JSON, CSV, Markdown, 그리고 Graphviz 기반 ER 다이어그램을 지원합니다. Markdown 출력은 코드 기반 문서화에 유용하고, JSON 출력은 도구 연동에 적합합니다.

PlantUML·dbdiagram.io와 연동한 스키마 확장

SchemaCrawler는 PlantUMLdbdiagram.io 포맷으로 직접 출력할 수 있습니다. 즉, 실제 데이터베이스에 존재하는 구조를 기반으로 다이어그램을 만든 뒤, 제안된 추가·변경을 편집할 수 있다는 뜻입니다 – 이는 SchemaSpy나 대부분의 ERD 도구가 직접 지원하지 않는 기능입니다.

스크립팅 – Python, JavaScript, Groovy, Ruby

--command=script 옵션으로 살아있는 스키마 메타데이터에 스크립트를 실행합니다. 맞춤 보고서 생성, 네이밍 규칙 검증, 출력 변환 등을 Java 애플리케이션을 작성하지 않고도 할 수 있습니다.

완전한 Java API

SchemaCrawler는 JDBC 메타데이터 API입니다. Java 애플리케이션에 내장해 테이블, 컬럼, 인덱스, 외래키, 루틴 등을 Java 객체로 다룰 수 있습니다. SchemaSpy는 공개 API가 없습니다.

GitHub Actions 통합

마켓플레이스에 공식 SchemaCrawler GitHub Action이 있습니다. 린트, 차이 비교, 스키마 문서 생성을 CI/CD 워크플로우 어디서든 실행할 수 있죠. SchemaSpy에는 이에 상응하는 기능이 없습니다.

기능 비교

기능SchemaCrawlerSchemaSpy
대화형 HTML 보고서
테이블 간 클릭 가능한 네비게이션
ER 다이어그램
차이 비교 가능한 텍스트 출력
스키마 린트 / 설계 검사
정규식 검색 (Grep)
Markdown, JSON, CSV 출력
PlantUML·dbdiagram.io 출력
스크립팅 (Python, JS, Groovy)
Java API
GitHub Actions 통합
암시적 관계 감지
고아 테이블 감지

선택 가이드

SchemaSpy를 선택해야 할 경우…

  • 주요 산출물이 비기술적인 이해관계자를 위한 공유 가능한 대화형 HTML 보고서일 때.
  • 기본 제공되는 테이블 간 클릭 네비게이션이 필요할 때.
  • 외래키 선언이 누락된 레거시 스키마에 대해 암시적/가상 외래키 감지가 필요할 때.

SchemaCrawler를 선택해야 할 경우…

  • 버전 관리에서 스키마 변화를 추적해야 할 때 – 환경 간 텍스트 출력 차이 비교.
  • CI에서 자동 설계 검증이 필요할 때 – 스키마 린트를 활용.
  • 대규모 스키마 검색이 필요할 때 – 패턴에 맞는 테이블·컬럼을 찾아야 할 경우.
  • CI/CD 파이프라인에 스키마 검사를 포함하고 싶을 때 – GitHub Actions 연동.
  • Markdown, JSON, CSV 등 HTML 외의 포맷이 필요할 때.
  • Live DB를 기반으로 PlantUML이나 dbdiagram.io에서 미래 스키마 설계를 하고 싶을 때.
  • 프로그래밍적으로 스키마 메타데이터를 처리할 스크립트를 작성하고 싶을 때.
  • Java 애플리케이션에서 데이터베이스 메타데이터를 객체 형태로 사용해야 할 때.

두 도구를 동시에 사용할 수 있나요?

네. 두 도구는 실제로 서로 다른 워크플로우를 지원합니다.

SchemaSpy로 이해관계자를 위한 HTML 보고서를 만들고, SchemaCrawler로 개발 및 CI/CD 과정에서 차이 비교, 린트, Grep 등을 수행하세요. 두 도구는 경쟁 관계가 아니라 서로를 보완합니다.

SchemaCrawler 사용해 보기

전체 문서는 여기에서 확인할 수 있습니다.
소스 코드는 GitHub에서 확인하세요.

0 조회
Back to Blog

관련 글

더 보기 »

첫 포스트: 짧은 전기

Introduction Hello, my name is Jay. Growing up, I wanted to follow in my dad's footsteps and become an engineer—and I did, just not in the way I originally exp...