-
[ CS 기술면접 ] 데이터베이스 예상질문 모음 !공부 !/Computer Science 2022. 5. 22. 01:17반응형
데이터베이스 질문 모음
# Key, ORM, Optimizer
✅ 외래키를 사용하는 이유를 예시를 들어 설명해주세요
외래키를 사용하는 이유는 데이터의 무결성 때문입니다
여기서 데이터 무결성이란 데이터가 항상 정확한 값을 유지하는 성질을 의미합니다
예를 들어 고객 릴레이션의 고객 아이디가 변경된 경우 주문 릴레이션의 같은 고객 아이디가 변경되지 않을경우 등을 예방하기 위해 외래키를 사용합니다
✅ ORM 에 대해 설명해주세요
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미합니다
ORM 을 통해 객체 간 관계를 바탕으로 SOL 를 자동 생성하여 불일치를 해결하기 위해 사용합니다
✅ 옵티마이저에 대해 설명해주세요
옵티마이저란 SQL 을 수행할 최적의 처리경로를 생성해주는 DBMS 의 핵심 엔진입니다
효율적인 방법을 선정할때 통계정보를 통해 계산하는 경우 비용기반 옵티마이저라하고 우선순위에 맞춰 선정하는 규칙기반 옵티마이저가 있습니다# DeadLock, RDBMS vs NoSQL, SQL Injection
✅ 교착상태 해결을 위한 3가지 방안과 방안별로 짧은 예시를 들어주세요
교착상태 해결을 위한 방법으로 예방, 회피, 낙관적 병행제어가 있습니다. 예방은 트랜젝션 실행 전에 필요한 데이터를 모두 잠가 교착상태 자체를 예방합니다. 회피는 자원할당시 TimeStamp를 사용하여 교착상태를 피하는 방법입니다. 세부적으로 다른 트랜젝션이 데이터를 점유할 때 기다리거나 포기하는 Wait-Die 의 경우와 기다리거나 데이터를 빼앗는 방식인 Wound-Wait 방법이 있습니다. 낙관적 병행제어는 트랜잭션 실행시간동안 아무런 검사도 하지않고 트랜젝션이 모두 실행된 뒤에 검사하여 문제가 있다면 되돌리는 방법입니다.
✅ NoSQL은 무엇이고, RDBMS를 사용할 때보다 NoSQL 데이터베이스를 사용하는 것이 유리한 경우를 설명해주세요.
NoSQL 은 관계형 데이터 모델을 지양하는 비관계형 DB 입니다. 스키마가 없거나 있더라도 느슨하기 때문에 비정형 데이터들이 많은 경우 사용하기 좋습니다. 또한 Join 연산이 잦지 않으며 자주 변경되지 않는 데이터를 저장할때 NoSQL 사용을 고려할 수 있습니다.
✅ SQL 인젝션을 막기 위한 한 방법으로 Prepared Statement 사용이 있습니다. Prepared Statement가 무엇이고 이게 왜 방어 전략이 되는지 설명해주세요.Prepared Statement 란 DBMS 에 동일하거나 비슷한 쿼리문을 효율적이고 반복적으로 실행하기 위해 사용되는 기능입니다. 플레이스홀더 자리에서 사용자 입력 값을 미리 검사하고 실행할 수 있기 때문에 SQL 인젝션을 방어 전략이 되기도 합니다.
# MST & Kruskal, Prim MST & Dijkstra, Bellman-Ford, Floyd-Warshall
✅ 인덱스의 개념과 사용하는 자료구조에 대해 설명해주세요
인덱스는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 인덱스의 자료구조는 hash table 보다는 B+Tree를 사용합니다. hash table은 등호 연산에 특화되어 있기 때문에 값의 일부만으로 조회하거나 부동호 연산을 할 경우 문제가 발생합니다. 따라서 hash table은 인덱스의 자료구조로 적합하지 않습니다.
✅ 정규화와 비정규화에 대해 설명해주세요
정규화는 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업입니다. 데이터의 중복을 줄이며 무결성을 향상시킬 수 있고 DB 저장 용량을 효율적으로 관리할 수 있습니다. 하지만 테이블의 분해로 인해 테이블 간의 JOIN 연산이 많아져서 질의에 대한 응답 시간이 느려질 수 있습니다. 이것의 해결책이 비정규화입니다.
비정규화는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나입니다. 일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 됩니다.
✅ 트랜잭션의 특성(ACID)에 대해 설명해주세요
원자성은 트랜잭션의 모든 연산이 정상적으로 수행 완료되어 모두 DB에 저장되거나 어떠한 연산도 수행되지 않아 DB에 전혀 반영되지 않아야 한다는 것입니다. 일관성은 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기 전의 상황과 동일하게 데이터의 일관성을 보장하는 것입니다. 독립성은 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없는 것입니다. 지속성은 트랜잭션이 정상적으로 완료된 다음에는 영구적으로 DB에 작업의 결과가 저장되어야 한다는 것입니다.
반응형'공부 ! > Computer Science' 카테고리의 다른 글
[ CS 기술면접 ] 네트워크 예상질문 모음 2 ! (0) 2022.05.22 [ CS 기술면접 ] 네트워크 예상질문 모음 1 ! (0) 2022.05.22 [ CS 기술면접 ] 알고리즘 예상질문 모음 ! (0) 2022.05.22 [ CS 기술면접 ] 자료구조 예상질문 모음 ! (0) 2022.05.21 [ Network ] 세션(Session)과 토큰(Token)차이 & JWT (0) 2022.05.15