인덱스
Q. 인덱스에 대해 설명해주세요.
A. 인덱스는 데이터베이스에서 원하는 데이터를 검색할 때 속도를 향상시키기 위해 사용하는 자료구조입니다.
Q. 인덱스를 사용했을 때의 장점과 단점에 대해 설명해주세요.
A. 인덱스를 사용하면 검색 속도를 단축시킬 수 잇습니다. 또한, DML 연산 속도를 향상시킬 수 있습니다. 또한, 전반적인 시스템의 부하를 줄일 수 있다는 장점이 있습니다. 하지만 인덱스를 관리하기 위해 10%의 저장공간을 필요로 하는 단점이 있습니다. 또한, 인덱스를 위해 추가 작업을 진행해야 하며 인덱스를 DML이 빈번한 속성에 사용한다면 오히려 성능이 떨어지는 단점이 있습니다.
Q. 인덱스 자료구조 종류에 대해 설명해주세요.
A. 먼저 해시 테이블로 인덱스를 구현할 수 있습니다. 키-값으로 저장되어 있어 검색 속도가 O(1)이라는 장점이 있지만 등호 연산에만 최적화 되어있어 부등호 연산이 빈번한 데이터베이스에는 적합하지 않습니다.
이러한 단점을 극복하기 위해 B-Tree를 사용해 인덱스를 구현할 수 있습니다. B-Tree는 자식 노드의 개수를 최대 2개 이상 가지는 트리로, 검색의시간복잡도는 O(logN)입니다.
데이터 베이스 종류
Q. 데이터 베이스 종류에 대해 아는대로 설명해주세요.
A. 계층형 데이터베이스 - 폴더나 파일 등 계층 구조로 데이터를 저장하는 방식. 상하종속적 관계를 가져 초기 세팅 후 프로세스 수용이 어려움
네트워크형 데이터베이스 - 네트워크의 노드 형태로 데이터를 논리적이게 표현한 방식. 상하종속적 관계를 해결하지만 데이터 종속성 자체를 해결하지 못함.
관계형 데이터베이스 - 데이터를 테이블로 구성해 각 테이블의 관계를 통해 데이터를 관리하는 방식. 데이터의 무결성과 중복 문제를 해결할 수 있음. 또한, 정규화에 따라 갱신 비용이 최소화될 수 있음.
비관계형 데이터베이스 - 스키마가 없거나 유연한 스키마를 가지는 데이터베이스 모델. 다양한 데이터 형식을 저장할 수 있어 대규묘 데이터 집합과 분산 컴퓨팅 환경에 적합
Q. 관계형 데이터베이스의 장점과 단점에 대해 설명해주세요.
A. 데이터의 무결성을 보장해 높은 신뢰성을 가지고 있습니다. 또한, 관계를 통해 각 데이터를 중복없이 저장합니다. 하지만 컬럼 확장이 어려워 유연하지 않다는 단점을 가지고 있습니다.
Q. NoSQL에 어떤 종류가 있는지 설명해주세요.
A. 키-값 저장소, 문서 지향 데이터베이스, 컬럼 기반 저장소가 있습니다. 키-값 저장소는 빠른 데이터 검색 혹은 저장에 유리합니다. 문서 지향 데이터베이스는 JSON, BSON의 문서 형식을 사용해 데이터를 저장하며, 문서 내에서 데이터 구조를 자유룝게 변경할 수 있어 유연성의 뛰어납니다. 컬럼 기반 저장소는 데이터를 컬럼 단위로 저장해 디스크 I/O를 줄일 수 있습니다.
트랜잭션
Q. 트랜잭션이란 무엇인가요?
A. 데이터베이스의 상태를 변화시키는 논리적인 작업의 단위입니다.
Q. 여러 쿼리들을 하나로 묶어 트랜잭션으로 처리하는 이유는 뭘까요?
A. 데이터의 원자성을 보장하기 위함입니다. 트랜잭션은 논리적 단위이기 때문에 트랜잭션 내부의 쿼리문이 하나 이상 오류가 발생하면 트랜잭션의 실행 자체를 되돌려 데이터의 일관성을 보장합니다.
Q. 커밋과 롤백에 대해서 설명해주세요.
A. 커밋은 트랜잭션이 성공적으로 완료되어 DB의 상태 변화가 일어난 것을 뜻하며 롤백은 가장 최신 상태의 커밋으로 되돌아가는 것입니다.
Lock
Q. 락의 종류에 대해서 설명해주세요.
A. 공유락과 배타락이 있습니다. 공유락은 read락이라고 부르며 트랜잭션 시 읽기 연산을 수행한 데이터가 변경되지 않음을 보장합니다. 배타락은 write락이라고도 부르며 트랜잭션 시 다른 트랜잭션이 읽기 또는 쓰기 연산을 수행하지 못하도록 합니다.
Q. Lock을 설정하지 않고, 두 트랜잭션이 한 자원에 대해 쓰기 연산을 하면 어떻게 될까요?
A. 두 트랜잭션이 한 자원에 대해 쓰기 연산을 하면 순서가 보장되지 않기 때문에 원하지 않는 결과값이 나올 수 있습니다.
Q. 블로킹은 어떤 상황에서 발생하나요?
A. 공유락이 걸려있는 자원에 대해 쓰기 연산을 수행하거나 배타락이 걸려 있는 자원에 읽기 또는 쓰기 연산을 수행할 때 발생합니다.
정규화
Q. 정규화를 하는 이유에 대해서 간단하게 이야기해주세요.
A. 정규화를 하는 이유는 데이터베이스 내 데이터의 중복과 갱신이상현상을 방지하고 저장 공간을 효율적으로 사용하기 위함입니다.
Q. 그러면 항상 정규화를 하는 것이 좋다고 생각하시나요?
A. 그것은 아닙니다. 불필요하게 정규화를 진행할 경우 JOIN연산의 필요성이 증가하여 효율성을 떨어뜨릴 수 있습니다.
Q. 이상현상이 무엇인지 이야기해주세요.
A. 삽입 이상, 수정 이상, 삭제 이상이 있습니다.
Q. 정규화의 과정에 대해서 간단히 설명해주세요.
A. 반복되는 값이 존재할 경우 해당 값을 제거 => 제 1 정규형 (원자성) => 부분종속성 제거 => 제 2 정규형(완전 종속) => 이행 종속성 제거 => 제 3정규형 => 후보키가 아닌 결정키 제거 => BCNF
키 (Key)
Q. 데이터베이스의 무결성에 관해 설명해주세요.
A. 참조 무결성, 개체 무결성, 도메인 무결성이 있습니다. 먼저 참조 무결성은 외래키는 NULL값을 허용하고 외래키가 참조하는 속성은 참조되는 테이블의 기본키여야 합니다. 개체 무결성은 기본키는 NULL값, 중복값을 허용하지 않고 유일하게 구별되는 값이여야 합니다. 도메인 무결성은 특정 속성 값이 그 속성에 정의된 도메인에 속한 값이여야 합니다.
Q. 슈퍼 키와 후보키의 차이점을 설명해보세요.
A. 슈퍼 키는 유일성만 만족한 키이고 후보키는 유일성과 최소성을 모두 만족한 키입니다.
Q. 기본키가 되기 위한 필요조건을 말씀해주세요.
A. 기본키가 되기 위해서는 NULL값이 아니며 중복되는 값을 가져서는 안됩니다. 또한, 식별 가능한 유일무이한 값을 가지고 있어야 합니다.
Q. 외래키를 사용하는 이유를 설명해주세요.
A. 다른 테이블과의 관계를 나타내기 위함입니다. 즉, 다른 테이블을 참조하기 위해 사용합니다.
'면접질문' 카테고리의 다른 글
[면접질문] 네트워크 면접 질문 정리 (0) | 2024.03.11 |
---|---|
[면접질문] OS 면접 질문 정리 (1) | 2024.02.26 |
[면접질문] 컴퓨터 구조 면접 질문 정리 (0) | 2024.02.19 |