몇 달 전 v0로 함께 만든 도구 https://v0-yaerd.vercel.app가 떠오름 Laravel 마이그레이션 파일을 해석해서 ERD를 만들 수 있는 도구를 못 봐서 만들었고, 이후 기본적인 SQL 지원도 프롬프트로 추가했음
도구는 아주 멋지지만, SQL만으로는 ER 다이어그램을 만들 수 없다고 봄 엔터티와 테이블은 근본적으로 다르고, 매우 비슷하긴 해도 SQL만으로는 ER 다이어그램을 만들 만큼의 정보가 부족함
이 도구가 쓸모없다거나 이런 종류의 다이어그램이 도움이 안 된다는 뜻은 아니고, 다소 원론적인 얘기라 다른 사람들은 동의하지 않을 수도 있음
엔터티와 테이블이 대체로 서로 대응된다는 점이 수많은 ORM의 기본 원리 아닌가 싶음
물론 DDL이 엔터티의 생명주기에 대해 많은 걸 말해주지는 않지만, 관계·필드·카디널리티를 그래프로 표현하는 정도가 기준이라면 충분해 보임
더 정확히 말하면, Chen의 정의 기준으로 SQL에서 뽑아낸 ER 다이어그램은 가장 낮은 수준의 물리적 다이어그램이고, 여기서 논리적/개념적 다이어그램을 재구성할 수는 없음
요즘은 이 차이를 신경 쓰는 사람이 많지 않은 듯함
SQL에서 ER로 바꾸는 용도는 처음 보는 데이터베이스를 파악하기 위한 것임
이미 DB는 존재하지만 ERD가 없고, 문서도 거의 없을 수 있음
그래서 탐색 도구에 가깝고, 이상적으로는 뷰를 만들고 메모를 붙일 수 있어야 함
테이블 수가 엄청 많거나 외래 키가 빠진 테이블이 많을 때 전체 ERD를 한 번에 보지 않아도 되기 때문임
차이를 좀 더 설명해주면 좋겠음
실무적으로는 거의 서로 바꿔 쓸 수 있지만, 개념적으로는 엔터티와 관계 위에 더 풍부한 의미 계층이 있을 수도 있어 보임
예를 들면 관계에 대한 설명이나 엔터티에 붙는 추가 주석 같은 것들임
좀 더 자세히 설명해주면 좋겠음
엔터티는 항상 테이블과 1:1 관계라고 이해하고 있었고, 예시가 있으면 큰 도움이 될 듯함
모바일 사용성은 100점 만점에 1000점임
패닝, 확대/축소, 선택, 이동이 너무 매끄러워서 내가 착각하는 줄 알았음
처음 든 생각은 다이어그램 부분을 별도 라이브러리로 떼어내야 한다는 것이었음
ERD 말고도 이 다이어그램 기능을 쓸 곳이 많아 보임
정말 좋음
더블 탭으로 편집해도 확대/축소 수준이 초기화되지 않음
지금까지 본 모바일 친화 사이트 중 확실히 손꼽히는 수준임
Safari 모바일에서 텍스트 필드를 누르면 확대되는 것만 아쉬운데, 이건 다들 겪는 문제임
대단한 건 아니고 작은 도구지만 다른 사람들에게도 유용할 것 같았음
데이터베이스 스키마를 시각화해야 하는 일이 계속 있었는데, 대부분의 도구가 유료 장벽, 필수 가입, SQL을 남의 서버로 보내야 하는 문제를 갖고 있었음 백엔드 없음, 계정 없음, 데이터가 내 기기를 떠나지 않음
구현하면서 재미있었던 부분도 있음: DOM/SVG 대신 테이블을 캐시된 비트맵으로 래스터화하고 뷰포트 컬링을 써서 화면에 수백 개 테이블이 있어도 부드럽게 유지함
SQL 파서는 모든 토큰의 소스 범위를 추적해서 테이블 이름 변경 같은 편집이 관련 식별자와 참조만 정확히 바꾸고, 주석과 포맷은 그대로 둠
URL에 전체 스키마가 들어가며, 공유는 스키마를 URL 자체에 직렬화하는 방식이라 백엔드·저장 상태·계정이 필요 없음
Rust/WASM 버전도 실험했지만 JS↔WASM 경계 비용이 계산 절약분보다 커서 파서가 약 37% 느렸고, 다만 O(n^2) 겹침 해소 패스는 약 2.2배 빨랐음
결국 순수 JavaScript로 유지했고, 프레임워크 없이 gzip 기준 약 32KB임
제목에는 무료라고 되어 있는데, 그렇다면 어떤 자유 소프트웨어 라이선스를 쓰는지 궁금함
라이선스가 명시되지 않았다면 오픈소스일 수는 있어도 자유 소프트웨어는 아님