본문 바로가기
카테고리 없음

[면접 준비] 데이터 베이스 면접 질문과 답변

by 도도새 도 2024. 1. 10.
저는 JAVA 백엔드 개발자, 혹은 React 프론트 엔드 개발자를 목표로 하는 취업 준비생입니다. 면접에서 대답할 주요 관심 주제는 Spring, Java, React, Next.js, JavaScript, TypeScript, OS, Network, DB, Docker입니다. 제가 사용해본 기술 중 통합, 정리한 면접 관련 내용을 정리합니다. 틀린 내용이 있다면 댓글로 지적해주시길 바랍니다. 감사합니다

 

❓ 데이터 베이스가 뭔지 설명해주세요.

더보기

데이터베이스는 일정한 규칙에 의해 구조화된 데이터의 모음이다. 데이터베이스는 릴레이션(rdbms의 테이블), 어트리뷰트(rdbms의 열), 도메인(어트리뷰트의 값)으로 이루어져 있다.

 

이러한 데이터베이스를 제어 관리하는 시스템을 DBMS라고 부른다. DBMS는 지정된 쿼리 언어를 이용해 데이터를 삽입 삭제 수정 조회 할 수 있다.

 

엔터티

 - 실제 세계의 식별 가능한 객체의 독립적 단위를 나타낸다.

 엔터티의 특징

 - 고유성 : 각 엔터티는 고유한 식별자(기본키)를 가진다.

- 관계 : 엔터티 사이에는 다양한 관계가 존재 할 수 있다. ex) 주문 엔터티와 제품 엔터티는 연관관계가 있다.

- 릴레이션 : 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이다.(RDBMS에서 테이블 NoSQL에서 컬렉션이라고 한다.)

- 속성 : 엔터티는 속성(attributes)를 가진다. ex) 고객 엔터티의 이름, 주소, 전화번호 등

- 도메인 : 릴레이션에 포함된 각각의 속성이 가질 수 있는 값의 집합을 뜻한다. ex) 성별 속성의 도메인은 남, 여

 

❓ RDBMS와 NoSQL 데이터 베이스의 차이를 설명해주세요.

더보기

RDBMS

- 대표적으로 MySql, OracleDB  등이 있다.

- 릴레이션을 테이블이라고 칭한다. 데이터는 테이블과 테이블간의 관계를 기반으로 저장된다.

- SQL 쿼리 언어를 사용한다.

- 데이터 무결성을 지원하여 중복 데이터가 없어 변경에 유리하기 때문에 데이터가 자주 변경되어야 하는 시스템에 유리하다.

 

NoSQL

 - 릴레이션을 컬렉션이라고 칭한다. 

 - 스키마가 없거나 유연한 스키마를 가지며 대용량 데이터 및 비정형 데이터를 다루는 데 유리하다.

 - 수평 확장(Scale-out)에 유리하다.

 - Join등의 작업이 불가능하다.

 - 데이터 중복이 발생할 수 있으며, 중복 데이터를 변경 할 시 모든 컬렉션에서 수정이 일어난다. 즉, 변경이 잦지 않은 시스템에 유리하다.

 

* 비정형 데이터란 성계된 모델이나 구조로 구성되지 않은 데이터를 의미한다. 

 

❓ 데이터 무결성에 대해 설명해주세요.

더보기

데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 뜻한다. 

 

 

데이터 무결성 제약조건의 종류와 개념

 

엔터티 무결성(개체 무결성)

 - 기본키에 빈 값, Null을 허용하지 않는다.

 - 기본키는 테이블 내에 단 하나만 존재해야한다.

 

참조 무결성

 - 외래키 값은 Null이거나 참조 릴레이션의 기본키 값이어야한다.

 - 외래키 속성은 참조할 수 없는 값을 가질 수 없다. 즉, 외래키가 가르키는 기본키는 존재하여야한다.

 

도메인 무결성

 - 각 속성에 대한 데이터 유형, 최소값, 최대값 등의 제약 조건을 의미한다.

 

Null 무결성

 - 특정 속성 값에 Null이 허용되지 않으면 해당 속성에는 Byll이 될 수 없다는 제약조건이다.

 

 

 

❓ 정규화에 대해서 설명해주세요.

더보기

정규화는 릴레이션 간 잘못된 종속으로 인한 이상 현상을 해결하거나, 효율적인 저장공간 관리를 위해 릴레이션을 여러개로 분리하는 과정이다. NF(Normal Form)으로 정규화된 과정을 표현한다.  

 

장점:

 - 데이터 중복 감소

 - 업데이트 이상 방지

 - 데이터 무결성 향상

 

기본 정규형 : 제 1정규형, 제 2 정규형, 제 3정규형, 보이스/코드 정규형

고급 정규형 : 제 4 정규형, 제 5 정규형

 

제 1 정규형

 - 테이블의 모든 도메인이 원자 값을 가지고 있어야 한다.

* 도메인 : 속성이 가질 수 있는 값 집합. 즉 컬럼

 

예)

비정규형 테이블

학생ID이름수강 과목
1 홍길동 수학, 영어
2 이순신 역사, 물리, 화학

- 위 테이블의 도메인은 {수학, 영어} 그리고 {역사, 물리, 화학} 이라는 분해 가능한 데이터로 이루어져있다. 

 

1NF 적용 테이블

학생ID이름수강 과목
1 홍길동 수학
1 홍길동 영어
2 이순신 역사
2 이순신 물리
2 이순신 화학

  - 각 도메인을 원자값으로 쪼개 1 정규형이 되었다.

 

제 2 정규형

 - 릴레이션이 1 정규형이다.

 - 부분 함수의 종속성을 제거한 형태이다. 즉 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이어야한다.

- 즉 기본키를 알면 나머지 모든 속성을 알 수 있어야한다.

 

* 함수 종속 ( ex : 릴레이션 R에서 X와 Y속성이 존재한다. 이때 X값을 알면 Y값을 식별 할 수 있다. 그리고 X값에 따라 Y값이 달라진다. 이때 Y는 X에 함수 종속이다.

 

1NF 테이블

학생ID 과목ID 선생님
1 수학 김선생
1 영어 박선생
2 역사 최선생
2 물리 김선생

 기본키가 학생 ID와 과목 ID로 이루어진 복합키이다. 그러나 선생님 컬럼은 과목 ID에만 종속되어있다.

 

2NF 적용 테이블

학생ID 과목ID
1 수학
1 영어
2 역사
2 물리
복합키이다.
 
과목 ID 선생님
수학 김선생
영어 박선생
역사 최선생
물리 김선생

 선생님은 과목 ID에 종속된다. 즉 과목 ID를 알면 선생님을 알 수 있게 되었다.

 

 

제 3 정규형

- 2NF을 만족한다.

 - 비기본 속성(기본키가 아닌 속성)이 이행적 함수 종속을 갖지 않는다.

 *이행적 함수 종속 : A-> B -> C가 존재하면 논리적으로 A -> C가 성립한다.  이럴때 C는 A에 이행적으로 함수 종속되었다고 한다. 즉 간접적으로 종속되는 것이다.

 

2NF 테이블

학생ID 학생 주소 우편 번호
1 서울 강남구 12345
2 서울 종로구 67890

 이 테이블에서 학생 주소는 학생 ID에 함수 종속적이다. 또한 우편번호는 학생 주소에 함수 종속적이다. 즉, 우편번호는 학생 ID에 이행적으로 종속되어있다.

 

3NF 적용 테이블

학생 ID 학생 주소
1 서울 강남구
2 서울 종로구

 

학생 ID 우편번호
1 12345
2 67890

각 컬럼이 기본키에 직접 종속하게 됨으로서 간접 종속을 제거하였다.

 

보이스/ 코드 정규형

 - 3NF를 만족한다.

 - 결정자가 후보키가 아닌 함수 종속 관계를 모두 제거한다. 즉 모든 결정자가 후보키인 상태이다.

* 후보키 : 기본키가 될 수 있는 후보. 유일성과 최소성을 만족한다. 

* 결정자 : 테이블 내의 한 속성이 다른 속성을 식별(결정) 가능할 때 이 속성을 결정자라 한다.

 

3NF 테이블

강좌ID 강사 강의실
101 김교수 301호
102 이교수 302호
103 김교수 303호

 위 테이블의 강사와 강의실은 강좌 ID에 종속적이다. 즉, 강좌ID가 강사를 결정지을 수 있고, 강의실을 결정지을 수 있다. 그러나 강사가 강의실을 결정 지을 수도 있다는 문제가 있다. 즉, 강사는 결정자이지만 후보키가 아니다.

 

BCNF 적용 테이블

강좌ID 강사
101 김교수
102 이교수
103 김교수

 

강사 강의실
김교수 301호
이교수 302호
김교수 303호

 

 

❓ 데이터 무결성에 대해 설명해주세요.

더보기

데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 뜻한다. 

 

데이터 무결성 제약조건의 종류와 개념

 

엔터티 무결성(개체 무결성)

 - 기본키에 빈 값, Null을 허용하지 않는다.

 - 기본키는 테이블 내에 단 하나만 존재해야한다.

 

참조 무결성

 - 외래키 값은 Null이거나 참조 릴레이션의 기본키 값이어야한다.

 - 외래키 속성은 참조할 수 없는 값을 가질 수 없다. 즉, 외래키가 가르키는 기본키는 존재하여야한다.

 

도메인 무결성

 - 각 속성에 대한 데이터 유형, 최소값, 최대값 등의 제약 조건을 의미한다.

 

Null 무결성

 - 특정 속성 값에 Null이 허용되지 않으면 해당 속성에는 Byll이 될 수 없다는 제약조건이다.

 

 

❓ 트랜잭션에 대해 설명해주세요.

더보기

DB 트랜잭션이란 DBMS에서 여러 개의 데이터 베이스 작업을 하나의 논리적 단위로 묶어서 실행하는 개념이다.

 

예를 들어 A가 B에게 2000원을 이체한다고 하면, A DB에서 2000원 감소 가능한지 확인, A DB에서 2000원 감소, B DB에 2000원 추가가 하나의 작업 단위로 이루어져야 한다. 만약 중간에 끊기게 된다면? A에서 2000원이 감소했으나 B는 받지 못해 결론적으로 2000원만 잃은 상황이 벌어진다!

 

트랜잭션의 특징

 - 묶어서 ACID라고 부른다.

원자성(Atomicity) : 트랜잭션의 모든 작업은 원자적으로 수행되어야한다. 모든 작업이 성공하면 트랜잭션이 성공(커밋)하고 하나라도 실패하면 작업을 취소(롤백) 하여야한다.

일관성(Consistency) : 트랜잭션 이전과 이후의 DB는 항상 일관성을 유지해야한다. 즉 DB에 기록된 모든 데이터는 규칙에 따라 유효한 상태를 유지하여야한다.

고립성(Isolation) : 트랜잭션이 동시에 실행될 때 각 트랜잭션이 다른 트랜잭션에 영향을 받지 않아야한다.

지속성(Durability) : 트랜잭션이 완료되면 결과는 영구 저장되어야한다. 즉, DB는 보존되어야한다.

 

 

❓ 고립성에 대해 아는 바를 더 말해주세요.

더보기

고립성은 DBMS에서 트랜잭션이 동시 실행될 경우 각 트랜잭션이 다른 트랜잭션에 영향을 끼치지 않아야 한다는 것을 의미한다.

 

고립성은 트랜잭션 격리 수준을 통해 설정된다. 낮은 수준부터 높은 수준까지 주요 격리 수준은 네 가지가 존재한다.

 

Read Uncommitted

 - 가장 낮은 격리 수준, 다른 트랜잭션에서 아직 커밋하지 않은 변경사항을 읽을 수 있다.

 - 데이터 일관성이 깨질 수 있다.

 

Read Commited

 - 커밋된 데이터만 읽을 수 있다. 즉 커밋되지 않은 정보는 읽을 수 없다.

 - 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정 가능하다. 

 - 대부분 DBMS에서 디폴트로 사용한다.

 

Repeatable Read

 - 같은 쿼리를 반복 수행할 때 결과가 일정함을 보장한다.

 - 새로운 레코드가 추가되는 것은 막지 못한다.

 

Serializable

 - 트랜잭션을 순차적으로 진행시킨다. 각 행을 격리하고 여러 트랜잭션이 같은 행에 접근 할 수 없으며 대기하여야한다.

 - 교착 상태가 일어날 확률이 크고 성능이 떨어진다.

 

 

댓글