DB 와 DBMS 차이는 무엇이며, DBMS 는 우리에게 무엇을 제공하는가?
DB는 데이터의 나열, 데이터 그 자체 이다.
DBMS는 데이터에 대한 스키마(테이블) 정의(DDL), 저장 및 분석(DML)
그리고 관리를 제공하는 응용 프로그램이다.
관계형 데이터베이스의 관계는 무엇을 의미하는가?
2차원 데이터베이스 테이블에서 누군가의 기본키가 특정 테이블의 외래 키로 사용 할 수 있는데,
이 경우 두 테이블 간의 관계가 형성된다.
Concurrency Control 동시성 제어란 무엇이며 왜 필요한가?
다중 요청(operation)이 동일 데이터에 접근하더라도
DB의 Integrity(prevents data corruption or inconsistency)가 위배되지 않게 하기 위해 사용한다.
Concurrency Control의 핵심은 Locking Mechanism이고, Pessimistic 과 Optimistic Lock 이 있다.
MVCC 가 무엇인지 간단하게 설명하라
Multi Version Concurrency Control의 줄임말로, Optimistic Locking의 세부 방법론 중 하나이다.
데이터의 일관성을 유지하면서도 읽기 작업과 쓰기 작업이 충돌하지 않도록 하는 동시성 제어 기법이다.
MVCC에서는 트랜잭션이 데이터를 수정할 때 기존의 데이터 버전을 그대로 남기고, 새로운 버전을 생성한다.
이 방식을 통해 락을 걸지 않고도 데이터 일관성을 보장할 수 있다.
mysql과 같은 경우, undo를 통해 MVCC를 구현한다.
비관계형 데이터베이스에는 왜 Transaction이 존재하지 않는가?
비관계형 데이터베이스는 가용성, 확장성에 중심을 두었기 때문에 데이터 무결성에 중점을 두지 않는다.
따라서 데이터 무결성과 신뢰성을 보장할 transcation을 사용하지는 않는다.
꼬리 질문 : 그러면 비관계형 데이터베이스는 데이터 consistency를 지원하지 않는 건가요?
Optimistic Lock을 통해서 어느 정도의 consistency를 지원한다.
transaction 격리 레벨은 왜 필요하고, 우리가 왜 알아야하는가?
Data Integrity를 위해 transaction 독립성을 보장할 수록, DB의 성능은 저하된다.
개발자는 상황에 따라 독립성과 성능을 조율해서 최적화를 할 수 있어야 한다.
ACID 원칙은 무엇에 대한 원칙인가? 그리고 각각 ACID 요소에 대해 길지 않은선에서 설명하라
Atomic 원자성 : 완벽하게 수행되거나, 완벽하게 수행되지 않거나.
Consistency 일관성 : 작업 처리 결과가 항상 일관성이 있어야 한다.
Isolation 격리성 : 다수의 쿼리가 발생 시 모든 쿼리 당 트랜잭션은 독립되어야 한다.
(단, lsolation level 을 통해 격리 수준 설정 가능.)
Durablity : 어떠한 이슈에도 데이터가 지속적으로 존재해야함.
Optimistic Lock 과 Pessimistic Lock 차이를 설명하라
pessimistic lock : 선 lock 후 작업 -> 충돌을 예상하고 매 요청마다 lock을 설정
optimistic lock : 선 작업 후 버전 체크 -> 충돌 날 것 예상하지 않고, lock 없이 버전만 표시해놓는다.
전자는 RDBMS에서 제공하기 때문에 개발자에게 책임이 주어지지않지만,
후자는 따로 제공되는 서비스가 없기에 개발자가 직접 관리해주어야 한다.
트랜잭션 격리 레벨 별 문제와 그 문제를 어떻게 해결하는지에 대해 상세히 설명하라
L0 : Read Uncommited commit : Dirty Read 문제
L1 : Read Commited : Non - Repeatable Read 문제 (일관적이지 않은 )
L2 : Repeatable Read : Phantom Read 문제(Insert, Delete시)
L3 : Serializable :
데이터 베이스 확장 방법 3가지를 모두 나열하라
- partitioning : column 단위로 테이블을 쪼개는 것 (수직적 확장)
- sharding : row 단위로 테이블을 쪼개는 것 (수평적 확장)
- range-based sharding : 값의 순서로 차등 분리
- hash-based sharding : 해시 함수를 통해 균등 분리
- composite sharding : 두 방식을 혼합해 사용
- Replication : 같은 데이터를 여러 분산노드에 동일하게 저장
- 쓰기 담당, 읽기 담당을 나누어서 쓰기 담당 노드에 모두 동기화를 맞춰야한다.
- CQRS
비관계형 데이터베이스는 어떤 특징을 갖고있는지
관계형 데이터베이스와 비교하여 설명하라
관계형 데이터베이스 : 행렬(2차원), 관계(PK-FK), Fixed Schema
비관계형 데이터베이스 : 비정형(Tree 구조 기반 데이터 구성), 비관계, Schemaless
1. 관계형 데이터베이스
- 행렬 | 관계형 | Fixed Schema
- High Reliability 고신뢰성 = Data Integrity 데이터 무결성 / 정합성
- Guaranteed Consistency
- Pessimistic Lock : DB가 알아서
- Transaction 지원
- ACID 산성 : Transaction 성질
2. 비관계형 데이터베이스
- 비정형 (자유) | 비관계 | Schemaless
- High Scalability 확장성
- Availability 가용성
- Eventual Consistency
- Optimistic Lock : 개발자가 직접
- Transaction 미지원
- BASE 염기성 : 확장성 및 가용성
관계형 데이터베이스 종류는 다양한데 각각마다 세부 SQL 문법이 다른 이유는 무엇인가?
쿼리문법은 ANSI SQL 로부터 나오는것은 동일하지만,
회사마다 쿼리 수행시 최적화 방식, DBMS의 엔진 작동방식이 다르다.
그렇기 때문에 SQL 세부 문법이 달라진다.
'질문과 답변 > DB' 카테고리의 다른 글
DB, Concurrency Control, Transaction (2) (0) | 2024.11.17 |
---|---|
ERD, Normalization, Index (3) | 2024.11.15 |