블로그로 돌아가기

바이브코딩 전에 30분, AI와 함께 DB 설계하는 법 (1:N·N:M)

바이브코딩 결과물의 품질은 프롬프트가 아니라 데이터 모델에서 갈립니다. 관계형 데이터베이스의 네 가지 관계(1:1 · 1:N · N:1 · N:M)를 예시로 정리하고, AI에게 코드를 맡기기 전 30분 동안 관계표를 만드는 4단계 절차를 소개합니다.

에그코드
2026년 8월 15일
9 min read
#바이브코딩#클로드코드#클로드#데이터베이스#관계형데이터베이스#SQLD#AI#커서AI#ERD#코딩#스타트업#IT개발#백엔드#MVP개발#에그코드
바이브코딩 전에 정해야 할 데이터베이스 관계 네 가지를 정리한 표지 이미지
관계는 1:1 · 1:N · N:1 · N:M 네 가지뿐입니다

바이브코딩으로 화면까지는 잘 나옵니다.

클로드코드로 시키든 커서로 시키든 비슷합니다.

문제는 기능을 하나 더 붙일 때 생깁니다.

멀쩡하던 부분이 같이 무너집니다.

프롬프트를 더 정교하게 써도 똑같습니다.

원인이 프롬프트가 아니라 그 밑에 있기 때문입니다.

데이터가 어떻게 엮여 있는지, 그 구조입니다.


AI는 안 알려주면 제일 단순하게 잡습니다

AI는 요구사항 문장에서 테이블 관계를 추론합니다.

"회원이 주문을 한다"는 말에서 구조를 만들어냅니다.

문제는 문장에 안 적힌 부분입니다.

한 주문에 상품이 여러 개 들어갈 수 있는지.

한 상품이 여러 주문에 걸칠 수 있는지.

이걸 안 정해주면 가장 단순한 형태로 채웁니다.

당장은 돌아갑니다.

주문 상세를 나누는 순간 테이블을 갈아엎어야 합니다.

관계는 네 가지뿐입니다.

30분이면 다 정할 수 있습니다.

관계판별 질문의 답예시외래키 위치
1:1양쪽 다 아니오회원 — 결제정보한쪽 + 중복 금지
1:N한쪽만 예회원 — 주문 여러 건항상 N쪽
N:11:N을 반대편에서 본 것주문 — 회원항상 N쪽
N:M양쪽 다 예학생 — 강의중간 테이블에 2개
1대1 1대다 다대1 다대다 네 가지 관계 유형을 한눈에 비교한 이미지
어느 쪽이 여러 개인가, 그것만 정하면 됩니다

1:1 — 나눌 이유가 있을 때만

한 행이 저쪽 한 행하고만 짝을 이룹니다.

회원 한 명에 프로필 하나가 그렇습니다.

그런데 이건 대부분 한 테이블로 합쳐도 됩니다.

굳이 나누는 경우는 세 가지입니다.

결제정보처럼 접근을 따로 막아야 할 때.

거의 안 읽는 큰 데이터를 떼어놓을 때.

있을 수도, 없을 수도 있는 정보일 때.

"왜 나누는가"에 답이 없으면 합치는 게 맞습니다.

한쪽 외래키에 중복 금지 조건을 걸어 만듭니다.

1대1 관계를 테이블로 나누는 세 가지 기준을 정리한 이미지
보안 · 성능 · 선택성 — 셋 중 하나에 해당할 때만 나눕니다

1:N과 N:1 — 사실 같은 관계입니다

여기서 제일 많이 헷갈립니다.

회원 하나가 주문을 여러 개 갖습니다. 1:N입니다.

주문 여러 개가 회원 하나에 붙습니다. N:1입니다.

같은 관계를 어느 쪽에서 보느냐의 차이입니다.

둘을 다른 관계로 착각해 테이블을 두 번 만들면 데이터가 갈라집니다.

실무에서 정할 건 하나뿐입니다.

외래키를 어디에 두는가.

답은 항상 N쪽입니다.

주문 테이블이 회원 번호를 들고 있습니다.

반대로 회원 쪽에 주문 목록을 넣으려 하면 구조가 깨집니다.

1대다와 다대1이 같은 관계이며 외래키는 N쪽에 둔다는 것을 설명한 이미지
외래키는 항상 N쪽 — 여기서는 주문 테이블입니다

N:M — 중간 테이블 없이는 표현이 안 됩니다

양쪽 다 여러 개인 경우입니다.

학생 한 명이 강의를 여러 개 듣습니다.

강의 하나에 학생이 여러 명 있습니다.

관계형 데이터베이스는 이걸 직접 표현하지 못합니다.

가운데 테이블을 하나 세워야 합니다.

수강신청 테이블을 만들어 1:N 두 개로 쪼갭니다.

바이브코딩이 자주 틀리는 지점이 여기입니다.

강의 목록을 한 칸에 쉼표로 이어 붙여버립니다.

돌아가긴 합니다.

"이 강의 듣는 학생 수"를 세는 순간 막힙니다.

그리고 중간 테이블은 대개 자기 정보를 갖습니다.

신청일, 성적, 출석 여부가 붙습니다.

처음부터 독립된 테이블로 잡아두는 편이 안전합니다.

다대다 관계를 중간 테이블로 분해하는 구조를 설명한 이미지
학생 —1:N— 수강신청 —N:1— 강의 로 분해합니다

AI에게 넘기기 전 30분

순서는 이렇습니다.

하나, 명사를 뽑습니다.

회원, 주문, 상품, 리뷰. 이게 테이블 후보입니다.

둘, 두 개씩 짝지어 두 번 묻습니다.

"A 하나가 B를 여러 개 가질 수 있나?"

방향을 바꿔 한 번 더 묻습니다.

셋, 답에 따라 관계가 정해집니다.

둘 다 예면 N:M, 중간 테이블 이름까지 정합니다.

한쪽만 예면 1:N, 외래키는 N쪽입니다.

둘 다 아니오면 1:1, 나눌 이유를 다시 확인합니다.

넷, 이 표를 먼저 주고 코드를 시킵니다.

바이브코딩은 그다음입니다.

AI에게 코드를 맡기기 전 30분 동안 관계를 정하는 4단계 절차 이미지
테이블 5개면 짝은 10쌍 — 질문 20번이면 끝납니다

마치며

관계를 잡아둔다고 설계가 끝나는 건 아닙니다.

인덱스도, 정규화 수준도 남아 있습니다.

조회가 잦은 서비스는 일부러 중복을 두기도 합니다.

다만 관계를 틀리면 뒤의 결정이 전부 흔들립니다.

AI는 시키는 대로 잘 만듭니다.

무엇을 시킬지는 사람이 정해야 합니다.

바이브코딩에 30분 먼저 쓰면 몇 주를 아낍니다.

관계 설계를 마친 뒤 남는 과제와 우선순위를 정리한 이미지
관계 다음은 인덱스 · 정규화 수준 · 의도적 중복입니다

함께 읽어보세요 — 결과가 흔들리지 않는 바이브코딩 실무 순서 8단계 · 백엔드 없이 안 되는 Supabase의 5가지 한계 · 개발사 대표가 말하는 AI 코딩의 3가지 함정 · 에그코드 MVP 개발 서비스


문의하기

MVP 개발, 어디서부터 시작해야 할지 모르겠다면?

무료 MVP 견적 받기
카카오톡 문의