시스템 설계 · 중급
실무에서 데이터베이스를 설계할 때, 정규화(Normalization)와 비정규화(Denormalization)를 어떤 기준으로 적용해야 하며, 성능상의 이유로 비정규화를 고려해야 하는 상황과 그 단점은 무엇인가요?
힌트 · 정규화는 데이터 중복 제거 및 일관성 확보가 목적이며, 비정규화는 조인 감소 및 쿼리 성능 향상이 목적입니다. 트레이드오프를 이해하고 데이터 중복 및 일관성 저하의 단점을 고려해야 합니다.
정규화비정규화성능조회 성능데이터 무결성
모범답안
데이터베이스 설계 시 정규화와 비정규화는 트레이드오프 관계에 있습니다. 정규화는 데이터 중복을 최소화하고 데이터 무결성을 확보하는 데 유리하지만, 잦은 조인 연산으로 인해 조회 성능이 저하될 수 있습니다. 반면 비정규화는 조인 연산을 줄여 조회 성능을 향상시키지만, 데이터 중복이 발생하고 데이터 일관성이 깨질 위험이 있습니다.
일반적으로는 정규화를 우선적으로 적용하여 데이터 모델을 설계합니다. 하지만 특정 테이블에 대한 조회 성능이 매우 중요하고, 데이터 변경이 자주 발생하지 않는 경우에는 비정규화를 고려할 수 있습니다. 예를 들어, 상품 정보 테이블에서 상품명, 가격, 상세 설명 등 자주 함께 조회되는 속성들을 하나의 테이블에 모아두면 조인 없이 빠르게 데이터를 가져올 수 있습니다.
비정규화의 단점은 데이터 중복으로 인한 저장 공간 증가, 데이터 불일치 가능성 증가, 데이터 수정 시 여러 테이블을 업데이트해야 하는 번거로움 등이 있습니다. 따라서 비정규화를 적용하기 전에는 성능 개선 효과와 단점을 신중하게 비교 분석해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 데이터베이스 설계 면접 질문
- 데이터베이스 테이블의 컬럼에 적절한 데이터 타입을 선택하는 것이 왜 중요한지, 그리고 어떤 점을 고려해야 하는지 설명해주세요.
- 데이터베이스 인덱스(Index)는 무엇이며, 어떤 상황에서 주로 사용하고 어떤 이점을 제공하나요?
- "한 명의 고객은 여러 개의 주문을 할 수 있다"는 비즈니스 요구사항을 관계형 데이터베이스로 설계할 때, 어떤 테이블과 컬럼을 사용하여 1:N(일대다) 관계를 표현할 수 있을까요?
- 특정 테이블의 쿼리 성능을 최적화하기 위해 인덱스를 설계해야 합니다. 어떤 인덱스 종류(예: B-tree, Hash, 클러스터링, 논클러스터링)를 고려해야 하며, 복합 인덱스(Composite Index)는 언제 유용하게 사용될 수 있는지 설명해 주세요.
- 회원 관리 시스템을 설계할 때, '이메일 주소'와 '전화번호'를 저장하기 위한 데이터 타입을 선택해야 합니다. 적절한 데이터 타입과 길이를 선택하는 기준은 무엇이며, 잘못된 선택이 성능 및 저장 공간에 미치는 영향은 무엇인가요?
- 외래 키(Foreign Key) 제약조건을 설정할 때, 'ON DELETE CASCADE', 'ON DELETE SET NULL', 'ON DELETE RESTRICT' 등의 옵션 중 어떤 경우에 각 옵션을 선택해야 하는지 구체적인 시나리오를 들어 설명해 주세요.