JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

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

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

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

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

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
DB 설계
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 DB 설계 입문/실전
slug
rule-6-find-hidden-duplication
type
post
updatedAt
Dec 6, 2025 05:57 AM

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

숨어있는 중복이 무슨 뜻인지 설명하기 위해 예시를 바로 보자.
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
author
category
DB 설계
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 DB 설계 입문/실전
slug
type
series-footer
updatedAt
Dec 6, 2025 05:57 AM
📎
이 글은 비전공자도 이해할 수 있는 DB 설계 입문/실전 강의의 수업 자료 중 일부입니다.