jacketList

기술면접 - 데이터베이스 본문

면접

기술면접 - 데이터베이스

ukkkk7 2023. 8. 22. 17:08
728x90
반응형

데이터베이스 면접 예상질문 정리 23.09.04ver

 

DBMS가 무엇이고, DB를 사용하는 이유는?

DBMS(Data Base Management System)는 데이터베이스 관리 시스템으로 여러 사용자가 데이터베이스에 접근해 사용할 수 있도록 하는 소프트웨어

 

DB를 사용하지 않고 OS에 종속적인 프로그램 파일을 사용할 경우 프로그램의 확장성을 해침

 

DB의 특징

 

실시간 접근성: 비정형적인 질의에 대해 실시간 처리에 의한 응답이 가능

 

지속적인 변화: DB의 상태는 동적이므로 새로운 데이터의 삽입(insert), 삭제(delete), 갱신(Update)으로 항상 최신 데이터를 유지해야 한다.

 

동시 공용: 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.

 

내용에 의한 참조: 데이터를 참조할 때 사용자가 요구하는 데이터 내용으로 찾는다.

 

 

DB에서 View란 무엇인가?

사용자에게 허용된 데이터만 제한적으로 보여주기 위해 하나 이상의 테이블에서 유도된 가상 테이블

저장장치 내에 물리적으로 존재하지 않음

JOIN문 사용의 최소화로 사용자에게 편의성 제공

 

 

DB에서 키의 종류와 특징

 

슈퍼키 

유일성을 만족해야 하는 키

필드 하나 혹은 필드 여러개의 묶음도 슈퍼키 가능 필드가 여러개일때 '복합키'라고도 부름

 

후보키

기본키가 될 수 있는 후보들

슈퍼키 중에서 최소성을 만족하는 키

후보키 = 유일성 + 최소성 만족

 

유일성: 모든 레코드에서 해당 필드에 중복된 값이 나타나지 않는다

최소성: 최소한의 필드로 레코드를 유일하게 구별할 수 있어야 한다

 

기본키

특정 테이블이나 레코드를 구별하기 위해 후보 키 중에서 선택된 하나의 고유한 식별자 -> 값이 변하지 않고 단순한 것을 선택

중복 or null값을 가질 수 없다.

 

대체키

후보키 중에서 키본키로 선택된 것을 제외한 나머지 모든 것

 

외래키

한 테이블의 키 중에서 다른 테이블의 레코드를 유일하게 식별할 수 있는 키

중복값과 null값 허용, 참조되는 테이블에서 유일한 값을 갖는 필드를 참조

 

참조 무결성을 지키기 위해 RESTRICTED와 CASCADE, SET NULL이라는 개념을 외래키에 적용할 수 있도록 기능을 제공한다.

RESTRICTED: 레코드를 변경 또는 삭제하고자 할 때 해당 레코드를 참조하고 있는 개체가 있다면, 변경 또는 삭제 연산이 불가능하다.

CASCADE: 레코드를 변경 또는 삭제하면, 해당 레코드를 참조하고 있는 개체도 변경 또는 삭제된다.

SET NULL: 레코드를 변경 또는 삭제하면, 해당 레코드를 참조하고 있는 개체의 값을 NULL로 설정한다.

 

트랜젝션(Transaction)이 무엇이며 특징은 어떤것이 있는가?

데이터베이스 상태를 변화시키는 하나의 논리적인 작업 단위

작업이 일부만 적용되는 현상을 방지하기 위해 이전 상태로 복구하는 기능

하나의 트랜젝션은 Commit(작업완료) 되거나 Rollback(취소) 된다.

 

특성(ACID)

원자성(Atomicity) 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.

일관성(Consistency) 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 한다.

독립성(Isolation) 둘 이상 트랜젝션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.

영속성(Durability) 완료된 결과는 영구적으로 반영되어야 한다.

 

DB정규화

 

1정규화: 모든 속성 값이 원자 값을 갖도록 분해

2정규화: 1정규형을 만족시키고 기본키에 완전 함수 종속이도록 분해

※ 완전함수 종속: 기본키의 부분집합이 다른 값을 결정하지 않는 것 -> 기본키만이 값을 결정

3정규화: 2정규형 만족시키고 아래와 같은 이행적 종속 관계를

학생번호 -> 강좌이름 -> 수강료 -> 학생번호

이처럼 기본키가 아닌 속성이 기본키에 비이행적 종속하도록 분해

학생번호 -> 강좌이름 , 강좌이름 -> 수강료

BCNF정규화: 제 3정규형 만족시키고, 함수종속성 x -> y 가 성립할 때 모든 결정자 x가 후보키가 되도록 분해

 

정규화를 하는 이유?

데이터 중복 방지 -> 무결성 유지 -> DB를 효율적으로 관리

※ 릴레이션의 분해로 릴레이션간 join연산이 많아질수록 질의에 대한 응답 시간이 느려질 수 있다.

-> 조인이 많이 발생하여 성능저하가 나타나는 경우 반정규화를 적용

 

반정규화란?

릴레이션 간의 join연산이 늘어나 질의 성능이 저하될 경우 시스템의 성능 향상을 위해 수행하는 기법

 

※ 반정규화시 주의점

데이터의 무결성이 깨질 수 있고 입력, 수정, 삭제 질의문에 대한 응답 시간이 늦어질 수 있음

 

 

RDBMS와 NoSQL

 

RDBMS(관계형 데이터베이스)

정해진 스키마에 따라 데이터를 테이블에 저장하는 관계형 데이터베이스

  • 장점: 스키마에 맞추어 데이터를 관리 -> 데이터의 정합성(데이터들의 값이 서로 일치함) 보장 
  • 단점: 시스템이 커질수록 쿼리가 복잡, 성능 저하, 수평적 확장이 어려움

NoSQL

스키마가 없거나 느슨해 데이터 간의 관계없이 자유로운 형태로 데이터를 저장하는 비정형 데이터베이스

  • 장점: 스키마 없이 key-value형태로 데이터를 관리하여 좀 더 자유롭게 데이터를 관리할 수 있음
  • 단점: 데이터가 중복으로 추가 가능하기 때문에 관리가 필요하다

 

트리거가 무엇인가?

특정 테이블에 반응해 DML이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램

DML 실행 -> 자동으로 정의된 프로시저 실행

 

 

DBCP(Database Connection Pool) , 커넥션풀?

Client의 요청에 따라 각 Applicaiton의 Thread에서 DB에 접근하기 위해서는 Connection(연결)이 필요한데 이때 미리 연결해놓은 객체들을 pool(웅덩이)에 저장해두고 요청이 왔을 때 빌려주고 반납받는 방식

 

 

장점

  • 100000명의 유저가 동시 접속 중일때 매번 DB와의 연결을 맺고 끊는 불필요한 과정이 사라져 성능향상

단점

  • 커넥션이 모자랄 경우 커넥션이 반납될 때까지 기다려야 해서 원활한 서비스가 이루어지지 않음
  • 커넥션은 객체이기 때문에 메모리를 차지함 -> 무작정 늘릴경우 오히려 성능이 떨어질수 있음

 

inner join 과 outer join

 

outer join과 inner join

join - 데이터의 규모가 커져 정보를 수용하기 어려울 때 테이블을 분할하고 테이블 간 관계성을 부여

inner join -  서로 연관있는 내용만 검색하는 조인 방법

outer join - 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법

left -  A테이블을 기준으로 B 테이블 매치, 왼쪽 테이블 한개의 레코드와 오른쪽 테이블 여러개의 레코드가 일치할 때 왼쪽 레코드를 여러번 표시, 왼쪽은 무조건 표시 매치되는 레코드가 없으면 NULL 표시

right - B테이블 기준 

 

 

Index가 무엇이고 장/단점

데이터의 저장 성능을 희생하고 대신에 데이터의 검색 속도를 높이는 자료구조

인덱스 생성시 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 물리적 주소와 함께 저장된다.

 

장: 테이블이 정렬되어 있기 때문에 조건에 맞는 데이터를 빠르게 찾을 수 있음(검색 성능 향상)

단: 테이블 내 값들을 계속 정렬된 상태로 유지해주어야 하기 때문에 추가 작업이 필요함, 추가 저장공간이 필요함

 

언제 사용하면 괜찮을까

규모가 작지 않은 테이블

Insert, Update, Delete가 자주 발생하지 않는 컬럼

JOIN이나 Order by 가 자주 사용되는 컬럼

 

Index의 자료구조

  • Hash Table(해시 테이블)
    • 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현
    • 검색 시간 복잡도가 O(1)로 매우 빠르나 부등호(<, >)와 같은 연속적인 데이터를 위한 순차 검색이 불가능
  • B+Tree
    • 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조
    • BTree 리프노드들을 LinkedList로 연결하여 순차 검색이 용이하다
    • 시간복잡도 O(log2N)를 갖지만 일반적으로 사용되는 자료구조

 

이상 현상의 종류에 대해 설명

이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 수정, 삭제 할 때 생기는 논리적 오류

  • 삽입 이상: 자료 삽입시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 상황
  • 갱신 이상: 중복된 데이터 중 일부만 수정되어 모순이 일어나는 상황
  • 삭제 이상: 의도하지 않은 다른 정보까지 삭제되는 상황

위의 이상 현상을 방지하기 위해 정규화를 실시

 

 

 

클러스터링 과 리플리케이션

 

리플리케이션

  • 여러개의 DB를 권한에 따라 수직적인 구조로 구축하는 방식
  • 비동기 방식으로 노드들 간 데이터를 동기화한다

장점: 비동기 방식으로 데이터가 동기화되어 지연 시간이 거의 없다.

단점: 노드들 간의 데이터가 동기화되지 않아 일관성 있는 데이터를 얻지 못할 수 있다.

 

클러스터링

  • 여러 개의 DB를 수평적인 구조로 구축하여 Fail Over한 시스템을 구축하는 방식
  • 동기 방식으로 노드들 간의 데이터를 동기화 한다.

장점: 1개의 노드에 문제가 생겨도 다른 노드가 살아있어 시스템 운영에 문제가 되지않음

단점: 여러 노드들 간의 데이터를 동기화 하는 시간이 필요하므로 리플리케이션에 비해 쓰기 성능이 떨어짐

 

 

728x90
반응형

'면접' 카테고리의 다른 글

기술면접 - 운영체제  (0) 2023.09.07
기술면접 - 네트워크  (0) 2023.08.28
기술면접 준비 - Java  (0) 2023.08.23
기술면접 - Spring  (0) 2023.08.22