일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring Boot
- 함수형 객체지향형 차이점
- 인덱스의 역할
- orm(object-relational mapping)의 장단점
- acid 특성
- 파티셔닝의 종류
- 객체지향 프로그래밍
- nat의 장단점
- 데이터베이스 락(lock)의 종류와 동작 방식
- join의 종류
- REST API
- 샤딩(sharding)과 파티셔닝(partitioning)의 개념
- 트리와 그래프
- Spring
- nat의 작동 방식
- 트랜잭션의 acid 특성
- 인덱스의 장단점
- nat(network address translation)의 역할과 사용 이유
- 정규화와 비정규화의 개념 및 장단점
- 트리 그래프 차이
- nat의 유형
- rest와 soap의 차이점
- spring rest api 설정
- 데이터 바인딩
- rdbms와 nosql의 차이점
- 트리 그래프 차이점
- Spring REST API
- 인덱스의 역할과 사용 이유
- 린크드 리스트
- 로드 밸런서의 종류
- Today
- Total
♠개발자의 작은 서재♠
정규화(Normalization)와 비정규화(Denormalization)의 개념 및 장단점 본문
정규화(Normalization)와 비정규화(Denormalization)의 개념 및 장단점
♠디지털 모험일지♠ 2024. 10. 29. 20:111. 정규화(Normalization)
개념:
정규화는 데이터베이스에서 중복 데이터를 줄이고 데이터 일관성을 유지하기 위해 데이터를 여러 테이블로 나누는 과정입니다. 데이터가 한 곳에만 저장되도록 설계하여, 데이터 수정 시 다른 곳에 반영할 필요 없이 한 곳만 업데이트하면 됩니다. 이를 통해 데이터 무결성을 높이고, 저장 공간을 효율적으로 사용할 수 있습니다.정규화 과정 (Normalization Forms):
- 제 1 정규형 (1NF): 각 열에 하나의 값만 저장하고, 중복된 열을 제거합니다.
- 제 2 정규형 (2NF): 기본 키에 의존하지 않는 열을 별도의 테이블로 분리합니다.
- 제 3 정규형 (3NF): 기본 키가 아닌 열 간의 종속성을 제거하여 독립적인 테이블로 나눕니다.
쉽게 설명: 정규화는 데이터를 깔끔하게 정리해 중복되지 않도록 테이블을 나누는 과정입니다. 마치 문서에서 중요한 정보를 분류하여 필요한 곳에만 저장하는 것과 비슷합니다.
예시:
예를 들어, 고객과 주문 정보를 저장하는 데이터베이스가 있다고 가정해 보겠습니다.-- 정규화 전 (중복 데이터 포함) CREATE TABLE orders ( order_id INT, customer_name VARCHAR(100), customer_address VARCHAR(100), product_name VARCHAR(100) ); -- 정규화 후 (데이터를 나눔) CREATE TABLE customers ( customer_id INT, customer_name VARCHAR(100), customer_address VARCHAR(100) ); CREATE TABLE products ( product_id INT, product_name VARCHAR(100) ); CREATE TABLE orders ( order_id INT, customer_id INT, product_id INT );
정규화 전 테이블에는 고객 이름과 주소가 여러 주문마다 중복되어 있지만, 정규화 후에는
customers
,products
,orders
테이블로 나누어 중복을 줄이고 데이터 일관성을 높였습니다.장점:
- 데이터 중복 최소화: 데이터가 여러 곳에 중복되지 않아 수정할 때 실수를 줄일 수 있습니다.
- 데이터 무결성 유지: 데이터가 일관되게 유지되므로, 특정 값이 바뀌면 한 곳만 수정하면 됩니다.
- 저장 공간 절약: 중복된 데이터가 줄어들어 저장 공간이 효율적으로 사용됩니다.
단점:
- 복잡한 조회 쿼리: 여러 테이블을 참조해야 하므로, 데이터를 조회할 때 JOIN을 사용해 복잡해질 수 있습니다.
- 성능 저하 가능성: JOIN이 많아지면 쿼리 성능이 저하될 수 있습니다.
2. 비정규화(Denormalization)
개념:
비정규화는 성능 향상을 위해 데이터를 일부러 중복하여 저장하는 과정입니다. 정규화로 인해 데이터가 여러 테이블로 나눠졌을 때, 빈번한 JOIN 연산이 성능을 저하시킬 수 있습니다. 이럴 때 비정규화를 통해 특정 데이터를 중복 저장하여 JOIN 없이 한 테이블에서 필요한 정보를 조회할 수 있게 합니다.쉽게 설명: 비정규화는 "필요한 정보를 한곳에 모아서 쉽게 접근하도록 하는" 과정입니다. 마치 복잡한 서류를 한 번에 확인하기 위해 필요한 정보들을 여러 곳에 복사해 두는 것과 비슷합니다.
예시:
앞선 예시의 정규화된 테이블을 다시 비정규화해 보겠습니다. 예를 들어,orders
테이블에서 고객 정보와 제품 이름을 자주 조회해야 한다면,orders
테이블에 고객 이름과 제품 이름을 다시 추가하여 JOIN을 줄일 수 있습니다.-- 비정규화 후 (데이터 중복 포함) CREATE TABLE orders ( order_id INT, customer_id INT, customer_name VARCHAR(100), -- 중복된 고객 이름 customer_address VARCHAR(100), -- 중복된 고객 주소 product_id INT, product_name VARCHAR(100) -- 중복된 제품 이름 );
이렇게 하면 고객 이름이나 제품 이름을 조회할 때
customers
와products
테이블을 JOIN하지 않아도 됩니다. 다만, 고객 정보가 바뀔 경우orders
테이블의 데이터도 같이 수정해야 합니다.장점:
- 조회 속도 향상: 필요한 정보가 한 테이블에 모두 있어서 JOIN 없이도 빠르게 데이터를 조회할 수 있습니다.
- 간단한 쿼리: 여러 테이블을 참조할 필요가 없기 때문에 쿼리가 간단해집니다.
단점:
- 데이터 중복 증가: 여러 테이블에 중복된 데이터가 저장되므로, 데이터 일관성을 유지하기가 어려울 수 있습니다.
- 데이터 수정 복잡성: 중복된 데이터가 많아지면서 한 곳의 데이터가 수정되면 관련된 모든 곳에서 동일한 데이터를 수정해야 하는 부담이 생깁니다.
- 저장 공간 낭비: 중복 데이터로 인해 저장 공간이 더 많이 필요할 수 있습니다.
3. 정규화와 비정규화의 선택 기준
- 정규화가 적합한 경우:
- 데이터 일관성이 매우 중요한 경우, 즉 데이터가 자주 변경되어 여러 곳에서 동기화가 필요할 때.
- 데이터가 큰 규모가 아니라서 성능 이슈가 크지 않은 경우.
- 저장 공간이 제한적이고, 데이터를 효율적으로 관리해야 하는 경우.
- 비정규화가 적합한 경우:
- 읽기 속도가 중요한 경우, 즉 조회 성능이 중요하고, 업데이트가 자주 발생하지 않는 경우.
- 대량의 데이터를 다루는 시스템으로, JOIN으로 인해 조회 성능이 크게 저하되는 경우.
- 데이터의 변경이 적고, 주로 조회만 일어나는 시스템인 경우.
정규화와 비정규화는 서로 상반된 개념이지만, 데이터 일관성, 저장 공간, 성능 요구 사항을 고려하여 혼합해서 사용하는 경우가 많습니다.
'IT 면접 질문 총정리!! > 데이터베이스' 카테고리의 다른 글
데이터베이스 락(lock)의 종류와 동작 방식 (0) | 2024.10.29 |
---|---|
트랜잭션의 ACID 특성 (1) | 2024.10.29 |
조인의 종류(예: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)와 차이점 (0) | 2024.10.29 |
인덱스의 역할과 사용 이유 (0) | 2024.10.29 |
RDBMS와 NoSQL의 차이점 (0) | 2024.10.29 |