정규화
데이터베이스 설계는 어떤 데이터를 어떻게 저장할 것인가에 대한 결정하는 것입니다
그 중에서도 '정규화’와 '반정규화’는 데이터베이스의 효율성과 성능에 큰 영향을 미칩니다
정규화(Normalization)
정규화란 '중복을 최소화하는 것’입니다.
간단하게 말해서, 동일한 데이터를 여러 곳에 반복하여 저장하지 않는 원칙입니다.
이는 데이터베이스 내에서 데이터의 일관성을 유지하는 데 중요합니다.
예를 들어, 사용자의 주소 정보가 변경되었을 때 정규화된 데이터베이스에서는 해당 사용자의 주소 정보를 단 한 번만 변경하면 되지만, 중복이 허용된 데이터베이스에서는 모든 중복된 주소 정보를 찾아 변경해야 합니다.
하지만 이 방식은 트레이드 오프가 있습니다.
데이터를 읽을 때 항상 원본 데이터를 참조해야 하기 때문에 조회 성능이 저하될 수 있습니다.
다시 말해, 정규화는 '테이블 설계 관점에서 조회와 쓰기 사이의 트레이드 오프라고 볼 수 있습니다.
반정규화(Denormalization)
반면, 반정규화는 '중복을 허용하는 것’입니다. 이는 데이터베이스 내에서 동일한 데이터를 여러 곳에 저장하도록 허용합니다.
이 방식의 주요 장점은 데이터의 조회 속도를 향상시키는 것입니다.
원본 데이터를 참조하지 않고도 필요한 정보를 얻을 수 있기 때문입니다.
그러나 이 방법도 트레이드 오프가 존재합니다.
데이터의 중복으로 인해 데이터의 일관성 유지가 어려워집니다.
데이터가 변경될 때마다 모든 중복 데이터를 찾아 변경해야 하며, 이 과정에서 데이터 불일치 문제가 발생할 수 있습니다.
적절한 타이밍
따라서, 정규화와 반정규화를 선택하는 것은 시스템의 요구 사항과 성능 목표에 따라 달라집니다.
데이터의 일관성을 우선시하는 시스템에서는 정규화를, 읽기 성능을 중요시하는 시스템에서는 반정규화를 선택하는 것이 일반적입니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
조회 최적화를 위한 인덱스 (2) | 2023.06.02 |
---|---|
DTO(Data Transfer Object) (0) | 2023.06.02 |
소프트 파싱과 하드 파싱 (0) | 2023.06.01 |
MySQL 아키텍처 (0) | 2023.06.01 |
대용량 시스템 아키텍처 (0) | 2023.06.01 |