안녕하세요, 1인 사업가와 개발자 여러분! 펭귄 뮤지엄입니다. 🐧
지난번 AI를 활용한 디자인 이야기에 이어, 오늘은 개발의 뼈대를 세우는 데이터베이스 ERD(개체-관계 다이어그램) 작성법에 대해 깊이 파고들어 보려 합니다.
"요즘 AI가 다 해주는데, ERD도 맡기면 되지 않나요?" 물론 맞는 말씀입니다.
AI는 간단한 프로젝트의 ERD를 꽤 훌륭하게 짜주기도 하죠. 메모장이나 투두리스트 정도라면 AI의 도움을 받는 것이 효율적일 수 있습니다.
하지만, 여러분의 서비스가 복잡해질수록 이야기는 달라집니다.
제가 구상한 서비스의 핵심 로직과 데이터 흐름을 AI가 완벽히 이해하고, 제가 원하는 그대로 ERD를 설계해 줄 것이라는 믿음은 아직 시기상조일 수 있습니다.
(저도 AI에게 맡겼다가 스키마를 통째로 갈아엎었던 아픈 기억이... 😭)
더 중요한 사실! ERD는 단순히 그림이 아닙니다. 프로젝트의 청사진과 같아서, 개발자 스스로가 그 내용을 확실히 이해하고 있어야만 전체 개발 과정과 추후 유지보수가 순조롭게 진행될 수 있습니다.
AI가 아무리 멋진 ERD를 제안해도, 그것을 이해하고 내 것으로 만드는 데 또 다른 시간이 소요된다면 오히려 비효율적이겠죠?
그래서 저는 프로젝트 빌더가 ERD의 초안을 직접 설계하고, AI에게는 부족한 부분을 보완하거나 검증받는 방식을 추천합니다.
이것이 바로 프로젝트 빌딩의 효율성과 안정성을 모두 잡는 현명한 방법이 될 수 있습니다.
자, 그럼 지금부터 ERD가 무엇인지부터 시작해서, 어떻게 직접 설계하고 AI의 도움을 받아 완성도를 높일 수 있는지 그 여정을 함께 떠나보시죠!
🎯 ERD, 도대체 정체가 뭐야? (핵심만 쏙쏙!)
ERD는 "Entity Relationship Diagram"의 약자로, 우리말로는 "개체-관계 다이어그램" 또는 "개체관계도"라고 불립니다.
쉽게 말해, 데이터베이스에 어떤 데이터를 저장하고(엔터티), 그 데이터들 사이에 어떤 관계가 있는지(관계)를 한눈에 보기 쉽게 그림으로 표현한 것입니다.
ERD를 왜 사용할까요?
- 데이터베이스 구조의 시각화: 복잡한 데이터 구조를 명확하게 파악할 수 있습니다.
- 명확한 정의: 테이블(엔터티)과 그 안의 속성(컬럼), 그리고 테이블 간의 관계를 명확히 정의하여 개발 과정에서의 혼란을 줄여줍니다.
- 설계 및 검증 도구: 실제 데이터베이스를 구축하기 전, 요구사항을 분석하고 데이터 모델을 설계하며 아이디어를 구체화하고 구조를 검증하는 데 핵심적인 역할을 합니다.
ERD는 데이터베이스 설계의 나침반과 같다고 할 수 있겠네요! 😉
🛠️ ERD, 어떤 도구로 쉽게 만들 수 있을까? (추천 서비스 비교)
맨손으로 한 땀 한 땀 ERD를 그리는 장인정신도 존경스럽지만, 우리는 MVP(Minimum Viable Product, 최소 기능 제품) 제작에도 시간이 부족한 바쁜 빌더들이잖아요? 그래서 똑똑한 도구의 힘을 빌리는 것이 현명합니다!
웹 기반으로 편리하게 사용할 수 있는 두 가지 ERD 도구를 추천해 드립니다.
- ERD Cloud (https://www.erdcloud.com/): GUI 기반으로 직관적인 사용성을 자랑합니다.
- dbdiagram.io (https://dbdiagram.io): 코드 기반으로 빠르고 간편하게 ERD를 작성할 수 있습니다.
각 서비스의 장단점을 간단히 비교해 볼까요?
ERD Cloud | dbdiagram.io | |
장점 | - 완전 무료, 기능 제한 없음 - 팀 협업, 실시간 화면 공유, 클라우드 자동 저장 - 버전 관리 및 롤백 기능 - GUI 기반, 직관적 사용 - 다양한 DB 쿼리 내보내기 지원 (MySQL, Oracle, MSSQL 등) |
- DBML, SQL 등 코드로 빠른 작성 - 다양한 포맷으로 내보내기/가져오기 (SQL, PostgreSQL 등) - 이미지(PDF, PNG) 내보내기 - GitHub 등 외부 문서와 연동 용이 - 코드 기반으로 대규모 설계, 버전 관리에 유리 |
단점 | - 모든 데이터 외부 서버 저장 (보안 민감 프로젝트 주의) - 로지컬 다이어그램 지원 부족 - 일부 터치 인터페이스 기능 미흡 가능성 |
- 실시간 동시 편집 기능 제한적 - DBML 등 새로운 문법 학습 필요 - GUI보다 코드 입력 중심 (초보자 진입 장벽 가능성) |
추천 대상 | 팀 협업, 실시간 저장/버전 관리가 중요하고, GUI 기반의 직관적인 도구를 선호하며, 다양한 DB로의 쿼리 변환이 필요한 사용자/팀 | 코드 기반의 빠른 ERD 작성을 선호하고, 다양한 포맷으로의 전환이 잦으며, 개인 또는 소규모 프로젝트의 문서화를 효율적으로 하고 싶은 개발자 |
개발자라면 dbdiagram.io의 코드 기반 방식이 더 익숙하고 편할 수 있습니다.
하지만 이 글에서는 비개발자분들도 쉽게 따라 할 수 있도록 직관적인 WYSIWYG(What You See Is What You Get) 방식의 ERD Cloud를 사용하여 ERD를 만들어 보겠습니다.
🚀 본격적으로 ERD 설계 시작하기 (ERD Cloud 활용법)
자, 이제 ERD Cloud를 이용해 실제 ERD를 만들어 봅시다. ERD 설계는 깊게 파고들면 배울 내용이 많지만, 여기서는 MVP 제작을 위한 핵심적인 내용 위주로 빠르게 살펴보겠습니다. 더 자세한 내용은 추후 꼭 학습해 보시길 추천합니다!
ERD Cloud 접속 및 프로젝트 생성
ERD Cloud 웹사이트에 접속합니다.
ERDCloud
Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.
www.erdcloud.com
Try ERDCloud 버튼을 클릭합니다.
프로젝트 생성 모달창이 나타나면, 프로젝트 제목을 입력합니다.
그리고 프로젝트 공개 여부를 선택합니다.
(혼자 작업하거나 비공개로 진행하고 싶다면 private, 다른 사람에게 공유하고 싶다면 public)
CREATE 버튼을 클릭하여 프로젝트를 생성합니다.
작업 환경 설정
ERD 편집 화면으로 이동하면 가장 먼저 해야할 것은 불필요한 속성을 제거하는것 입니다.
오른쪽 상단 메뉴에서 설정(톱니바퀴 아이콘).
여기서 Type, Domain 등의 표시 옵션을 해제할 수 있습니다.
이 옵션들은 더 명확하고 상세한 ERD를 작성할 때 유용하지만, MVP 단계에서는 필수는 아닙니다.
(물론, 데이터 타입을 명확히 하고 싶다면 Type 정도는 지금 지정해도 좋습니다.)
테이블 설계하기
화면 왼쪽 메뉴 박스에서 Table 아이콘을 클릭한 후 캔버스 빈 공간을 클릭하여 테이블을 생성합니다.
생성된 테이블 상단에 먼저 테이블의 설명(또는 한글 이름)을 쉽게 이해할 수 있도록 작성하고 Enter 키를 누릅니다. (예: 노래 정보)
테이블 헤더의 왼쪽 부분은 방금 입력한 설명이 표시되고, 오른쪽 부분에는 실제 데이터베이스에 사용될 테이블 이름을 입력합니다.
테이블 상단의 노란색 + 버튼은 기본 키(Primary Key, PK)를 생성하는 버튼이고, 파란색 + 버튼은 일반 필드(컬럼)를 생성하는 버튼입니다. 각 필드의 이름, 데이터 타입, 제약 조건 등을 설정할 수 있습니다.
테이블 구성 설계
- 노래 테이블 (SONG): 모든 일본 노래의 기본 정보 (제목, 가사, 발매일, 금영 노래방 번호 등)
- 아티스트 테이블 (ARTIST): 아티스트 정보 (이름, 소개 등). 추후 아티스트별 노래 정렬 등을 위해 분리했습니다.
- 신곡 테이블 (RELEASE): 매주 업데이트되는 신곡 리스트를 위한 테이블 (노래 ID, 추가된 날짜 등)
- 사용자 정보 테이블 (USERS): 로그인 사용자 정보 (아이디, 비밀번호, 닉네임 등). 좋아요 기능 등을 위해 필요합니다.
- 테마 테이블 (THEMES): 특정 테마(예: 애니메이션 OST, 90년대 J-POP 등)별 노래 리스트를 구성하기 위한 테이블 (테마명, 설명 등)
이렇게 각 테이블의 역할과 주요 속성들을 정의하면, 아래와 같은 모습으로 테이블들이 배치될 것입니다.
(여러분의 서비스에 맞게 자유롭게 구성해 보세요!)
관계 설정의 핵심, 조인 테이블 (Join Table) 이해하기
위에서 그린 ERD 테이블들을 잘 살펴보면, 몇몇 테이블들은 정의하지 않았는데 생성해 놓은 테이블들이 보입니다. 이런 테이블들은 별 다른 필드 없이 수정일, 삭제일, 생성일 같은 필드만 존재합니다. 이런 테이블들을 조인 테이블이라고 하는데요. 서로 직접적인 관계를 맺기보다는 중간에서 다리 역할을 하는 테이블입니다.
그렇다면 이 조인 테이블에 대해서 설명해보겠습니다.
- 노래-테마 조인 테이블 (SONG_THEMES): 어떤 노래가 어떤 테마에 속하는지 연결 (노래 ID, 테마 ID)
- 사용자-노래_좋아요 조인 테이블 (USER_SONG_LIKES): 어떤 사용자가 어떤 노래를 좋아하는지 연결 (사용자 ID, 노래 ID)
- 노래-신곡 조인 테이블 (SONG_NEW_RELEASES): 어떤 노래가 신곡으로 등록되었는지 연결 (노래 ID, 신곡 테이블 ID). (사실 이 관계는 신곡 테이블에 노래 ID를 직접 넣는 1:N 관계로도 설계 가능하나, 확장성을 고려해 분리할 수도 있습니다.)
- 노래-아티스트 조인 테이블 (SONG_ARTISTS): 어떤 노래를 어떤 아티스트가 불렀는지 연결 (노래 ID, 아티스트 ID). (AI의 조언에 따라 확장성을 위해 분리했습니다!)
이처럼 조인 테이블은 각 테이블의 기본 키를 가져와 외래 키(Foreign Key, FK)로 사용하여 관계를 맺습니다. 조금 복잡하게 느껴질 수 있지만, 데이터의 중복을 피하고 유연한 관계를 설정하는 데 매우 중요합니다!
조인 관계 설정
테이블을 만들었다면, 이제 이 테이블들을 연결해야 합니다. 이 테이블을 연결하는것을 Join이라고 합니다.
ERDCloud에서 Join을 사용하는 방법은 좌측 메뉴박스에서 선택할 수 있습니다.
여기서 제가 자주 사용하는 조인은 1:1 관계와 1:N 관계 입니다.
- 1:N (일대다) 관계: 가장 흔한 관계로, 하나의 부모 테이블 데이터가 여러 개의 자식 테이블 데이터를 가질 수 있는 관계입니다. (예: 아티스트 한 명은 여러 곡의 노래를 가질 수 있습니다.)
- 1:1 (일대일) 관계: 하나의 테이블 데이터가 다른 테이블의 데이터 하나와만 관계를 맺는 경우입니다. (예: 사용자 정보와 사용자 상세 프로필)
지금까지 작성한 ERD는 1:1 관계는 없고 조인 테이블을 통한 1:N관계만 있기에 테이블 끼리 관계를 연결하면 자식 테이블에는 부모 테이블의 기본 키를 참조하는 외래 키(Foreign Key, FK)가 자동으로 생성되는 것을 볼 수 있습니다. 이 외래 키를 통해 테이블 간의 데이터가 연결되고, 중복 없이 데이터를 관리할 수 있게 됩니다.
조인을 하는 방법은 어렵지 않습니다. 좌측 메뉴박스에서 조인 메뉴를 클릭한 후 조인하고 싶은 테이블을 클릭하고 대상 테이블을 클릭하면 `Identifying Relationship(실선)`과 `Non - Identifying Relationship(점선)` 버튼이 나오게 됩니다. `Identifying Relationship(실선)`을 간략하게 말하자면 꼭 시작 테이블의 데이터가 존재해야만 대상 테이블의 데이터가 존재할 수 있는거고 `Non - Identifying Relationship(점선)`는 시작 테이블의 데이터가 없어도 대상 테이블의 데이터가 존재할 수 있는겁니다.
저는 모두 시작 테이블의 데이터가 필요한 테이블이기에, 모두 `Non - Identifying Relationship(점선)` 로 조인관계를 만들도록 하겠습니다. 그렇게 만들어진 테이블 이미지 입니다.
그런데 이걸 이해하는 비 개발자가 얼마나 많을까요? 대부분 "음... 조인 관계 설정, 생각보다 복잡한데요?" 🤯 할겁니다.
괜찮습니다! 만약 이 부분이 어렵게 느껴진다면, 일단 각 테이블의 역할과 주요 데이터만 명확히 정의하는 데 집중하세요.
AI가 여러분의 든든한 조력자가 되어줄 수 있으니까요!
🤖 AI에게 ERD 검토 및 조인 관계 설정 도움받기
자, 이제 우리가 직접 구상하고 그린 ERD 초안을 AI에게 보여주고 피드백을 받아볼 시간입니다!
ERD 이미지로 저장하기
- ERD Cloud 편집 화면 오른쪽 메뉴에서 스냅샷(카메라 아이콘)을 클릭합니다.
- 생성된 스냅샷 미리보기 창에서 마우스 오른쪽 버튼을 클릭하고 다른 이름으로 이미지 저장을 선택하여 ERD를 이미지 파일(PNG 등)로 저장합니다.
Gemini에게 ERD 분석 및 조인 관계 설정 요청하기
- Gemini 웹사이트(https://gemini.google.com/app)에 접속합니다.
- 저장한 ERD 이미지를 업로드하고, 다음과 같이 요청해 보세요.
"안녕하세요, Gemini! 제가 데이터베이스 ERD 초안을 만들었습니다. 이 ERD 이미지를 분석해서 테이블 간의 조인 관계를 더 명확하게 설정하는 데 도움을 주실 수 있나요? 각 테이블의 역할은 다음과 같습니다: (각 테이블에 대한 간단한 설명 추가)"
Gemini와 대화를 나누다 보면, 미처 생각하지 못했던 부분이나 잘못 설계된 부분을 발견할 수도 있고, 더 효율적인 조인 관계에 대한 아이디어를 얻을 수도 있습니다. 저도 Gemini의 도움으로 노래 테이블의 필드 이름을 더 명확하게 수정하고, 관계 설정을 다듬을 수 있었답니다!
이렇게 AI의 도움까지 받아 최종적으로 ERD를 완성했습니다! 🎉
✨ 마무리하며: ERD, 이제 AI와 함께 더 스마트하게!
데이터베이스 ERD 설계, 더 이상 막막하게 느껴지지 않으시죠?
핵심은 여러분이 직접 서비스의 데이터 구조를 고민하고 초안을 만드는 것, 그리고 AI를 똑똑한 조력자로 활용하여 완성도를 높이는 것입니다.
이제 잘 만들어진 ERD가 있으니, 다음 단계는 무엇일까요?
바로 이 ERD를 기반으로 실제 데이터베이스 테이블을 만드는 일입니다!
다음 편에서는 AI와 함께 Supabase에 테이블을 쉽고 빠르게 생성하는 방법에 대해 알아보겠습니다.
오늘 내용이 여러분의 프로젝트 진행에 조금이나마 도움이 되었기를 바랍니다.
혹시 ERD 설계나 AI 활용에 대해 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
여러분의 멋진 서비스 탄생을 펭귄 뮤지엄이 항상 응원합니다! 🐧👍
다음 편도 많은 관심 부탁드립니다!
'사이드 프로젝트' 카테고리의 다른 글
미워도 다시한번, 나의 사이드 프로젝트 도전기! (3) | 2025.06.05 |
---|---|
노래방 일본 노래 검색 서비스 | 제 4부 - AI를 이용해 ERD로 Prisma 코드 추출하기 (0) | 2025.06.04 |
노래방 일본 노래 검색 서비스 | 제 2부 - 디자이너 없이 디자인 하기(feat. google stitch를 이용하여 AI로 디자인하기) (0) | 2025.06.02 |
노래방 일본 노래 검색 서비스 | 제 1부 - 프로젝트 구상 (1) | 2025.06.01 |
프론트엔드 개발자의 바이브 코딩 실패기 (0) | 2025.05.31 |