블로그

A5:SQL Mk-2로 ERD 그리기

A5:SQL Mk-2(a5m2)는 SQL 클라이언트로 알려져 있지만, ER 다이어그램 편집기가 처음부터 함께 들어 있습니다. 쿼리를 실행하던 창에서 그대로 기존 DB의 구조를 다이어그램으로 뽑고, 새 스키마를 설계하고, 문서에 붙일 이미지까지 만들 수 있습니다.

a5m2 사용법은 기존 DB를 리버스 생성으로 불러오는 경로와 빈 ER 다이어그램에서 새로 설계하는 경로로 나뉩니다. 두 경로 모두 a5m2 ERD 편집기에서 이미지 출력, DDL 생성, 테이블 정의서 작성까지 이어집니다. 아래 메뉴 이름은 영문 표시 기준입니다.

A5 SQL Mk-2의 ER 다이어그램 기능

a5m2의 ER 편집기에서 맡는 작업은 다음 세 가지입니다.

  • 기존 DB에서 ERD 추출. 접속해 둔 데이터베이스에서 테이블을 골라 다이어그램을 자동으로 만듭니다.
  • 새 스키마 설계. 빈 편집기에 엔터티와 관계를 그리고, 그 설계를 CREATE TABLE 문으로 바꿉니다.
  • 문서용 출력. 완성한 다이어그램을 이미지로 내보내고, 테이블 정의서를 엑셀이나 CSV로 뽑습니다.

세 가지가 한 프로그램 안에 있어서 접속, 다이어그램, DDL, 정의서까지 창을 옮기지 않고 이어서 처리할 수 있습니다.

준비: 설치와 데이터베이스 접속

A5:SQL Mk-2는 공식 사이트에서 무료로 배포하는 윈도우용 프로그램입니다. 압축을 풀어 실행하면 바로 사용할 수 있어서 설치 과정에서 막힐 일이 거의 없습니다.

Oracle·PostgreSQL·MySQL·SQLite는 전용 연결 방식을 지원하고, SQL Server는 OLE DB Provider로 연결합니다. 그 밖의 호환 데이터베이스는 OLE DB나 ODBC 드라이버를 사용할 수 있습니다. DBMS에 따라 일부 기능의 지원 범위는 달라질 수 있습니다. 기존 DB에서 다이어그램을 뽑을 계획이라면 먼저 접속을 하나 만들어 두고, 설계부터 시작한다면 접속 없이 빈 ER 다이어그램만 열어도 됩니다.

접속을 만들면 왼쪽 데이터베이스 트리에 스키마와 테이블이 나옵니다. 이 트리가 리버스 생성의 출발점입니다.

기존 DB에서 ERD 리버스 생성하기

이미 돌아가고 있는 DB가 있다면 다이어그램은 직접 그리지 않고 읽어 오면 됩니다. a5m2에서 ERD를 자동 생성하는 순서는 이렇습니다.

  1. 메뉴에서 Database → Reverse Generate ER Diagram을 고릅니다. 데이터베이스 트리에서 접속을 우클릭해도 같은 항목이 나옵니다.
  2. 대화상자에 해당 접속의 테이블 목록이 뜹니다. 전체를 선택해도 되고, 지금 보려는 도메인의 테이블만 골라도 됩니다.
  3. Reverse Generate ER 버튼을 누르면 ER 다이어그램이 만들어집니다. 테이블과 컬럼, 참조 관계선까지 읽어 온 그대로 그려집니다.

인수인계받은 DB의 구조를 처음 파악할 때 이 방법이 가장 빠릅니다. 테이블이 수백 개인 스키마라면 한 번에 전체를 부르는 대신 회원, 주문, 정산처럼 도메인 단위로 여러 장을 만들어 두면 읽기 좋습니다.

리버스 생성 직후 확인할 세 가지

생성이 끝나면 다음 세 가지를 확인해 두면 좋습니다. 관계선이 실제 외래 키와 맞는지, 인덱스가 함께 들어왔는지, 자료형이 원본과 같은지입니다. 공식 문서도 데이터베이스 종류에 따라 이 부분이 다르게 생성될 수 있다고 안내하고 있어서, 처음 다루는 DBMS라면 한 번 확인하고 넘어가면 안전합니다.

관계선 끝에 붙은 기호를 읽는 법이 낯설다면 ERD 표기법 총정리를 함께 보시면 됩니다. 까마귀발 기호 네 가지만 익히면 어떤 다이어그램이든 읽을 수 있습니다.

새 ER 다이어그램을 직접 그리기

설계부터 시작할 때는 File → New → New ER Diagram으로 빈 편집기를 엽니다. 여기서는 게시판을 예제로 회원, 게시글, 댓글 세 테이블을 그려 보겠습니다.

엔터티 추가. 도구 모음의 Add Entity 모드 버튼을 누른 다음 캔버스의 원하는 위치를 클릭하면 빈 엔터티가 하나 생깁니다. 엔터티를 더블클릭하면 속성 창이 열리고, 여기서 엔터티의 논리명과 물리명을 입력합니다. 회원 테이블이라면 논리명은 회원, 물리명은 members가 됩니다.

필드 입력. 같은 속성 창에서 각 필드의 논리명, 물리명, 자료형, 필수 여부, 키, 기본값을 지정하고 인덱스 정보도 함께 넣습니다. 물리명으로 입력한 이름이 나중에 실제 컬럼명이 되므로, 이 단계에서 이름 규칙을 맞춰 두면 DDL을 만든 뒤 손댈 일이 줄어듭니다.

관계 연결. Add Relation 모드 버튼을 누르고 부모 엔터티를 먼저, 그다음 자식 엔터티를 클릭하면 관계선이 그어집니다. 게시판이라면 회원이 부모, 게시글이 자식입니다. 배치한 뒤에는 부모와 자식을 바꿀 수 없으니 방향을 정하고 클릭하는 편이 낫습니다. 어느 쪽이 부모인지 헷갈릴 때는 개수가 1이 되는 쪽을 부모로 보면 대개 맞습니다.

카디널리티 지정. 관계선을 더블클릭하면 속성 창에서 양쪽 개수를 고를 수 있습니다. 0 또는 1, 1, 0 이상, 1 이상 네 가지이고, 회원과 게시글이라면 회원 쪽이 1, 게시글 쪽이 0 이상입니다. 표기는 IE 표기법과 IDEF1X를 모두 지원하니 팀에서 사용하던 쪽에 맞추면 됩니다.

그 밖의 객체. 같은 엔터티를 두 번 클릭하면 자기참조 관계가 만들어집니다. 댓글의 부모 댓글처럼 자기 테이블을 참조하는 구조가 여기에 해당합니다. 뷰와 서브타입도 별도 객체로 올릴 수 있고, 서브타입 자식에는 부모 엔터티의 기본키가 자동으로 추가됩니다.

인덱스와 자료형을 미리 정리해 두기

엔터티 속성 창에는 필드 목록과 함께 인덱스 정보를 넣는 자리가 있습니다. 조회 조건으로 자주 사용할 컬럼은 설계 단계에서 인덱스를 함께 작성해 두면, DDL을 만들 때 CREATE INDEX까지 한 번에 나옵니다. 게시판이라면 게시글의 작성자와 작성일, 댓글의 게시글 번호가 여기에 해당합니다.

자료형을 매번 직접 입력하는 대신 자료형 도메인 기능을 사용하는 방법도 있습니다. 이메일은 VARCHAR(255), 금액은 DECIMAL(15,2)처럼 자주 사용하는 형태를 도메인으로 정의해 두고 각 필드에서 고르는 방식이라, 테이블이 늘어나도 같은 항목이 서로 다른 길이로 흩어지는 일이 줄어듭니다. 이름 규칙과 자료형 규칙을 먼저 세워 두고 시작하면 나중에 정의서를 만들 때도 손이 덜 갑니다.

다이어그램 보기 좋게 정리하기

엔터티는 드래그해서 옮기면 되고, 관계선은 부모와 자식의 위치에 따라 자동으로 잡힙니다. 선이 다른 엔터티 위를 지나가 읽기 불편하면 선을 직접 끌어 위치를 조정할 수 있습니다.

다이어그램 위에 설명을 남기고 싶을 때는 코멘트 오브젝트를 사용합니다. 데이터베이스에는 반영되지 않는 순수한 메모라, 이 테이블은 배치에서만 사용한다는 식의 문구를 그림 안에 작성해 두면 이미지로 내보냈을 때 그 맥락까지 함께 전달됩니다. 선분과 도형, 이미지도 같은 방식으로 올릴 수 있어서 도메인 구분선을 긋거나 제목을 붙이는 정도는 편집기 안에서 해결됩니다.

컬럼이 많은 테이블이 화면을 다 차지한다면 ER Diagram → ER Diagram Properties를 열어 엔터티 최대 표시 행수를 조정하면 됩니다. 기본값이 1000이라 모든 컬럼이 그려지는데, 20 정도로 낮추면 컬럼 20개까지만 표시되고 나머지는 생략 표시로 바뀝니다. 컬럼이 수십 개인 스키마의 전체 구조를 볼 때 이 설정 하나로 읽기가 크게 편해집니다. 같은 창에서 프로젝트명, 대상 RDBMS, 글꼴과 크기, 페이지 머리말과 꼬리말도 지정할 수 있습니다.

IE 표기법과 IDEF1X 중 무엇으로 그릴까

a5m2는 관계선 기호를 IE 표기법과 IDEF1X 두 가지로 그릴 수 있습니다. 어느 쪽으로 그려도 담기는 정보는 같고, 달라지는 건 기호의 모양뿐입니다.

IE 표기법은 선 끝에 까마귀발 모양으로 개수를 표시하는 방식이라, 웹 서비스 설계나 온라인 도구에서 가장 흔히 보는 형태입니다. 처음 ERD를 그리는 팀이라면 이쪽이 무난합니다. IDEF1X는 공공 사업이나 대형 SI 프로젝트의 산출물 표준으로 지정되는 경우가 있어서, 발주처 문서 양식이 정해져 있다면 그 규격을 따르면 됩니다.

한 프로젝트 안에서는 한 표기로 통일해 두는 게 좋습니다. 두 표기가 섞이면 같은 모양의 선이 문서마다 다른 뜻으로 읽히기 때문입니다. 두 표기의 기호가 각각 무엇을 뜻하는지는 ERD 표기법 총정리에 기호별로 정리해 두었습니다.

ER 다이어그램을 이미지로 출력하기

정리한 다이어그램은 Edit → Create Bitmap으로 내보냅니다. 크기와 색 수를 고르고 확인을 누르면 클립보드에 복사되고, 엑셀이나 워드에 그대로 붙여넣으면 됩니다. 설계서에 구조 그림을 한 장 넣어야 할 때 이 기능을 사용합니다.

붙여넣은 그림을 이미지 파일로 따로 보관하려면 문서에서 그림으로 저장하면 됩니다. 위키나 이슈 트래커에 올릴 때도 같은 방식으로 처리하면 됩니다.

작업한 다이어그램 자체는 ER 다이어그램 파일로 저장됩니다. 배치와 속성이 모두 이 파일에 들어가니, 이어서 작업할 계획이라면 프로젝트 폴더에 소스와 함께 보관해 두면 좋습니다.

인쇄용으로 정리할 때

회의에 종이로 들고 가야 한다면 ER Diagram Properties에서 페이지 머리말과 꼬리말을 먼저 지정해 둡니다. 프로젝트명과 작성자, 페이지 번호가 각 장에 들어가면 여러 장으로 나뉘어도 순서가 헷갈리지 않습니다. 글꼴 크기 기본값은 6포인트라 화면에서는 충분해도 인쇄물에서는 작게 나옵니다. 배포용으로 뽑을 때는 조금 키워 두면 읽기 좋습니다.

설계에서 DDL로: CREATE TABLE 만들기

작성한 다이어그램은 곧바로 실행할 수 있는 SQL로 바뀝니다. ER Diagram → Create DDL을 고르고 대상 RDBMS 종류와 옵션을 정한 뒤 DDL 생성을 누르면 SQL 편집기에 결과가 열립니다. 여기서 접속을 지정하고 전체 실행으로 돌리면 실제 테이블이 만들어집니다.

위에서 작성한 게시판 예제는 이런 형태가 됩니다.

CREATE TABLE members (
  id         BIGINT AUTO_INCREMENT PRIMARY KEY,
  email      VARCHAR(255) NOT NULL UNIQUE COMMENT '이메일',
  nickname   VARCHAR(50)  NOT NULL COMMENT '닉네임',
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP
) COMMENT='회원';

CREATE TABLE posts (
  id         BIGINT AUTO_INCREMENT PRIMARY KEY,
  member_id  BIGINT       NOT NULL COMMENT '작성자',
  title      VARCHAR(200) NOT NULL COMMENT '제목',
  content    TEXT         NULL COMMENT '본문',
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_posts_member FOREIGN KEY (member_id) REFERENCES members (id)
) COMMENT='게시글';

CREATE TABLE comments (
  id        BIGINT AUTO_INCREMENT PRIMARY KEY,
  post_id   BIGINT NOT NULL COMMENT '게시글',
  member_id BIGINT NOT NULL COMMENT '작성자',
  parent_id BIGINT NULL COMMENT '부모 댓글',
  content   TEXT   NOT NULL,
  CONSTRAINT fk_comments_post   FOREIGN KEY (post_id)   REFERENCES posts (id),
  CONSTRAINT fk_comments_member FOREIGN KEY (member_id) REFERENCES members (id),
  CONSTRAINT fk_comments_parent FOREIGN KEY (parent_id) REFERENCES comments (id)
) COMMENT='댓글';

대상 RDBMS를 바꿔서 다시 생성할 수도 있습니다. 같은 설계를 개발용 MySQL과 납품용 Oracle 양쪽으로 내보내야 할 때, 설계를 다시 그릴 필요 없이 옵션만 바꾸면 됩니다.

테이블 정의서를 엑셀·CSV로 뽑기

테이블 정의서는 ER 편집기가 아니라 테이블 메뉴 쪽에 있습니다. Table → Create Table Definition은 엑셀 형식으로 출력하고, 이 기능은 Excel 2000 이상이 설치되어 있어야 동작합니다. 엑셀 없이 데이터만 필요하다면 Table → Export Table Definition as CSV로 CSV를 뽑아 원하는 양식에 옮겨 담으면 됩니다.

명세서에 어떤 항목을 넣어야 할지부터 정해야 한다면 테이블 명세서 작성법에 컬럼명, 자료형, 필수 여부, 기본값, 설명까지 실무에서 사용하는 구성이 정리되어 있습니다.

실무에서 유용한 활용 팁

ER 다이어그램을 접속에 할당해 두기. 만들어 둔 다이어그램을 데이터베이스에 할당하면 데이터베이스 트리의 각 객체 옆에 논리명이 함께 표시됩니다. 테이블 코멘트보다 이쪽이 우선이라, 물리명만으로는 무슨 테이블인지 알기 어려운 스키마에서 특히 도움이 됩니다. 쿼리를 작성하다가 테이블 이름을 찾으려고 스키마를 뒤지는 시간이 줄어듭니다.

개발 DB와 운영 DB 비교하기. 두 접속을 각각 리버스 생성해 다이어그램 두 장으로 만들어 두면 구조 차이를 눈으로 빠르게 확인할 수 있습니다. 배포 전에 스키마가 어긋나 있는지 확인할 때 유용합니다.

도메인별로 나눠서 관리하기. 전체 스키마를 한 장에 다 넣으면 화면에서도 인쇄물에서도 읽기 어렵습니다. 회원, 주문, 정산처럼 도메인 단위로 다이어그램을 나눠 두고, 도메인을 넘나드는 관계에는 코멘트로 설명을 붙여 두면 관리가 쉬워집니다.

상황별 작업 순서 세 가지

용도에 따라 작업 순서는 다음처럼 달라집니다.

인수인계받은 DB를 파악할 때는 접속을 만들고 도메인별로 리버스 생성을 돌려 다이어그램 서너 장을 만듭니다. 각 장에 코멘트로 담당 기능을 작성해 두고, 엔터티 최대 표시 행수를 20 정도로 낮춰 전체 구조가 한눈에 들어오게 맞춥니다. 여기까지 하면 어떤 테이블이 중심이고 어디에 데이터가 모이는지가 그림으로 보입니다.

새 기능을 설계할 때는 빈 ER 다이어그램에서 엔터티와 관계를 그리고, 자료형 도메인으로 형식을 맞춘 다음, DDL 생성으로 CREATE TABLE 문을 뽑아 개발 DB에 적용합니다. 리뷰 자리에 비트맵으로 뽑은 그림 한 장을 올려 두면 설명이 훨씬 수월합니다. 설계 순서 자체가 아직 익숙하지 않다면 ERD 그리는 법에 개체와 관계를 정하는 순서가 예제와 함께 있습니다.

검수나 납품 문서를 만들 때는 리버스 생성으로 현재 구조를 그대로 읽어 온 뒤, 테이블 정의서를 엑셀로 출력하고 다이어그램은 이미지로 붙입니다. 정의서와 그림이 같은 시점의 DB에서 나왔다는 점이 중요해서, 스키마가 바뀌면 두 파일을 함께 다시 만들어야 안전합니다.

자주 묻는 질문

A5:SQL Mk-2는 무료인가요?

무료입니다. 공식 사이트에서 내려받아 사용하는 윈도우용 프로그램이고, ER 다이어그램 편집기도 기본으로 들어 있습니다. 별도의 확장이나 유료 버전을 구매하지 않아도 리버스 생성, DDL 생성, 이미지 출력까지 모두 사용할 수 있습니다.

어떤 데이터베이스에 접속할 수 있나요?

Oracle·PostgreSQL·MySQL·SQLite는 전용 연결 방식을 지원하고, SQL Server는 OLE DB Provider로 연결합니다. 그 밖의 호환 데이터베이스는 OLE DB나 ODBC 드라이버를 사용할 수 있습니다. 일부 기능은 DBMS에 따라 지원 범위가 다릅니다.

기존 데이터베이스에서 ERD를 자동으로 그릴 수 있나요?

됩니다. 메뉴에서 Database → Reverse Generate ER Diagram을 고르면 테이블 목록이 뜨고, 필요한 테이블을 골라 Reverse Generate ER 버튼을 누르면 다이어그램이 만들어집니다. 데이터베이스 트리에서 접속을 우클릭해도 같은 메뉴가 나옵니다.

작성한 ER 다이어그램을 이미지로 저장하려면 어떻게 하나요?

Edit → Create Bitmap을 고르면 크기와 색 수를 정한 다음 클립보드로 복사됩니다. 엑셀이나 워드 문서에 그대로 붙여넣으면 되고, 이미지 파일이 필요하면 붙여넣은 뒤 그림으로 저장하면 됩니다.

a5m2 ERD로 기존 DB를 문서화할 때는 접속 만들기, 리버스 생성, 배치 정리, 이미지 출력 순으로 진행합니다. 새로 설계할 때는 빈 ER 다이어그램에서 엔터티와 관계를 만든 뒤 DDL을 생성하고, 정의서가 필요하면 테이블 메뉴에서 엑셀이나 CSV로 출력합니다.

DDL을 이미 뽑아 둔 상태라면 WorksCove ERD에 붙여넣어 다이어그램과 테이블 명세서를 만드는 방법도 있습니다. 붙여넣기부터 결과까지는 SQL을 ERD로 변환하기에 화면과 함께 정리되어 있고, 다른 도구를 사용하고 있다면 DBeaver와 MySQL Workbench 안내도 같은 구성으로 있습니다.