-
기본키는 수정이 가능한가요?
-
사실 MySQL의 경우, 기본키를 설정하지 않아도 테이블이 만들어집니다. 어떻게 이게 가능한 걸까요?
-
외래키 값은 NULL이 들어올 수 있나요?
-
어떤 칼럼의 정의에 UNIQUE 키워드가 붙는다고 가정해 봅시다. 이 칼럼을 활용한 쿼리의 성능은 그렇지 않은 것과 비교해서 어떻게 다를까요?
-
UNIQUE 키워드와 PRIMARY Key의 차이는 무엇인가요?
-
NoSQL의 강점과, 약점이 무엇인가요?
-
RDBMS의 강점과 약점이 무엇인가요?
-
RDB의 어떠한 특징 때문에 NoSQL에 비해 부하가 많이 걸릴 "수" 있을까요? (주의: 무조건 NoSQL이 RDB 보다 빠르다라고 생각하면 큰일 납니다!)
-
NoSQL을 활용한 경험이 있나요? 있다면, 왜 RDB를 선택하지 않고 해당 DB를 선택했는지 설명해 주세요.
-
실시간 데이터 처리나 스트리밍 데이터 처리에는 RDB와 NoSQL 중 어떤 것이 더 적합하다고 생각하시나요?
-
ACID 원칙 중, Durability를 DBMS는 어떻게 보장하나요?
-
트랜잭션을 사용해 본 경험이 있나요? 어떤 경우에 사용할 수 있나요?
-
읽기에는 트랜잭션을 걸지 않아도 될까요?
-
트랜잭션 충돌이 발생했을 때 어떻게 처리하나요?
-
한개의 트랜잭션 안에서 여러개의 트랜잭션이 있을경우, 트랜잭션 하나가 rollback이 일어나면 전체 트랜잭션은 어떻게 될까요?
-
데드락이 무엇인지 설명해주세요
-
데드락을 해결할 수 있는 방법이 있나요?
-
모든 DBMS가 4개의 레벨을 모두 구현하고 있나요? 그렇지 않다면 그 이유는 무엇일까요?
-
만약 MySQL을 사용하고 있다면, (InnoDB 기준) Undo 영역과 Redo 영역에 대해 설명해 주세요.
-
그런데, 스토리지 엔진이 정확히 무엇을 하는 건가요?
-
트랜잭션 격리 레벨과 성능 간의 관계를 설명해주실 수 있나요?
-
격리수준에 따라 발생할 수 있는 대표적인 현상중 더티리드, 팬텀리드, 논리피터블 리드 말고 다른 현상들이 있을까요?
-
NoSql은 RDBMS와는 다르게 기본 격리수준이 read_uncommitted입니다 왜 그런걸까요?
- 일반적으로 인덱스는 수정이 잦은 테이블에선 사용하지 않기를 권합니다. 왜 그럴까요?
- 앞 꼬리질문에 대해, 그렇다면 인덱스에서 사용하지 않겠다고 선택한 값은 위 정책을 그대로 따라가나요?
- ORDER BY/GROUP BY 연산의 동작 과정을 인덱스의 존재여부와 연관지어서 설명해 주세요.
- 기본키는 인덱스라고 할 수 있을까요? 그렇지 않다면, 인덱스와 기본키는 어떤 차이가 있나요?
- 그렇다면 외래키는요?
- 인덱스가 데이터의 물리적 저장에도 영향을 미치나요? 그렇지 않다면, 데이터는 어떤 순서로 물리적으로 저장되나요?
- 우리가 아는 RDB가 아닌 NoSQL (ex. Redis, MongoDB 등)는 인덱스를 갖고 있나요? 만약 있다면, RDB의 인덱스와는 어떤 차이가 있을까요?
- (A, B) 와 같은 방식으로 인덱스를 설정한 테이블에서, A 조건 없이 B 조건만 사용하여 쿼리를 요청했습니다. 해당 쿼리는 인덱스를 탈까요?
- 인덱스의 저장구조는 어떤 방식으로 이루어져 있나요?
- 인덱스를 사용할 경우, 무조건 빠를까요?
- 풀 테이블 스캔과 인덱스 스캔의 차이점은 무엇인가요?
- 데이터 베이스 쿼리 튜닝에서 인덱스를 어떻게 활용할 수 있을까요?
- 이러한 분산 환경에선, 트랜잭션을 어떻게 관리할 수 있을까요?
- 마스터, 슬레이브 데이터 동기화 전 까지의 데이터 정합성을 지키는 방법은 무엇이 있을까요?
- 다중 트랜잭션 상황에서의 Deadlock 상황과, 이를 해결하기 위한 방법에 대해 설명해 주세요.
- 샤딩 방식은 무엇인가요? 만약 본인이 DB를 분산해서 관리해야 한다면, 레플리케이션 방식과 샤딩 방식 중 어떤 것을 사용할 것 같나요?
- 클러스터링과 레플리케이션을 동시에 사용하면 어떠한 이점이 있을까요? 아니면 어떠한 문제점이 있을까요?
- 정규화를 하지 않을 경우, 발생할 수 있는 이상현상에 대해 설명해 주세요.
- 각 정규화에 대해, 그 정규화가 진행되기 전/후의 테이블의 변화에 대해 설명해 주세요.
- 정규화가 무조건 좋은가요? 그렇지 않다면, 어떤 상황에서 역정규화를 하는게 좋은지 설명해 주세요.
- 정규화를 통해 데이터 무결성을 어떻게 보장할 수 있나요?
- 정규화 이후에 데이터베이스의 성능 최적화 방법은 어떤 것이 있을까요?
- 역정규화를 하는 과정에서 주의해야 할 사항은 무엇인가요?
- 그렇다면, View의 값을 수정해도 실제 테이블에는 반영되지 않나요?
- Materialized View와 일반 View의 차이점은 무엇인가요?
- 데이터베이스에서 JOIN을 수행할 때 내부적으로 어떤 다양한 최적화 기법이나 알고리즘이 사용되나요?
- 사실, JOIN은 상당한 시간이 걸릴 수 있기에 내부적으로 다양한 구현 방식을 사용하고 있습니다. 그 예시에 대해 설명해 주세요.
- 그렇다면 입력한 쿼리에서 어떤 구현 방식을 사용하는지는 어떻게 알 수 있나요?
- 앞 질문들을 통해 인덱스의 중요성을 알 수 있었는데, 그렇다면 JOIN의 성능도 인덱스의 유무의 영향을 받나요?
- 3중 조인 부터는 동작 방식이 약간 바뀝니다. 어떻게 동작하는지, 그리고 그 방식이 성능에 어떠한 영향을 주는지 설명해 주세요.
- 그렇다면 조인의 성능이 떨어지는 시점부터 조회 성능을 올리려면 어떻게 해야할까요? (역정규화가 반드시 필요할까요?)
- 그렇다면, B+Tree가 B-Tree에 비해 반드시 좋다고 할 수 있을까요? 그렇지 않다면 어떤 단점이 있을까요?
- B-Tree와 B+Tree 중 어떤 것을 선택할지 결정할 때 고려해야 할 주요 요소는 무엇인가요?
- DB에서 RBT를 사용하지 않고, B-Tree/B+Tree를 사용하는 이유가 있을까요?
- 오름차순으로 정렬된 인덱스가 있다고 할 때, 내림차순 정렬을 시도할 경우 성능이 어떻게 될까요? B-Tree/B+Tree의 구조를 기반으로 설명해 주세요.
- 인덱스는 왜 B tree를 사용할까요? 다른 자료구조를 사용할 순 없을까요?
- Optimistic Lock/Pessimistic Lock에 대해 설명해 주세요.
- 물리적인 Lock을 건다면, 만약 이를 수행중인 요청에 문제가 생겨 비정상 종료되면 Lock이 절대 해제되지 않는 문제가 생길 수도 있을 것 같습니다. DB는 이를 위한 해결책이 있나요? 없다면, 우리가 이 문제를 해결할 수 없을까요?
- 동시성 문제를 해결하기 위해 Lock말고 다른 방법은 없을까요?
- 트랜잭션이 긴 실행 시간을 가지고 있을 때, 비관적 락 방식을 사용하면 어떤 문제가 발생될 수 있나요?
- 다양한 격리 수준(Isolation Levels)에서 Locking의 행동은 어떻게 다른가요?
- DB 서버를 분산하지 않고, 트래픽을 감당할 수 있는 방법은 없을까요?
- Schema의 3계층에 대해 설명해 주세요.
- DB와 Client가 Connection을 어떻게 구성하는지 설명해 주세요.
- Connection Pool을 사용할 때 고려해야 하는 설정값은 무엇이 있나요?
- Connection Pool에 있는 Connection이 모두 사용중일때 요청이 오면 어떻게 될까요?
- 가끔은 인덱스를 타는 쿼리임에도 Table Full Scan 방식으로 동작하는 경우가 있습니다. 왜 그럴까요?
- COUNT (개수를 세는 쿼리) 는 어떻게 동작하나요? COUNT(1), COUNT(*), COUNT(column) 의 동작 과정에는 차이가 있나요?
- Table Full Scan과 Index Range Scan은 주로 어떠한 차이점이 있을까요?
- 혹시 Table Full Scan이 Index Range Scan보다 더 유리한 경우가 있을까요?
- 그렇다면, 우리가 서버 개발 과정에서 사용하는 수많은 DB 라이브러리들은 이 문제를 어떻게 해결할까요?
- SQL Injection을 방지하기 위한 방법에는 어떤 것이 있나요?