[코비] 데이터베이스 면접 예상 질문

최정윤·2023년 10월 12일
0

코비

목록 보기
23/38

1. Rdbms 와 no-sql 의 차이점은?

RDBMS는 관계형 데이터베이스 관리 시스템을 의미합니다.

관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스입니다.
또한 RDMBS는 관계를 맺고 모여있는 테이블들의 집합체로 이해할 수 있습니다.
이러한 테이블 간의 관계에서 서로의 칼럼을 기준으로 Join이 가능하다는 게 RDBMS의 가장 큰 특징입니다.

NoSQL이란(Not Only SQL)의 비 관계형 데이터베이스로서 약자로 말 그대도 위에서 설명한 RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하고 있습니다.

NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않습니다.
관계 정의가 없으니 Join이 불가능하고 트랜잭션을 지원하지 않습니다.
NoSQL은 점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상하기 위해서는 장비가 좋아야 하는 Scale-Up의 특징이 비용을 기하급수적으로 증가시키기 때문에 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였습니다.
RDB는 Transaction과 정합성에 초점이 맞춰진 데이터베이스라면 NoSQL은 RDB 보다는 고속의 읽기와 쓰기가 가능하고 분산처리에 뛰어다는 점이 특징입니다.

사전 지식
Scale-Up : cpu 변경 램 추가 등 하드웨어를 변경하여 시스템의 성능을 높임
=> rdbms에서 사용하는 성능 개선 방식 (비용이 많이 발생)
Scale-Out : 하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리함
=> 비교적 저렴한 방식으로 서버 유지 가능

2. 테이블 파티셔닝이란?

파티션의 사전적 의미는 칸막이 분할입니다.
실생활 넓은 사무실 공간을 부서나 팀 단위로 적당히 나누어 사용하는 것처럼 데이터 베이스에서 테이블과 인덱스를 분할하여 저장하는 개념입니다.
데이터가 일정 규모를 넘어서면 인덱스 조정이나 쿼리 변경만으로는 한계가 있습니다.
적절한 인덱스가 생성되었다고 해도 랜덤 액세스의 양이 방대해지기 때문에 오히려 테이블 풀스캔이 나을 수도 있고 이러한 탐색은 상당히 비효율적이고 시간도 오래 걸립니다.
이럴 때 파티션 개념을 적용하게 된다면 쿼리를 튜닝하지 않고도 성능을 끌어올릴 수 있습니다.
그래서 파티셔닝 개념은 대용량 데이터가 분포된 테이블에 적절하게 사용하면 큰 효과를 볼 수 있습니다.
파티셔닝에는 대표적으로 4가지의 파티셔닝 방법이 있습니다.

1) range partitioning (범위 파티셔닝)

첫 번째로 range partitioning 즉 범위 파티셔닝이 있는데 데이터 내의 특정 범위 내역을 정하여 파티셔닝 해주는 방법으로 사용하기 쉽다는 장점이 있으나, 데이터가 균일하게 분포되지 못해서 성능 저하가 생길 수 있다는 단점이 존재합니다.

2) hash partitioning

두 번째로 hash partitioning 즉 해시 파티셔닝이 있습니다.
range 파티션에서 범위 분포에 대한 단점을 보완한 것으로 hash 함수가 데이터를 균등하게 분포시켜 성능 하락을 방지합니다.
하지만, 데이터의 관리가 어렵다는 단점이 존재합니다.

3) list partitioning

세 번째는 list partitioning 방법이 있는데 파티셔닝 할 항목을 관리자가 직접 지정하는 방식으로 잘 설정한 결우에는 빠른 성능이 보장되지만, 잘못 설정된 경우에는 성능 저하가 발생할 수 있습니다.

4) conposite partitioning

마지막으로 conposite partitioning 이 존재합니다.
이름 그대로 복합 파티션으로 위의 파티셔닝을 복합적으로 사용하는 것입니다.

3. 트랜잭션의 4가지 성질에 대해 설명해주세요.

트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻합니다.
또한 트랜잭션은 4가지의 성질을 가지고 있습니다.

1) Automicity

트랜잭션은 모두 완료되거나 하나도 완료되지 않아야 합니다.

2) Consistency

트랜잭션의 작업 처리 결과는 항상 일관성을 유지해야 합니다.

3) Isolation

하나의 트랜잭션이 작동하고 있을 때 다른 트랜잭션이 해당 트랜잭션의 연산에 끼어들 수 없습니다.

4) Durability

트랜잭션이 완료된 후의 데이터는 영구적으로 보존되어야 합니다.

4. Commit과 Rollback에 대해 설명해주세요.

COMMIT

  • 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
  • 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
  • COMMIT 수행하면, 하나의 트랜젝션 과정을 종료하게 된다.
  • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다.
  • 이전 데이터가 완전히 UPDATE된다.
  • 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.

ROLLBACK

  • 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
  • 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
  • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 취소한다.
  • 이전 COMMIT한 곳까지만 복구한다.

트랜젝션 작업 중 하나라도 문제가 발생하면, 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야 한다.

  • 문제가 발생하면, 논리적인 작업의 단위를 모두 취소해 버리면 되기 때문이다.

COMMIT 명령어와 ROLLBACK 명령어의 장점

  • 데이터 무결성이 보장된다.
  • 영구적으로 변경하기 전에 데이터의 변경사항을 확인할 수 있다.
  • 논리적으로 연관된 작업을 그룹화할 수 있다.

COMMIT 추가 설명

  • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다.
  • 이전 데이터가 완전히 UPDATE된다.
  • 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.

ROLLBACK 추가 설명

  • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 취소한다.
  • 이전 COMMIT한 곳까지만 복구한다.

5. 데이터베이스에서 인덱스의 특징과 이를 활용했을 때 어떤 장점이 존재하는지 설명해주세요.

인덱스란?

인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주는 방법입니다.
관계형 데이터베이스에서는 B+Tree구조로 된 index를 사용하여 검색 속도를 향상시킵니다.
특히 select ~ where 쿼리처럼 특정 데이터를 찾을 때 빠른 속도로 검색할 수 있게 해 줍니다.

인덱스의 구조

인덱스는 Btree, B+tree(대부분), Hash, Bitmap로 구현할 수 있습니다.
인덱스를 생성하면 특정 컬럼(속성)의 값을 기준으로 정렬하여 데이터의 물리적 위치 주소와 함께 별도 파일에 저장합니다.
이때 특정 컬럼을 'search-key'라고 하고 실제 데이터의 물리적 위치 값을 'pointer'라고 합니다.
보통 인덱스는 테이블 크기의 10% 정도의 저장 공간을 차지합니다.

인덱스를 사용하는 이유

테이블의 데이터는 순서 없이 쌓이게 되므로 특정 조건의 데이터를 찾으려면 테이블의 모든 데이터에 접근하여 비교하는 과정이 필요합니다.(full table scan) 하지만 인덱스가 있는 경우 search-key가 정렬되어 있기 때문에 조건 검색 시 속도가 빠릅니다.
만약 대량의 데이터를 가지고 있고 select ~ where 같은 특정 조건의 데이터를 찾을 때, 인덱스를 활용하여 빠르게 데이터를 가져올 수 있습니다. 반대로 데이터의 양이 많지 않다면 굳이 인덱스를 사용할 이유가 없어집니다.

'클러스터형 인덱스'와 '보조 인덱스'

  • Clustering index : 특정 컬럼을 기본키로 지정하면 자동으로 인덱스가 생성되고 테이블 자체가 정렬된 인덱스가 됩니다. (컬럼을 기본키로 지정하면 테이블이 기본키를 정렬함)
  • Secondary index : 별도의 공간에 인덱스를 생성합니다. (create index 혹은 고유키를 지정하면 생성)

인덱스의 장단점

인덱스의 장점은 빠른 검색 속도 향상입니다.
인덱스의 단점은 추가 저장공간이 필요하다는 점입니다.(약 10%)
그리고 insert, update, delete 등의 변동 사항이 있는 경우 성능이 저하됩니다.
왜냐하면 데이터 변경 시 인덱스도 수정되어 추가 비용이 발생하기 때문입니다.

6. Elastic Search와 RDBMS(postgresql)의 차이에 대해 설명해주세요.

검색 시스템의 구성 요소

수집기

  • 정보 수집
  • 웹에서 필요한 정보를 수집하는 프로그램
  • 크롤러, 스파이더, 웜, 웹로봇 등으로 나뉜다.

스토리지

  • 수집한 데이터를 저장
  • 데이터베이스에서 데이터를 저장하는 물리적인 저장소
  • 색인한 데이터를 스토리지에 보관

색인기

  • 수집한 데이터를 검색에 적절한 형태로 변환
  • 다양한 형태소 분석기를 조합해 정보에서 의미 있는 용어를 추출 및 역색인 구조로 데이터 저장

검색기

  • 색인된 데이터에서 일치하는 문서를 찾는 검색기
  • 검색한 질의를 형태소 분석해 색인기로 저장한 데이터와 비교해 결과로 반환한다.
  • 형태소 분석기에 따라 검색 품질이 달라진다.

관계형 데이터베이스와의 차이점

관계형 데이터베이스

  • 데이터베이스는 데이터를 통합 관리하는 데이터 의 집합
  • 저장되는 구조 • 중복을 제거 • 정형 데이터 구조화 • 행과 열로 구성 • 테이블 구조로 저장
  • sql 문을 이용해 원하는 정보의 검색이 가능
  • 텍스트 매칭을 통한 단순한 검색만 가능
  • 텍스트를 여러 단어로 변형하거나 여러 개의 동의어나 유의어를 활용한 검색은 불가능

검색 엔진

  • 데이터베이스에서는 불가능한 비정형 데이터를 색인하고 검색할 수 있음
  • 형태소 분석을 통해 자연어처리 가능
  • 역색인 구조를 바탕으로 빠른 검색 속도 보장

용어 비교


[참고링크]

profile
[공부블로그] https://jeong-yooon.tistory.com/

0개의 댓글