Interview Question

[Interview Question] 정규화와 비정규화의 차이를 설명해주세요.

sagecode 2025. 9. 1. 22:00

관계형 데이터베이스에서 정규화는 데이터를 체계적으로 쪼개어서 데이터의 일관성과 정합성을 보장하기 위한 방법입니다. 예를 들어, 학생이 여러 과목을 수강한다고 했을 때, 학생과 과목 정보를 한 테이블에 모두 넣어버리면 이름이나 과목명이 여러 번 반복 저장되면서, 한 번의 수정이 전체 데이터에 반영되지 않는 문제가 생깁니다. 정규화를 적용하면 학생, 과목, 수강과 같이 테이블을 나누어 관리하게 되고, 이를 통해 데이터 중복을 최소화하고 무결성을 지킬 수 있습니다.

하지만 이렇게 테이블을 세분화하게되면 데이터를 가져올 때, 여러 테이블을 JOIN 해야하는 상황이 발생해 성능이 떨어질 수 있다는 단점이 있습니다.

 

관계형 데이터베이스에서 비정규화는 성능 최적화를 위해 의도적으로 데이터를 중복 저장하거나 테이블을 합치는 과정입니다. 즉, 정규화가 지나치게 적용되어 조회 시 JOIN 연산이 많아지고 성능 저하가 발생한다면, 이를 해소하기 위해 일부 데이터를 중복 허용하는 것입니다. 예를 들어, 자주 조회되는 보고서를 위해 학생 이름과 과목명을 별도의 테이블에 합쳐 저장한다면, 조회 시에는 빠르게 결과를 얻을 수 있습니다. 하지만 데이터가 여러 곳에 중복 저장되므로 갱신이나 삭제 시 일관성이 깨질 위험이 있습니다.