❓ 데이터베이스와 DBMS에 대해서 설명해주세요.
- 데이터베이스
여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합을 말합니다.
- DBMS
데이터베이스 관리 시스템으로 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는
응용 프로그램 모음을 말합니다.
데이터는 구조적으로 저장되므로 중복성이 제어되고 필요한 경우 데이터 백업 및 복구를 제공한다는 장점이 있습니다.
❓ RDBMS와 NoSQL에 대해서 설명해주세요.
- RDBMS(Scale - up : 수직 확장)
관계형 데이터베이스 관리 시스템으로 데이터베이스에 별도의 테이블에 저장된 관계형 데이터 모델을 기반으로
하며 테이블 간의 관계는 공통 열을 사용하여 나타내는 것을 말합니다.
복잡한 쿼리를 지원하고 ACID 특성을 제공하여 데이터의 안전성을 보장한다는 장점이 있지만
스키마가 고정되어 있어 데이터 모델 변경이 어렵고 RDBMS를 구축하고 유지하는 데에는
높은 비용과 복잡성이 따른다는 단점이 있습니다. 따라서 변경할 여지가 없을 때 주로 사용합니다.
- NoSQL(Scale - out : 수평 확장)
관계형 데이터베이스 모델이 아닌 다양한 데이터 모델을 지원하는 데이터베이스를 말합니다.
다양한 데이터 모델을 지원하여 비정형화된 데이터를 효과적으로 다룰 수 있고
스키마가 동적이고 유연하기 때문에 데이터 모델을 쉽게 변경할 수 있다는 장점이 있지만
일부 NoSQL 데이터베이스는 SQL을 지원하지 않아 제약이 존재하며 ACID 특성을 보장하지 않는다는 단점이 있습니다.
따라서 정확한 데이터 구조를 알 수 없을 때 주로 사용합니다.
❓ SQL에 대해서 설명해주세요.
SQL은 DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language)와 같이
세가지로 나눌 수 있습니다.
- DDL(데이터 정의어)
데이터베이스 구조를 정의, 수정, 삭제하는 언어를 말합니다.
ex) create, alter, drop
- DML(데이터 조작어)
데이터베이스의 데이터를 조작(검색, 삽입, 갱신, 삭제)하는 언어를 말합니다.
ex) select, insert, update, delete
- DCL(데이터 제어어)
데이터베이스에서 데이터를 사용하기 위한 액세스 권한 취소와 같이 데이터베이스에서
데이터의 가시성을 제어하는데 사용하는 언어를 말합니다.
ex) commit, rollback, grant, revoke
❓ GROUP BY의 역할에 대해서 설명해주세요.
특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할을 합니다.
❓ HAVING과 WHERE의 차이에 대해서 설명해주세요.
- having
그룹을 필터링하는데 사용하고 그룹화 또는 집계가 발생한 후 필터링하는데 사용됩니다.
- where
개별 행을 필터링하는데 사용하고 그룹화 또는 집계가 발생하기 전에 필터링하는데 사용됩니다.
❓ JOIN에서 ON과 WHERE의 차이를 설명해주세요.
ON이 WHERE보다 먼저 실행되어 JOIN을 하기 전에 필터링을 하고
WHERE은 JOIN을 한 후에 필터링을 합니다.
❓ DELETE, TRUNCATE, DROP의 차이를 설명해주세요.
- delete
데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있습니다.
그리고 삭제 후 되돌릴 수 있습니다.
- truncate
전체 데이터를 삭제하는 방식으로 테이블 용량이 줄어들고 인덱스 등도 삭제되지만
테이블은 삭제할 수 없고 삭제 후 되돌릴 수 없습니다.
- drop
테이블 자체를 완전히 삭제하는 방식으로 공간, 인덱스 객체를 모두 삭제합니다.
그리고 삭제 후 되돌릴 수 없습니다.
❓ 릴레이션(Relation)에 대해서 설명해주세요.
행과 열로 구성된 테이블을 말합니다.
❓ 무결성에 대해서 설명해주세요.
데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말합니다.
1. 도메인 무결성 제약 조건
릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 합니다.
2. 개체 무결성 제약 조건
기본키는 NULL 값을 가져서는 안되며 릴레이션 내의 오직 하나의 값만 존재해야 합니다.
3. 참조 무결성 제약 조건
자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야 하며
자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받습니다.
❓ 조인(Join)에 대해서 설명해주세요.
두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법을 말합니다.
1. 세타 조인
두 릴레이션의 속성값을 비교하여 조건을 만족하는 투플만 반환합니다.
2. 내부 조인(Inner Join) = 동등 조인
세타 조인에서 = 연산자를 사용한 조인을 말하며 2개 이상의 테이블에서 교집합만을 추출합니다.
3.자연 조인
내부 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번재 속성을 제거하여 반환합니다.
4. 외부 조인(Outer Join) = 완전 외부 조인 or 풀 조인
2개 이상의 테이블에서 모든 테이블에 해당하는 부분을 추출합니다.
(자연 조인 시 조인에 실패한 투플을 모두 보여 주되 값이 없는 대응 속성에는 NULL값을 채워서 반환)
4-1. 왼쪽 조인(Left Join) : 2개 이상의 테이블에서 from에 해당하는 부분을 추출합니다.
4-2. 오른쪽 조인(Right Join) : 2개 이상의 테이블에서 from과 join하는 테이블에 해당하는 부분을 추출합니다.
5. 세미 조인
자연 조인을 한 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환합니다.
❓ 데이터베이스 뷰에 대해서 설명해주세요.
- 하나 이상의 테이블을 합하여 만든 가상의 테이블을 말합니다.
- 장점
1. 원본 테이블에서 보안이 필요한 속성을 제외하고 새로운 테이블을 정의하여 사용자에게 제공함으로써
데이터 보안성을 높일 수 있습니다.
2. 여러 테이블에서 데이터를 가져와 하나의 테이블을 정의함으로써
질의 작성이 간단하고 질의 재사용이 가능해서 편리합니다.
- 단점
1. 테이블처럼 사용할 수 있지만 SELECT문을 제외한 일부 물리적인 테이블의 갱신 작업을 수행하는데
제약이 있습니다.
ex) 뷰 Vorders에서 UPDATE문을 수행했지만 실제로는 뷰가 아닌 Orders 테이블에서 수행됩니다.
❓ 인덱스(Index = 색인)에 대해서 설명해주세요.
자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조를 말합니다.
데이터의 양이 많고 검색이 변경보다 빈번한 경우 사용합니다.
❓ 프로시저(Procedure)에 대해서 설명해주세요.
작업 순서가 정해진 독립된 프로그램의 수행 단위를 말합니다.
❓ 트리거(Trigger)에 대해서 설명해주세요.
데이터의 변경(Insert, Delete, Update)문이 실행될 때 자동으로 같이 실행되는 프로시저를 말합니다.(저장 프로시저)
업무 규칙을 보장하고 업무 처리를 자동화할 수 있기 때문에 트리거를 사용합니다.
❓ 데이터베이스에서 다양한 유형의 관계에 대해서 설명해주세요.
- 일대일(1 :1) 관계
좌측 개체 타입에 포함된 개체가 우측 개체 타입에 포함된 개체와 일대일로 대응하는 관계를 말합니다.
- 일대다(1 : N), 다대일(N :1) 관계
한쪽 개체 타입의 개체 하나가 다른 쪽 개체 타입의 여러 개체와 관계를 맺는 경우를 말합니다.
- 다대다(N : M) 관계
각 개체 타입의 개체들이 서로 임의의 개수 개체들과 서로 복합적인 관계를 맺고 있는 경우를 말합니다.
❓ 개념적 모델링, 논리적 모델링, 물리적 모델링 및 ER 모델에 대해서 설명해주세요.
- 개념적 모델링
요구사항을 수집하고 분석한 결과를 가지고 업무의 핵심 개념을 구분하여 전체적인 뼈대를 만드는 과정을
말합니다.
- 논리적 모델링
개념적 모델링 단계에서 만들어진 ER 다이어그램을 사용하고자 하는 DBMS에 맞게 매핑하여
실제 데이터베이스로 구현하기 위한 모델을 만드는 과정을 말합니다.
- 물리적 모델링
작성된 논리적 모델을 실제 컴퓨터의 저장 장치에 저장하기 위한 물리적 구조를 정의하고 구현하는 과정을 말합니다.
- ER 모델
세상의 사물을 개체와 개체 간의 관계로 표현한 것을 말합니다.
❓ 이상현상(Anomaly)에 대해서 설명해주세요.
테이블에 투플을 삽입할 때 부득이하게 NULL 값이 입력되거나 삭제 시 연쇄 삭제 현상이 발생하거나
수정 시 데이터의 일관성이 훼손되는 현상을 말합니다.
- 삭제이상
투플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상을 말합니다.
- 삽입이상
투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL값을 입력해야하는 현상을 말합니다.
- 수정이상
투플 수정 시 중복으로 저장된 데이터 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상을 말합니다.
❓ 정규화 및 비정규화에 대해서 설명해주세요.
- 정규화
데이터 무결성을 유지하기 위해 잘 정의된 방식으로 테이블을 분할하여 데이터베이스에서
중복된 데이터를 제거하는 프로세스를 말합니다.
데이터베이스 변경 시 이상 현상을 제거할 수 있다는 장점이 있으나
릴레이션 분해로 인해 릴레이션 간의 조인이 많아져서 응답 시간이 느려질 수도 있다는 단점이 있습니다.
1. 제 1정규형 : 릴레이션의 속성값이 원자값(하나의 값)이어야 합니다.
2. 제 2정규형 : 제 1정규형을 만족하고 릴레이션의 기본키가 아닌 속성이 기본키에 완전 함수 종속이어야 합니다.
※ 완전 함수 종속 : 기본키의 부분 집합이 다른 값을 결정하지 않는 것을 의미합니다.
3. 제 3정규형 : 제 2정규형을 만족하고 속성들이 이행적으로 종속되어 있어야 합니다.
※ 이행적 종속 : A → B, B → C가 성립할 때 A → C가 성립되는 것을 의미합니다.
4. BCNF 정규형 : 제 3정규형을 만족하고 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키이어야 합니다.
- 비정규화
복잡한 쿼리의 속도를 높이고 성능을 향상시키기 위해 테이블에 중복 데이터를 추가하는 프로세스를 말합니다.
❓ 트랜잭션(Transaction) 과 특성에 대해서 설명해주세요.
작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이
발생하지 않게 만들어주는 기능을 말합니다.
- ACID 특성
1. 원자성(Atomicity)
작업을 전부 수행하거나 아예 수행하지 않아야 합니다.
2. 일관성(Consistency)
트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 합니다.
3. 고립성(Isolation)
둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없습니다.
4. 영속성(Durability)
수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구적으로 저장해야 합니다.
❓ 커밋(Commit)과 롤백(Rollback)에 대해서 설명해주세요.
- commit
처리 결과의 영구적 반영을 시행합니다.
- rollback
결과를 취소, 트랜잭션의 처음 시점으로 되돌립니다.
❓ 동시성 제어 및 갱신손실에 대해서 설명해주세요.
- 동시성 제어
트랜잭션이 동시에 실행될 때 데이터베이스의 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는
DBMS의 기능을 말합니다.
- 갱신손실
동시성 제어를 하지 않는 트랜잭션들이 발생시키는 문제로
한 트랜잭션의 갱신이 다른 트랜잭션에 의하여 분실되는 현상을 말합니다.
❓ 락과 데드락에 대해서 설명해주세요.
- 락
트랜잭션이 데이터를 읽거나 변경할 때 데이터에 표시하는 잠금 장치를 말합니다.
- 락의 유형
1. 공유락 : 읽기를 할 때 사용하는 잠금 장치입니다.
2. 배타락 : 쓰기를 할 때 사용하는 잠금 장치입니다.
- 데드락
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고
상대방 데이터에 대하여 락을 요청하여 무한 대기 상태에 빠지는 현상을 말합니다.
- 데드락을 방지하기 위한 방법
1. 트랜잭션을 자주 커밋합니다.
2. 정해진 순서로 테이블에 접근합니다.
3. SELECT ~ FOR UPDATE의 사용을 피합니다.
❓ 체크 포인트에 대해서 설명해주세요.
데이터베이스와 트랜잭션 로그 파일을 동기화한 후 동기화한 시점을 로그 파일에 기록해두는 것을 말합니다.
참고 출처
https://dev-coco.tistory.com/158
'면접' 카테고리의 다른 글
신입 개발자 면접 준비 - 네트워크, 보안 (0) | 2024.01.24 |
---|---|
신입 개발자 면접 준비 - 스프링, JPA (0) | 2024.01.22 |
신입 개발자 기술 면접 정리 - 자료구조/알고리즘 (0) | 2024.01.18 |
신입 개발자 기술 면접 정리 - JAVA (0) | 2024.01.17 |