JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
과외유튜브블로그후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 DB 설계 입문/실전

DB 설계 전 필수로 알아야 하는 개념

데이터베이스 모델링(Datbase Modeling)이란?
관계형 데이터베이스(RDBMS)의 기본 구성
PK(기본키), FK(외래키)
데이터베이스 네이밍 규칙

DB 설계의 핵심 원칙 및 전체 과정

DB 설계할 때 이런 개념들 몰라도 아무 문제 없습니다!
DB 설계 시 꼭 기억해야 할 핵심 원칙 1가지
DB 설계 전체 과정
저장할 데이터 파악하기 /

복잡한 개념을 몰라도 누구나 따라할 수 있는, 마법의 DB 설계 규칙 6가지

[규칙 1] 한 칸에는 한 가지 정보만 들어가도록 만들어라 - 1
[규칙 1] 한 칸에는 한 가지 정보만 들어가도록 만들어라 - 2
[규칙 2] 어떤 테이블에 FK를 넣어도 ‘규칙 1’을 못 지킬 때는 중간 테이블을 하나 더 만들어라
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 1
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 2
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 3
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 4
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 5
[규칙 3] 헷갈릴 땐 관계(1:1, 1:N, N:M)를 파악해봐라 - 6
[규칙 4] 데이터 중복이 발생하는 컬럼이 있는 지 확인해라
[규칙 5] 가짜 중복과 진짜 중복을 구별해라
[규칙 6] 숨어있는 중복을 찾아라

실전처럼 DB 설계 해보기

[실습] 요구사항을 보고 DB 설계해보기 - JSCODE 커뮤니티
[실습] 요구사항을 보고 DB 설계해보기 - JSCODE 쇼핑몰
[실습] 화면 UI 디자인을 보고 DB 설계해보기 - JSCODE 게시판
[실습] 화면 UI 디자인을 보고 DB 설계해보기 - JSCODE 투두리스트
[보충 강의] ERD란 ? / ERD 해석하기

설계한 모델을 실제 DB에 반영하기

설계한 모델을 실제 DB에는 어떻게 반영하나요?
데이터 타입 (Data Type) 실전 활용 지침

DB 설계 Q&A

정규화를 하면 성능이 떨어진다던데요 ?
역정규화는 언제하나요 ?
← 블로그 목록으로 돌아가기

[규칙 6] 숨어있는 중복을 찾아라

JSCODE 박재성
JSCODE 박재성
2026. 03. 29.
author
JSCODE 박재성
category
DB 설계
createdAt
Dec 6, 2025 12:33 PM
isPublic
isPublic
series
비전공자도 이해할 수 있는 DB 설계 입문/실전
slug
rule-6-find-hidden-duplication
type
post
updatedAt
Mar 29, 2026 09:00

✅ 숨어있는 중복을 찾아라.

숨어있는 중복이 무슨 뜻인지 설명하기 위해 예시를 바로 보자.
posts (게시글)
id
제목
내용
좋아요 수
사용자 id (FK)
1
제목1
내용1
2
1
 
users (사용자)
id
이름
1
박재성
2
김지후
 
likes (좋아요)
id
사용자 id (FK)
게시글 id (FK)
1
1
1
2
2
1
 
위 테이블의 구성에서는 임의의 데이터를 넣어봐도 중복 데이터가 발생하는 컬럼이 있진 않다. 하지만 숨어있는 중복이 있다. 숨어있는 중복이 어떤 건지 설명하기 전에 데이터 중복이 발생되는 구조로 설계하면 어떤 게 안 좋은 지 다시 한 번 짚고 넘어가자.
데이터 중복이 발생하게 되면 특정 데이터를 수정하려고 할 때, 그 데이터와 중복되는 모든 데이터를 같이 수정해야 한다. 이 과정에서 실수가 일어날 수도 있다고 했다.
이 관점에서 위 테이블 구성을 다시 보자. 2번 사용자가 1번 게시글의 좋아요를 삭제했다고 해보자. 그러면 likes 테이블에서 데이터만 삭제하면 될 줄 알았는데, 테이블 구성을 다시 보니 게시글의 좋아요 수의 값도 수정해주어야 한다. 결국 특정 데이터를 수정할 때, 다른 데이터도 같이 수정해주어야 하는 상황이다. 데이터 중복이 발생했을 때와 동일한 단점이 발생한다.
따라서 이런 경우를 보고 숨어있는 중복이라고 얘기한다. 숨어있는 중복은 주로 집계(합계, 평균, 최대값 등)의 값에서 많이 나타난다.
 

 
숨은 데이터 중복이 발생하지 않게 만드려면 posts 테이블에서 좋아요 수 컬럼을 없애야 한다. 그러면 누군가는 ‘좋아요 수는 어떻게 구하나요?’를 물어볼 수도 있을 것이다. 그건 likes 테이블을 활용해서 좋아요 수를 카운팅하면 된다.
 
posts (게시글)
id
제목
내용
좋아요 수
사용자 id (FK)
1
제목1
내용1
2
1
 
users (사용자)
id
이름
1
박재성
2
김지후
 
likes (좋아요)
id
사용자 id
게시글 id
1
1
1
2
2
1
📎
이 글은 비전공자도 이해할 수 있는 DB 설계 입문/실전 강의의 수업 자료 중 일부입니다.