SchemaSpy
📁SchemaSpy Github > https://github.com/schemaspy/schemaspy
SchemaSpy는 오픈소스 데이터베이스 메타데이터 분석 Tool이다.
DB접속 정보만 입력하면 간편하게 HTML 기반 보고서를 생성해 준다.
생성된 HTML는 아래와 같은 기능을 갖고 있다.
- ERD, 테이블 명세, Relation 조회
- 메타 데이터를 분석 - constraints, row 수 조회
- 테이블 명세를 excel, pdf, csv 형식의 파일로 다운
- 컬럼 또는 테이블을 클릭하여 링크를 타고 연관된 테이블로 이동 가능
처음 보는 DB에 붙었을 때, 연관 관계를 파악하고, DB 명세를 작성하는 등 여러 방면에서 유용하게 사용할 수 있을 것 같다.
결과물 examples

아래는 SchemaSpy에서 제공하는 결과물 example이다.
💡example > http://schemaspy.org/sample/index.html
실 사용 방법
WSL(Windows Subsystem for Linux) Ubuntu를 이용했습니다.
1. 필요 소프트웨어 설치
SchemaSpy.jar 파일, Graphviz 설치, Java 8 이상, DB driver 가 필요하다.
1) Java
SchemaSpy는 Java 기반 Tool이므로 Java를 설치해야 한다.
Java version을 확인하고, 없다면 설치하도록 하자.
java --version
2) SchemaSpy
SchemaSpy github에서 SchemaSpy.jar 파일을 다운로드할 수 있다.
Schemaspy-6.2.4.jar > https://github.com/schemaspy/schemaspy/releases/tag/v6.2.4
3) Graphviz
Graphviz는 DB 관계를 시각화하기 위한 Tool이다.
Debian, Ubuntu에서는 아래와 같은 명령어로 설치가 가능하다.
sudo apt install graphviz
4) DB JDBC Driver
분석하고자 하는 DB에 맞는 Driver jar 파일을 다운받아야한다.
필자는 PostgreSQL DB를 테스트에 사용했기 때문에, Postgresql JDBC Driver를 다운로드하였다.
이 부분은 구글링 하면 쉽게 다운로드할 수 있다.
2. 설치 확인
위의 과정을 잘 따라서 왔다면, 아래와 같이 여러 파일들이 잘 설치되어 있을 것이다.

- DB Driver : postgresql -42.7.3.jar
- schemaspy jar 파일 : schemaspy-6.2.4.jar
- java 버전 확인 명령어 : java --version
- graphviz 설치 확인 명령어 : dot -v
3. SchemaSpy 실행
기본 명령어
java -jar schemaspy-6.2.4.jar -t <database_type> -dp <path_to_jdbc_driver> -db <database_name> -host <host> -port <port> -u <username> -p <password> -o <output_directory>
꺽쇠 '< >' 부분에 DB 접속 정보를 입력하면 된다.
- -t <database_type> : 사용할 데이터베이스 유형 ex) mysql, oracle, pgsql 등 (postgresql이 아니라 pgsql이다.)
- -dp <path_to_jdbc_driver> : JDBC 드라이버 경로 ex) /home/hsryu/schemaspytest/postgresql-42.7.3.jar
- -db <database_name> : 데이터베이스 이름 ex) mydatabase
- -host <host> : 호스트명 또는 IP 주소 ex) localhost, 192.168.xxx.xxx
- -port <port> : 포트 번호 ex) 5432
- -u <username> : 사용자 이름 ex) myuser
- -p <password> : 비밀번호 ex) mypassword123
- -o <output_directory> : 분석 결과 파일들이 저장될 디렉터리 ex) /home/hsryu/schemaspytest/output
명령어 예시
java -jar schemaspy-6.2.4.jar -t pgsql -dp /home/hsryu/schemaspytest/postgresql-42.7.3.jar -db mydatabase -host 192.168.xxx.xxx -port 5432 -u myuser -p mypassword123 -o /home/hsryu/schemaspytest/output
위의 명령어를 입력하면 아래와 같이 로고가 뜨며 동작을 시작한다.

4. 최종 명령어
debug, 한글 깨짐 현상 해결을 포함한 최종 명령어이다.
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar -t pgsql -dp /home/hsryu/schemaspytest/postgresql-42.7.3.jar -db mydatabase -host 192.168.xxx.xxx -port 5432 -u myuser -p mypassword123 -o /home/hsryu/schemaspytest/output -debug -gvargs '-Gfontname=NanumGothic'
5. 결과물
실행이 완료되면 이전에 지정한 output 폴더가 생성되고, 아래 그림과 같은 결과물들이 만들어진다.


index.html을 open 하면, 분석 결과를 확인할 수 있다.

트러블 슈팅
* postgresql database_type
명령어 중, <database_type>에 postgresql을 입력하니 문제가 발생했다.
명령어에 추가로 -debug 옵션을 추가하니 database_type - 'postgresql'에 문제가 있다는 로그를 확인할 수 있었다.
SchemaSpy docs를 확인해 보니, postgresql은 pgsql로 단축되어 있는 것을 확인했고, -t pgsql로 바꿔서 실행하니 정상적으로 동작했다.

SchemaSpy docs
💡https://schemaspy.readthedocs.io/en/v6.2.0/index.html
* 한글 깨짐 문제 해결
아래와 같이 그림으로 된 테이블에서 한글 컬럼명이 깨지는 문제가 발생했다.

1) jar 파일 실행 시 인코딩 지정
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar ...~
문제가 해결되지 않았다.
HTML을 까보니, 해당 부분은 이미지로 되어있어서, graphviz에서 생성하는 부분인 것으로 파악했다.
2) graphviz 폰트 옵션 지정
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar /* 생략 */ -debug -gvargs '-Gfontname=NanumGothic'
문제가 해결되지 않았다.
3) ubuntu에 폰트 설치
sudo apt-get install fonts-nanum
graphviz에서 사용할 폰트는 지정했으나, 해당 폰트를 다운받지 않아서 문제가 됐었다.
폰트를 설치하고 실행하니 정상적으로 동작했다.

'[ 기타 ] > 오픈소스 라이브러리' 카테고리의 다른 글
[Java / Playground] Rest API 호출 모듈 만들기 / RestTemplate (0) | 2024.12.15 |
---|---|
[SonarQube] 오픈소스 정적분석 Tool 소나큐브 사용법 (0) | 2024.09.19 |
[java/Playground] Apache POI 엑셀 파일 다루기 (0) | 2024.09.04 |
[Apache POI] Java 코드로 엑셀(.xlsx) 파일 생성하기 - Java로 Excel 다루기 (0) | 2024.07.18 |
SchemaSpy
📁SchemaSpy Github > https://github.com/schemaspy/schemaspy
SchemaSpy는 오픈소스 데이터베이스 메타데이터 분석 Tool이다.
DB접속 정보만 입력하면 간편하게 HTML 기반 보고서를 생성해 준다.
생성된 HTML는 아래와 같은 기능을 갖고 있다.
- ERD, 테이블 명세, Relation 조회
- 메타 데이터를 분석 - constraints, row 수 조회
- 테이블 명세를 excel, pdf, csv 형식의 파일로 다운
- 컬럼 또는 테이블을 클릭하여 링크를 타고 연관된 테이블로 이동 가능
처음 보는 DB에 붙었을 때, 연관 관계를 파악하고, DB 명세를 작성하는 등 여러 방면에서 유용하게 사용할 수 있을 것 같다.
결과물 examples

아래는 SchemaSpy에서 제공하는 결과물 example이다.
💡example > http://schemaspy.org/sample/index.html
실 사용 방법
WSL(Windows Subsystem for Linux) Ubuntu를 이용했습니다.
1. 필요 소프트웨어 설치
SchemaSpy.jar 파일, Graphviz 설치, Java 8 이상, DB driver 가 필요하다.
1) Java
SchemaSpy는 Java 기반 Tool이므로 Java를 설치해야 한다.
Java version을 확인하고, 없다면 설치하도록 하자.
java --version
2) SchemaSpy
SchemaSpy github에서 SchemaSpy.jar 파일을 다운로드할 수 있다.
Schemaspy-6.2.4.jar > https://github.com/schemaspy/schemaspy/releases/tag/v6.2.4
3) Graphviz
Graphviz는 DB 관계를 시각화하기 위한 Tool이다.
Debian, Ubuntu에서는 아래와 같은 명령어로 설치가 가능하다.
sudo apt install graphviz
4) DB JDBC Driver
분석하고자 하는 DB에 맞는 Driver jar 파일을 다운받아야한다.
필자는 PostgreSQL DB를 테스트에 사용했기 때문에, Postgresql JDBC Driver를 다운로드하였다.
이 부분은 구글링 하면 쉽게 다운로드할 수 있다.
2. 설치 확인
위의 과정을 잘 따라서 왔다면, 아래와 같이 여러 파일들이 잘 설치되어 있을 것이다.

- DB Driver : postgresql -42.7.3.jar
- schemaspy jar 파일 : schemaspy-6.2.4.jar
- java 버전 확인 명령어 : java --version
- graphviz 설치 확인 명령어 : dot -v
3. SchemaSpy 실행
기본 명령어
java -jar schemaspy-6.2.4.jar -t <database_type> -dp <path_to_jdbc_driver> -db <database_name> -host <host> -port <port> -u <username> -p <password> -o <output_directory>
꺽쇠 '< >' 부분에 DB 접속 정보를 입력하면 된다.
- -t <database_type> : 사용할 데이터베이스 유형 ex) mysql, oracle, pgsql 등 (postgresql이 아니라 pgsql이다.)
- -dp <path_to_jdbc_driver> : JDBC 드라이버 경로 ex) /home/hsryu/schemaspytest/postgresql-42.7.3.jar
- -db <database_name> : 데이터베이스 이름 ex) mydatabase
- -host <host> : 호스트명 또는 IP 주소 ex) localhost, 192.168.xxx.xxx
- -port <port> : 포트 번호 ex) 5432
- -u <username> : 사용자 이름 ex) myuser
- -p <password> : 비밀번호 ex) mypassword123
- -o <output_directory> : 분석 결과 파일들이 저장될 디렉터리 ex) /home/hsryu/schemaspytest/output
명령어 예시
java -jar schemaspy-6.2.4.jar -t pgsql -dp /home/hsryu/schemaspytest/postgresql-42.7.3.jar -db mydatabase -host 192.168.xxx.xxx -port 5432 -u myuser -p mypassword123 -o /home/hsryu/schemaspytest/output
위의 명령어를 입력하면 아래와 같이 로고가 뜨며 동작을 시작한다.

4. 최종 명령어
debug, 한글 깨짐 현상 해결을 포함한 최종 명령어이다.
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar -t pgsql -dp /home/hsryu/schemaspytest/postgresql-42.7.3.jar -db mydatabase -host 192.168.xxx.xxx -port 5432 -u myuser -p mypassword123 -o /home/hsryu/schemaspytest/output -debug -gvargs '-Gfontname=NanumGothic'
5. 결과물
실행이 완료되면 이전에 지정한 output 폴더가 생성되고, 아래 그림과 같은 결과물들이 만들어진다.


index.html을 open 하면, 분석 결과를 확인할 수 있다.

트러블 슈팅
* postgresql database_type
명령어 중, <database_type>에 postgresql을 입력하니 문제가 발생했다.
명령어에 추가로 -debug 옵션을 추가하니 database_type - 'postgresql'에 문제가 있다는 로그를 확인할 수 있었다.
SchemaSpy docs를 확인해 보니, postgresql은 pgsql로 단축되어 있는 것을 확인했고, -t pgsql로 바꿔서 실행하니 정상적으로 동작했다.

SchemaSpy docs
💡https://schemaspy.readthedocs.io/en/v6.2.0/index.html
* 한글 깨짐 문제 해결
아래와 같이 그림으로 된 테이블에서 한글 컬럼명이 깨지는 문제가 발생했다.

1) jar 파일 실행 시 인코딩 지정
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar ...~
문제가 해결되지 않았다.
HTML을 까보니, 해당 부분은 이미지로 되어있어서, graphviz에서 생성하는 부분인 것으로 파악했다.
2) graphviz 폰트 옵션 지정
java -Dfile.encoding=UTF-8 -jar schemaspy-6.2.4.jar /* 생략 */ -debug -gvargs '-Gfontname=NanumGothic'
문제가 해결되지 않았다.
3) ubuntu에 폰트 설치
sudo apt-get install fonts-nanum
graphviz에서 사용할 폰트는 지정했으나, 해당 폰트를 다운받지 않아서 문제가 됐었다.
폰트를 설치하고 실행하니 정상적으로 동작했다.

'[ 기타 ] > 오픈소스 라이브러리' 카테고리의 다른 글
[Java / Playground] Rest API 호출 모듈 만들기 / RestTemplate (0) | 2024.12.15 |
---|---|
[SonarQube] 오픈소스 정적분석 Tool 소나큐브 사용법 (0) | 2024.09.19 |
[java/Playground] Apache POI 엑셀 파일 다루기 (0) | 2024.09.04 |
[Apache POI] Java 코드로 엑셀(.xlsx) 파일 생성하기 - Java로 Excel 다루기 (0) | 2024.07.18 |