박나겸
데이터베이스 면접 예상 질문 본문
1. RDBMS(관계형 DB)와 NoSQL(비관계형 DB)의 장단점에 대해 설명해주세요
관계형DB
특징
• 트랜잭션(전부 아니면 무): 전체 트랜잭션이 하나의 단위로 기록. 실패 시 전체 롤백
• 정규화: DB설계 시 중복을 최소화해서 구조화하는 프로세스
장점
• 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠름
• 신뢰성이 높아 데이터의 무결성을 보장
• 정규화에 따른 갱신 비용을 최소화
단점
• 기존에 작성된 스키마를 수정하기 어려움
• 데이터베이스의 부하를 분석하기 어려움
• 빅데이터를 처리하는데 매우 비효율적임
비관계형 DB
특징
• 거대한 Map으로서 key-value 형식을 지원함.
• 관계형 db와 달리 PK,FK JOIN등 관계를 정의하지 않음.
• 스키마에 대한 정의가 없다.
장점
• 대용량 데이터 처리를 하는데 효율적임.
• 읽기 작업보다 쓰기 작업이 더 빠르고 관계형 데이터베이스에 비해 쓰기와 읽기 성능이 빠름.
• 데이터 모델링이 유연함.
• 뛰어난 확장성으로 검색에 유리함.
• 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에서 성능이 뛰어남.
• 복잡한 데이터 구조를 표현할 수 있음.
단점
• 쿼리 처리시 데이터를 파싱 후 연산을 해야해서 큰 크기의 document를 다룰 때는 성능이 저하됨.
2. 키의 종류에 대해 설명해주세요.
• 슈퍼키(Super Key)
: 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다.
유일성 만족, 최소성 만족X
최소성: 키를 구성하는 속성들 중 가장 최소로 필요한 속성들로만 키를 구성하는 성질
예) 학번 + 주민번호를 사용하여 슈퍼키를 만들면 유일성은 만족하지만, 학번이나 주민번호 하나만 가지고도 다른 튜플들을 구분할 수 있으므로 최소성은 만족시키지 못한다.
• 후보키(Candidate Key)
: 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들
모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.
기본키(Primary Key)
후보키 중에서 특별히 선정된 주키(Main Key)
중복된 값을 가질 수 없다.
null 값을 가질 수 없다.
• 대체키(Alternate Key)(보조키)
: 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
• 외래키(Foreign Key)
: 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
3. 트리거(Trigger)에 대해 설명해주세요.
데이터베이스 시스템에서 데이터의 삽입(Insert), 갱신(Update), 삭제(Delete) 등의 이벤트(Event)가 발생할 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL
트리거는 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용된다.
트리거의 구문에는 DCL(데이터 제어어)을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에 오류가 발생한다.
4. 인덱스를 사용하기 좋은 경우
“값을 조회할 때” 테이블 컬럼의 중복도가 낮은 경우와 데이터를 삭제, 삽입하는 작업이 잘 일어나지 않은 경우에 사용하기 좋습니다.
• 규모가 작지 않은 테이블
• INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
• JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
• 데이터의 중복도가 낮은 컬럼
5. 데이터베이스 view란?
• 개념 : 직접 테이블에 접근하는 것이 아니라 테이블에서 사용자가 필요로 하는 부분만 선택하여 만들어 놓은 데이터 집합이다. 일종의 가상 테이블이라고 생각하면 된다.
장점 : 원본 테이블에 직접 접근하지 않아도 사용자가 임의의 뷰를 구성하여 별도의 이름을 붙이거나 접근 가능한 사람을 지정해줄 수 있어서 사용자 편의성과 데이터베이스의 보안 측면에서 좋다.
단점 : 뷰의 정의는 수정이 불가능하다.
6. SQL Injection이 무엇인지와 방어 및 방지하기 위한 대책을 설명해주세요.
• 개념 :
SQL Injection이란 공격자가 악의적인 의도를 갖는 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격 기법을 의미한다.
대책 :
• Prepared Statement 사용
Prepared Statement : SQL 구문이 미리 컴파일 되어 있어 입력값을 변수로 선언해 두고 필요에 따라 값을 대입하여 처리하는 방식. 따라서 변수에 sql 구문이 들어가도 이미 컴파일 되어 있기 때문에 상관 없음.
• 입력값을 검증하는 로직 추가
검증하는 로직은 블랙리스트 기반이 아닌 화이트리스트 기반
7. JOIN에 대해서 설명해주세요.
JOIN은 두 개 이상의 테이블을 결합하여 데이터를 검색하는 방법입니다. 관계형 데이터베이스는 중복 데이터를 방지하기 위해 여러 테이블로 나누어 데이터를 관리합니다. 그러므로 하나의 데이터를 찾기 위해 여러 테이블을 참조해야하는 경우가 필요합니다. 이 때, JOIN을 사용하는 것입니다. JOIN의 종류는 LEFT JOIN, INNER JOIN, OUTER JOIN 등이 있습니다.
8. 데이터베이스 무결성 중에서 하나를 설명해주세요.
• 개체 무결성: 모든 테이블이 기본 키로 선택된 필드를 가져야 한다는 것입니다. 기본 키는 고유 값을 가져야하며 NULL 값은 허용되지 않습니다.
• 참조 무결성: 테이블 간의 참조관계를 선언하는 외래 키 제약조건입니다. 외래 키는 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 합니다.
9. 무결성이 필요한 이유는 무엇인가요.
데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치해야 그 데이터를 신뢰할 수 있기 때문입니다.
'cs 스터디' 카테고리의 다른 글
운영체제 네트워크 면접 예상 질문 (1) | 2024.05.28 |
---|---|
디자인 패턴(Design Pattern) (0) | 2024.05.05 |
데이터 베이스 면접 질문 (0) | 2024.04.16 |
운영체제 cs 면접 예상 질문 10선 (2) | 2024.04.03 |
[웹/SW] CSRF,XSS에 대해 (1) | 2024.03.14 |