데이터베이스 설계 기초 - 정규화부터 인덱스까지

데이터베이스 설계의 중요성

데이터베이스는 대부분의 애플리케이션의 핵심입니다. 40년간 수많은 시스템을 설계해온 저로서는 잘못된 DB 설계가 나중에 큰 문제를 일으킨다고 경고합니다. 초기 설계 실수는 데이터 마이그레이션, 성능 저하, 데이터 무결성 문제로 이어집니다. 시간을 들여 제대로 설계하세요.

정규화(Normalization)

정규화는 데이터 중복을 줄이고 무결성을 높이는 과정입니다. 제1정규형(1NF): 각 컬럼은 원자적 값만 가집니다. 제2정규형(2NF): 부분 함수 종속을 제거합니다. 제3정규형(3NF): 이행적 종속을 제거합니다. 보통 3NF까지 적용하면 충분합니다. 과도한 정규화는 조인을 많이 만들어 성능이 저하될 수 있습니다.

비정규화(Denormalization)

읽기 성능이 중요하면 의도적으로 비정규화합니다. 자주 함께 조회되는 데이터를 중복 저장합니다. 조인을 줄여 쿼리 속도를 높입니다. 하지만 데이터 일관성 유지가 어려워집니다. 업데이트 시 여러 곳을 수정해야 합니다. 읽기가 많고 쓰기가 적은 경우에 적합합니다.

인덱스(Index)

인덱스는 검색 속도를 높이는 자료구조입니다. 책의 색인과 같습니다. WHERE, JOIN, ORDER BY에 사용되는 컬럼에 인덱스를 생성합니다. 복합 인덱스는 여러 컬럼을 포함합니다. 순서가 중요합니다. 인덱스가 많으면 쓰기 성능이 저하됩니다. EXPLAIN으로 쿼리 실행 계획을 확인하세요.

관계형 vs NoSQL

관계형(RDBMS)은 정형 데이터, 트랜잭션, 복잡한 쿼리에 적합합니다. PostgreSQL, MySQL이 대표적입니다. NoSQL은 비정형 데이터, 수평 확장, 유연한 스키마에 적합합니다. MongoDB(문서), Redis(키-값), Cassandra(와이드 컬럼)가 있습니다. 요구사항에 맞게 선택하고, 필요하면 조합하세요(Polyglot Persistence).

댓글

0
첫 번째 댓글을 작성해보세요!
← 목록으로