본문은 [웹 프로그래머를 위한 데이터베이스를 지탱하는 기술]를 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
1. 데이터베이스가 없으면 무엇이 곤란한가?
1) 대량의 데이터 중에서 필요한 것을 빨리 반환할 수 없다 (성능 X)
- 수천만 건 이상의 데이터를 선형 탐색하는 것은 그 자체로 시간이 오래 소요될 뿐만 아니라 데이터가 증기함에 따라 데이터의 양과 비례하여 탐색 시간이 증가한다
- 따라서 보다 효율적인 데이터 구조로 관리되어야 하는데, 데이터베이스는 B+Tree 인덱스나 해시 인덱스와 같은 구조를 통해 빠른 검색을 지원한다
2) 대량의 데이터를 메모리 내에서만으로는 취급할 수 없다 (안정성 X)
- 메모리의 크기는 한정되어 있으므로 대량의 사용자를 취급하는 것은 어렵다
- 또, 메모리는 휘발성이므로 시스템 다운 등이 일어났을 때 유실의 우려가 있으며, 이에 대한 복구방법도 마땅치 않다
- 데이터베이스는 기본적으로 디스크를 활용한 데이터 구조를 전제하고 있다
- 최근엔 메모리에 띄우는 형식의 데이터베이스도 많이 사용되고 있다(이 책이 나온지 벌써 10년이 된 책이라..)
3) 장애가 발생했을 때 빠른 복구가 어렵다 (내장애성 X)
- 단순 백업은 기본적으로 다음과 같은 문제를 지닌다
- 최종 백업 이후에 업데이트된 결과를 되돌릴 수 없다
- 백업 데이터를 다시 되돌리는 처리에도 시간이 걸리고, 그 기간 동안은 다운 타임이 된다
- 백업 중에 섣불리 업데이트를 하면 백업이 손상될 위험이 있다
- 백업 파일의 크기나 백업을 만들고, 복원하는 데에도 상당한 시간이 소요된다
- 이 외에도 데이터의 일관성도 보장해야 하는데, 이를 위해선 트랜잭션을 구현해야 한다
- 데이터베이스는 탄력성을 고려하여 설계되어 있고, 쓰기 도중에 크래쉬하는 경우에도 다시 시작할 때에는 자동으로 장애 부분을 감지하여 일관성 있는 상태로 복구시켜준다
- 이는 트랜잭션을 기반으로 하고 있다
4) 병렬성 제어가 어렵다
- 여러 사람이 이용하는 애플리케이션에선 배타 제어가 필수적인데, 이는 기술적으로 어려운 포인트다
- 데이터베이스를 사용하면 데이터 세트의 배타 제어를 쉽게 할 수 있다
5) 데이터 무결성을 보장하는 것은 어렵다
- 데이터 무결성을 보장하는 것은 병렬성 제어와 강하게 연관되어 있다
- 즉, 데이터 자체가 불일치를 일으키지 않게 하는 구조를 만드는 것이 중요하다
- DBMS는 영속성 있는 고유 ID를 빠르게 할당하는 기능을 가지고 있으며, 개체 무결성과 참조 무결성 제약 조건 기능 등을 지원한다
- 개체 무결성 제약(entity integrity constraint): 기본 키에 속해 있는 애트리뷰트는 null 값을 가질 수 없다
- 참조 무결성 제약(referential integrity constraint): 외래 키 값은 null이거나 참조된 릴레이션의 기본 키 값과 동일해야 한다
'책 > 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술' 카테고리의 다른 글
[웹 프로그래머를 위한 데이터베이스를 지탱하는 기술] 6장: 트랜잭션과 무결성ㆍ무정지성 (1) | 2023.01.04 |
---|---|
[웹 프로그래머를 위한 데이터베이스를 지탱하는 기술] 5장: 데이터베이스는 어떤 때에 크래쉬되는가? (0) | 2022.12.11 |
[웹 프로그래머를 위한 데이터베이스를 지탱하는 기술] 4장: SQL 문의 특징과 이를 잘 다루는 법 (0) | 2022.12.06 |
[웹 프로그래머를 위한 데이터베이스를 지탱하는 기술] 3장: 테이블 설계와 릴레이션 (0) | 2022.11.29 |
[웹 프로그래머를 위한 데이터베이스를 지탱하는 기술] 2장: 인덱스로 고속 액세스 실현하기 (0) | 2022.11.11 |