개발자 기술면접 꼬리물기 질문
  • Welcome
  • 01 Java
    • 01-01. Generic
    • Garbage Collection
    • 자료형과 객체 비교
    • 힙(Heap)과 메모리(Memory)
    • JDK 버전과 JRE
    • 스레드(Thread)
    • 예외(Throwable)
    • Call By Value와 Call By Reference
    • String, equals, StringBuffer
    • Thread와 비동기
  • 02 Spring
    • 02-01. Spring 동작 방식
    • @Autowired, @RequiredArgsConstructor
    • 인증(Authentication)과 인가(Authorization)
    • 트랜잭션(Transaction)
    • QueryDSL과 SQL Injection
    • SecurityContextHolder
    • @EqualsAndHashCode
  • 알고리즘과 자료구조
    • Set 자료구조
    • 정렬 알고리즘
    • 우선순위 큐 (Priority Queue)
    • DFS와 BFS
    • 힙(Heap) 자료구조
    • 스택(Stack)과 큐(Queue)
    • 암호화 알고리즘
    • LinkedList
    • 자료구조 - 해시 테이블(HashTable)
    • 자료구조 - ConcurrentHashMap
  • 데이터베이스
    • 기본
    • 인덱스 (Index)
    • 정규화 (Normalization)
    • 파티셔닝과 샤딩(Partitioning & Sharding)
    • 트랜잭션(Transaction)과 락(Lock)
    • 덤프(Dump)
    • Redis
    • 격리 수준(MySQL)
  • 네트워크
    • 전송 계층 (Transport Layer)
    • 네트워크 계층 (Network Layer)
    • Http와 Https
    • IP(Internet Protocol)
    • 프록시 서버
    • Http Protocol
    • 소켓(Socket)
    • 로드 밸런싱(Load Balancing)
  • 디자인 패턴
    • 전략 패턴 (Strategy Pattern)
    • 싱글톤 패턴 (Singleton Pattern)
    • 템플릿 메서드 패턴과 전략 패턴
    • 데코레이터 패턴 (Decorator pattern)
  • 웹
    • CORS 정책
    • 동시성 제어
    • N+1 문제
    • 웹 브라우저 동작원리
    • URI, URL, URN
    • 채팅 아키텍처 설계
  • 개발자
    • 개발 방법론 TDD
  • 운영체제
    • JIT & AOT 컴파일
    • 컨텍스트 스위칭(Context Switching)
    • 프로세스와 스레드
    • 싱글 스레드와 멀티 스레드
  • 코딩테스트
    • Stack / Queue (스택 / 큐)
    • Heap(우선 순위 큐)
    • DP(동적 계획법)
    • DFS(깊이 우선 탐색)
    • BFS(너비 우선 탐색)
    • Greedy(그리디 알고리즘)
    • 해시(Hash)
    • 투 포인터 알고리즘
    • Shortest path
    • 수학적 사고
Powered by GitBook
On this page
  • Q. 데이터베이스의 정규화(Normalization)은 무엇이며, 왜 필요한가요?
  • Q. 그럼 그러한 성능 저하 문제를 해결할 수 있는 방법은 있나요?
  • Q. 정규화는 어떠한 방식으로 진행하나요?
  1. 데이터베이스

정규화 (Normalization)

Q. 데이터베이스의 정규화(Normalization)은 무엇이며, 왜 필요한가요?

데이터베이스 정규화는 데이터 중복을 최소화하고 데이터 무결성을 보장하기 위해 데이터베이스 테이블을 설계하는 과정입니다. 이를 통해 데이터가 일관되게 유지되고, 데이터 변경 시 발생할 수 있는 이상 현상(Anomalies)을 방지할 수 있습니다. 하지만 과도한 정규화를 하게 된다면 테이블 간의 관계가 복잡해질 수 있고, 조인 연산이 많아져 데이터 조회 성능이 저하될 수 있습니다.


Q. 그럼 그러한 성능 저하 문제를 해결할 수 있는 방법은 있나요?

성능 저하 문제를 해결하기 위해서는 반정규화(Denormalization)를 사용할 수 있습니다. 비정규화는 데이터 중복을 허용하면서 일부 테이블을 병합하거나 조인을 줄여 성능을 개선하는 방법입니다. 반정규화를 사용하면 Join으로 인한 읽기성능 감소를 해결하여 읽기 속도를 증가 시킬 수 있습니다. 따라서 데이터베이스를 설계할 때는 정규화와 비정규화를 적절히 사용하여 설계해야합니다.


Q. 정규화는 어떠한 방식으로 진행하나요?

정규화는 여러 단계에 걸쳐 진행되며, 각 단계마다 특정한 이상 현상을 방지하는 규칙을 적용합니다.

  1. 제 1 정규형 - 컬럼에 여러 값이 저장되지 않도록 여러 컬럼이나 행으로 데이터를 분리합니다.

  2. 제 2 정규형 - 제 1 정규형을 만족하고, 기본 키의 일부에만 종속된 컬럼이 있다면, 이를 별도의 테이블로 분리하여 종속성을 제거합니다.

  3. 제 3 정규형 - 제 2 정규형을 만족하고, 기본 키가 아닌 컬럼들 간의 종속성을 제거합니다.

  4. 보이스 코드 정규형(BCNF) - 제 3 정규형에서 추가로, 모든 결정자가 후보 키이어야 한다는 조건을 만족하도록 테이블을 설계합니다. 이 뒤로 제 4 정규형과 제 5 정규형이 있지만, 보통 BCNF에서 마무리됩니다.

Previous인덱스 (Index)Next파티셔닝과 샤딩(Partitioning & Sharding)

Last updated 8 months ago