기술면접/데이터베이스

데이터베이스

EnoughTT 2023. 9. 5. 20:37

⁉ 데이터베이스란? 사용하는 이유?

데이터베이스는 데이터의 집합체를 의미합니다.

구조화된 방식으로 저장해 효율적으로 접근하고 관리할 수 있습니다.

 

데이터베이스를 사용하는 이유

  • 구조화된 방식으로 데이터를 저장 (대용량의 데이터를 효율적으로 관리)
  • 데이터의 무결성 (일관성 있게 유지)
  • 데이터의 중복 최소화

⁉ DBMS 란?

DBMS 는 데이터베이스 관리 시스템 (Database Management System) 의 약자로, 여러 사용자가 데이터베이스에 접근해 사용할 수 있도록 제공해주는 소프트웨어입니다.

 

 

⁉️ 데이터베이스와 DBMS의 차이에 대해 설명해 보세요

 


⁉ 데이터베이스 스키마란?

데이터베이스의 구조와 제약 조건에 관한 전반적인 표현을 나타냅니다. 스키마는 3가지로 분류됩니다.

  • 외부 스키마 (External Schema) : 사용자 입장에서 조직의 일부분을 정의한 것입니다.
  • 개념 스키마 (Conceptual Schema) : 데이터베이스 구조를 논리적으로 정의한 것입니다.
  • 내부 스키마 (Internal Schema) : 데이터베이스의 물리적 저장 형태를 기술하는 것입니다.

 

 

!? 데이터의 독립성에 대해서 설명해 보세요

 


⁉ DDL, DML, DCL, TCL 이란?

  • DDL (Data Definition Language, 정의어) : 데이터 정의어로, 데이터베이스, 테이블, 인덱스 등을 생성, 변경, 삭제하는데 사용됩니다. CREATE (생성), ALTER (변경), DROP (삭제), TRUNCATE (데이터 삭제) 가 있습니다.
  • DML (Data Manipulation Language, 조작어) : 데이터 조작어로, 조회, 삽입, 수정, 삭제하는데 사용됩니다. SELECT (조회), INSERT (삽입), UPDATE (수정), DELETE (삭제) 가 있습니다.
  • DCL (Data Control Language, 제어어) : 데이터 제어어로, 데이터베이스의 접근과 데이터의 보안을 관리하는데 사용됩니다. GRANT (권한 부여), REVOKE (권한 취소) 가 있습니다.
  • TCL (Transaction Control Language, 트랜잭션 제어어) : 트랜잭션 제어어로, 트랜잭션을 제어하는 언어로 사용됩니다. COMMIT (트랜잭션 완료된 것으로 간주), ROLLBACK (트랜잭션을 시작하기 전 상태로 되돌림), SAVEPOINT (트랜잭션 내 중간지점 설정, SAVAPOINT 까지만 되돌릴 수 있음), SET TRANSACTION (트랜잭션의 특성 지정) 이 있습니다.

⁉ 뷰 (View) 란?

뷰 (View)는 가상 테이블로, 사용자에게 허용된 자료만을 보여주기 위해 메모리에 물리적으로 존재하지 않는 테이블입니다. 장점으로는 관리가 용이하고, 명령문이 간단해집니다. 단점으로는 뷰의 정의를 변경할 수 없습니다.


⁉ 트리거 (Trigger) 란?

트리거 (Trigger)는 데이터베이스에서 데이터의 변경이 발생했을 때 자동으로 실행되도록 하는 절차적 코드입니다.

테이블에 삽입, 수정, 삭제가 발생하면 트리거가 활성화되어 정의된 작업을 수행합니다.


⁉ 키의 종류에 대한 설명

  • 슈퍼키 (Super Key) :  유일성을 만족하는 키를 의미합니다.
  • 후보키 (Candidate Key) : 기본키가 될 수 있는 키들을 의미합니다. 유일성과 최소성을 만족해야합니다.
  • 기본키 (Primary Key) : 고유하게 식별하는 데 사용되는 후보키 중 하나입니다. null을 허용하지 않습니다.
  • 외래키 (Foreign Key) : 다른 테이블의 기본키를 참조하는 키입니다. null 값을 가질 수 있으며, 참조 무결성을 유지합니다.
  • 대체키 (Alternate Key) : 기본키가 아닌 아닌 나머지 후보키를 의미합니다.

 

⁉️ 기본키는 수정이 가능 한가요?

수정이 가능하지만 수정 전 참조 무결성, 프로그램의 영향, 성능 문제 등 영향을 충분히 고려해야합니다.

 

⁉️ 사실 MySQL의 경우, 기본키를 설정하지 않아도 테이블이 만들어집니다. 어떻게 이게 가능한 걸까요?

모든 사용사례에 기본키가 필요한 것은 아닙니다. 일부 테이블은 일시적인 데이터를 저장하거나 다른 목적으로 사용될 수 있기 때문에 기본키가 꼭 필요하지 않을 수 있습니다. 기본키 대신 UNIQUE 제약조건과 같은 다른 제약 조건을 사용해 데이터 무결성을 보장 할 수 있습니다. 하지만 성능 관점에서 고려를 한다면 대부분 테이블에 기본키를 설정하는 것이 좋습니다.

 

⁉️ 외래키 값은 NULL이 들어올 수 있나요?

외래키 값은 NULL 이 들어올 수 있습니다.

두 테이블 간의 관계가 항상 필수적이지 않을 경우, 선 테이블의 데이터가 입력되지 않은 상황에서 레코드를 생성할 경우에 NULL 값을 허용할 수 있습니다. 하지만 쿼리를 작성하거나 데이터를 분석할 때 주의해야합니다.

 

⁉️ 어떤 칼럼의 정의에 UNIQUE 키워드가 붙는다고 가정해 봅시다. 이 칼럼을 활용한 쿼리의 성능은 그렇지 않은 것과 비교해서 어떻게 다를까요?

UNIQUE 가 붙은 컬럼은 자동으로 인덱싱이 되기 때문에 WHERE절에 사용하는 쿼리인 경우 빠르게 데이터를 검색 할 수 있습니다. 하지만 데이터를 삽입, 수정, 삭제할 때는 인덱스가 추가적인 스토리지 공간을 사용하기 때문에 오버헤드가 발생 할 수 있습니다.


⁉ PK 와 UK 설명

  • PK (Primary Key, 기본키) : 각 행을 고유하게 식별하는데 사용되는 키입니다. Null 값을 허용하지 않고, 테이블은 하나의 기본키를 가질 수 있거나 복합키로 구성 될 수 있습니다.
  • UK (Unique Key, 고유키) : 각 행의 특정 열의 값이 고유하게 유지되도록 하는 키입니다. Null 값도 고유 값으로 간주되기 때문에 Null 값을 허용 할 수 있습니다. 테이블은 여러개의 고유키를 가질 수 있습니다.

⁉ 트랜잭션이란?

데이터베이스에서 하나의 논리적인 작업 단위를 말합니다.

 

트랜잭션의 특성

  • 원자성 (Atomicity) : 트랜잭션 내의 모든 명령은 모두 수행되거나 모두 수행되지 않아야함을 의미합니다.
  • 일관성 (Consistency) : 트랜잭션 시작 전과 후의 데이터베이스 상태가 일관성이 있어야 합니다.
  • 독립성 (Isolation) : 동시에 실행 되는 트랜잭션들은 서로 영향을 주지 않아야합니다. 하나의 트랜잭션 내의 연산 결과는 다른 트랜잭션에서 접근할 수 없습니다.
  • 지속성 (Durability) : 트랜잭션이 성공적으로 완료되면, 데이터는 영구적으로 반영되어야 합니다.

 

 

⁉️ ACID vs BASE의 차이를 비교 설명해 보세요

ACID 는 RDBMS에서 트랜잭션의 특징이고, BASE는 NoSQL에서 말하는 성질입니다. 

 

⁉️ ACID 원칙 중 Durability 를 DBMS 는 어떻게 보장하나요?

1. 로그 : 트랜잭션과 관련된 모든 변경 사항은 먼저 로그에 기록되고, 그 후에 실제 데이터베이스에 적용됩니다. 시스템 장애가 발생하면 이 로그를 사용하여 데이터베이스를 이전의 상태로 복구할 수 있습니다.

 

2. 체크포인트 (Checkpoint) : 특정 조건 하에서 DBMS가 자동으로 수행하는 연산으로, 이 시점의 데이터베이스 상태를 디스크에 안전하게 저장합니다.

 

⁉️ 트랜잭션을 사용해 본 경험이 있나요? 어떤 경우에 사용할 수 있나요?

트랜잭션은 데이터 처리를 한 단위로 묶는 방법입니다. 은행 거래, 생산 및 재고 관리, 예약 시스템 등 한 단위로 처리해야하는 경우에 사용합니다.

 

⁉️ 읽기에는 트랜잭션을 걸지 않아도 될까요?

읽기 작업에 트랜잭션을 거는 경우도 있습니다.

Dirty Reads 방지와 Repeatable Reads 방지를 할 경우에 트랜잭션을 사용 할 수 있습니다.


⁉ 트랜잭션 격리 수준은?

  • Read Uncommitted (읽기 미완료) : 트랜잭션에서 변경한 내용이 커밋이 안된 상태에서 다른 트랜잭션에서 변경 내용을 볼 수 있습니다. 'Dirty Read' 문제가 발생 합니다.
  • Read Committed (읽기 완료) : 트랜잭션에서 변경한 내용이 커밋 된 후 다른 트랜잭션에서 변경 내용을 볼 수 있습니다. 같은 데이터를 여러번 읽을 때 매번 다른 결과를 볼 수 있는 'Non-Repeatable Read' 문제가 발생합니다.
  • Repeatable Read (반복 가능한 읽기) : 트랜잭션이 시작되었을 때의 상태를 보존해, 같은 데이터를 여러번 읽을 때 항상 같은 결과를 보게 합니다. 'Phantom Read' 문제가 발생합니다.
  • Serializable (직렬화 가능) : 트랜잭션을 순차적으로 실행해 동시성 문제를 해결합니다.

⁉ 트랜잭션 연산 중 Commit 과 RollBack 이란?

  • Commit : 트랜잭션이 완료되어 결과를 영구적으로 반영하는 연산입니다.
  • RollBack : 트랜잭션에서 수행한 모든 변경사항을 취소하고, 트랜잭션 시작 지점의 데이터 상태로 복구되는 연산입니다.

⁉ DB에서 동시성 제어란?

동시에 여러개의 트랜잭션이 수행 될 때, 트랜잭션들이 DB의 일관성을 파괴하지 않도록 상호작용을 제어하는 것을 의미합니다.

 

 

⁉ DBMS의 동시성 제어 기법에 대해서 알고 있는 것을 설명해 보세요

 


⁉ 무결성 제약 조건이란?

무결성 제약조건이란 데이터의 정확성과 일관성을 보장하기 위한 규칙입니다.

  • 도메인 무결성 : 컬럼이 가져야하는 값의 범위나 유형을 정의합니다.
  • 개체 무결성 : 각 객체를 고유하게 식별할 수 있어야합니다. 기본키를 사용하여 객체 무결성을 보장합니다.
  • 참조 무결성 : 외래키와 관련 있습니다. Null 값 또는 참조하는 릴레이션의 기본키 값이어야 합니다.

 

 

⁉ 데이터 무결성의 개념과 실현하기 위한 기법/방법에 대해서 설명해 보세요

 


⁉ JOIN은 무엇이며, 어떤 때 사용하는가?

JOIN은 두 개 이상의 테이블을 결합할 때 사용됩니다. 주로 기본키와 외래키 사이의 관계에서 JOIN이 이루어집니다.

JOIN은 여러 테이블의 정보를 한번에 보거나 분석할 때 사용합니다.

 

JOIN의 종류

  • INNER JOIN : 두 테이블의 교집합을 반환합니다. JOIN 조건에 부합하는 행들만 가져옵니다.
  • LEFT JOIN : 왼쪽 테이블 기준으로 오른쪽 테이블과 맞는 데이터를 가져옵니다. 만약 오른쪽 테이블에서 매칭되는 행이 없다면 NULL 값이 반환됩니다.
  • RIGHT JOIN : 오른쪽 테이블 기준으로 왼쪽 테이블과 맞는 데이터를 가져옵니다. 만약 왼쪽 테이블에서 매칭되는 행이 없다면 NULL 값이 반환됩니다.
  • FULL JOIN : 왼쪽, 오른쪽 테이블 모두 JOIN 조건에 부합하는 모든 데이터를 반환합니다. 매칭되는 행이 없는 경우 NULL 값으로 반환됩니다.

⁉ GROUP BY 란?

선택한 컬럼의 값이 같은 행들을 그룹으로 묶는데 사용되며, 데이터를 요약하여 볼 수 있게 됩니다.

일반적으로 GROUP BY 문은 집계합수와 함께 사용되며, 집계함수에는 COUNT, SUM, AVG, MAX, MIN 등이 있습니다.


⁉ DELETE, TRUNCATE, DROP 의 차이점

  • DELETE : 원하는 데이터만 삭제가 가능하며, ROLLBACK이 가능합니다. 데이터를 삭제하지만 테이블의 용량은 줄어들지 않습니다.
  • TRUNCATE : 전체 데이터를 한번에 삭제하는 방식입니다. ROLLBACK이 불가능하며, 테이블의 용량이 줄어듭니다.
  • DROP : 테이블 자체를 완전히 삭제하는 방식입니다. ROLLBACK이 불가능 합니다.

⁉ INDEX란?

데이터를 빠르게 조회할 수 있도록 해주는 자료구조입니다. INDEX는 데이터의 추가, 수정, 삭제 작업이 있을 때 업데이트 되어야 하므로, 이런 작업이 빈번하게 일어나는 경우 유지 관리 비용이 커질 수 있습니다.

 

인덱스 유형

  • 클러스터드 인덱스 (Clustered Index) : 테이블의 레코드를 물리적으로 재정렬합니다. 인덱스 키에 따라 이루어지며, 디스크에 저장되는 행의 순서를 결정합니다. 테이블의 기본키에 대해 자동으로 생성됩니다.
  • 넌클러스터드 인덱스 (Non-Clustered Index) : 테이블의 레코드를 물리적으로 재정렬하지 않습니다. 별도의 공간에 인덱스를 저장하며, 데이터를 가져오기 위해 추가적인 디스크 I/O 작업을 합니다. (포인터 참조 또는 포인터 추적)

⁉ 정규화란? 정규화를 하는 이유와 장단점

정규화란 데이터 중복을 제거하고, 데이터 무결성을 향상시키기 위한 과정입니다.

 

정규화를 하는 이유

  • 데이터 중복성 제거 : 데이터 중복은 데이터 불일치를 초래합니다.
  • 데이터 무결성 향상 : 데이터의 정확성과 일관성이 유지되도록 합니다.
  • 쿼리 성능 향상 : 정규화된 테이블에서는 간단하고 빠른 쿼리를 사용하여 필요한 데이터를 가져올 수 있습니다.
  • 데이터 구조의 유연성 : 데이터를 추가, 수정, 삭제 시 필요한 작업을 줄일 수 있습니다.

정규화의 장/단점

  • 데이터 무결성을 보장합니다.
  • 데이터베이스의 이상현상을 방지합니다.
  • 과도한 정규화는 JOIN 연산의 증가로 성능 저하를 일으킬 수 있습니다.
  • 데이터베이스의 구조가 복잡해져 관리의 어려움이 증가 할 수 있습니다.

⁉ 정규화 단계

학생 ID 이름 과목 선생님
1 철수 수학 김선생
1 철수 과학 이선생
2 영희 수학 김선생
2 영희 과학 최선생
  1. 1NF (1 정규형) : 테이블의 컬럼값이 원자적이어야 합니다. (한 컬럼의 데이터가 수학,과학 ➡ 1 정규화가 안됨) 즉, 각 컬럼은 하나의 값만 가질 수 있습니다.
  2. 2NF (2 정규형) : 모든 테이블이 1정규화를 만족하고, 기본키가 아닌 모든 열이 기본키에 완전히 종속되어야 합니다. 이를 '완전 함수적 종속성' 이라 합니다. 위 테이블에서 '이름' 과 '선생님'은 학생 ID와 과목에 종속되어 있습니다. 따라서 위 테이블을 두개의 테이블로 분리해야 합니다.

[학생 테이블]

학생 ID 이름
1 철수
2 영희

[과목 테이블]

학생 ID 과목 선생님
1 수학 김선생
1 과학 이선생
2 수학 김선생
2 과학 최선생
  1. 3NF (3 정규형) : 모든 테이블이 2정규화를 만족하고, 기본키가 아닌 모든 열이 기본키에 대해서만 종속되야 합니다. 위 과목 테이블에서 '선생님' 은 '과목'에 종속되어 있습니다. 따라서 두개의 테이블로 분리하여 조건을 만족시킵니다.

[과목 테이블]

학생 ID 과목
1 수학
1 과학
2 수학
2 과학

[선생님 테이블]

과목 선생님
수학 김선생
과학 이선생
과학 최선생
  1. BCNF (보이스-코드 정규형) : 모든 결정자가 후보키의 부분집합이어야 합니다. 위 '과목' 테이블과 '선생님' 테이블은 이미 BCNF 조건을 만족하고 있습니다.

⁉ 이상 현상이란?

이상 현상은 데이터를 추가, 수정, 삭제 할 때 발생하는 것으로 일관성을 해치는 현상입니다.

  • 삽입 이상 : 데이터를 삽입하기 위해  불필요한 데이터도 함께 삽입해야 하는 현상입니다.
  • 갱신 이상 : 전체 데이터 중 일부만 변경하여 데이터가 불일치하는 현상입니다.
  • 삭제 이상 : 데이터 삭제 시 다른 정보까지 함께 삭제되는 현상입니다.

⁉ 반정규화 (역정규화)란?

정규화된 데이터베이스의 성능을 향상시키기 위해 의도적으로 데이터 중복을 허용하는 과정을 말합니다.

과도한 정규화는 JOIN 연산이 늘어나 성능저하가 일어나기 때문에 이러한 문제를 해결하기 위해 사용됩니다.

 

 

⁉️ 반정규화는 왜 할까요? 몇 가지 기법에 대해서 설명해 보세요

 


⁉ RDB 와 NoSQL 의 차이점

  • 데이터 모델
    • RDB : 테이블, 행, 열을 기반으로 하는 스키마가 존재합니다. 데이터는 스키마에 따라 저장됩니다.
    • NoSQL : 문서, 키-값, 그래, 컬럼 등에 따라 다양한 데이터를 저장 할 수 있습니다. 스키마가 없거나 유연한 스키마를 가지고 있습니다.
  • 쿼리 언어
    • RDB : SQL을 사용하여 데이터를 질의하고 조작합니다.
    • NoSQL : SQL 을 사용하지 않으며, 자체 쿼리나 API를 제공합니다.

 

 

 

 

 

 

 

 

참고

링크 1
링크 2

링크 3

'기술면접 > 데이터베이스' 카테고리의 다른 글

DBMS 정의  (0) 2023.11.25
데이터 독립성  (0) 2023.11.25