기술면접 - DB

개나뇽·2025년 1월 7일

기술면접

목록 보기
5/8

인덱스란

  • DB 테이블 검색 속도를 향상키기기 위한 자료구조
  • 책의 색인과 같음
  • Index가 적용되지 않은 컬럼 조회 시 full scan 수행으로 처리 속도가 떨어짐

인덱스의 자료구조

해시 테이블

  • 컬럼의 값으로 생성된 해시를 기반해 인덱스를 구함
  • 시간복잡도가 O(1)로 매우 빠름
  • 부등호와 같은 연속적 데이터를 위한 순차 검색이 불가

B+Tree

  • 자식 노드가 2개 이상인 B-Tree를 개선한 자료구조
  • BTree의 리프 노드들을 LinkedList로 연결해 순차 검색이 용이
  • 해시 테이블보다 느린 O(lon2n)의 시간복잡도를 가졌으나 흔히 사용

DB 정규화

  • 데이터의 무결성 최대화하며, 중복 데이터를 최소화하기 위한 방법

무결성

  • 데이터가 정확하고 일관되며 신뢰성있는 상태.

종류

  • 제1 정규형 : 모든 속성 값이 원자 값을 갖도록 분해
  • 제2 정규형 : 1 정규형을 만족하고, 기본키가 아닌 속석인 기본키에 완전 함수 종속(기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미)이도록 분해
  • 제3 정규형 : 2 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 직접 종속(A -> B -> C가 성립하는 것으로 A, B와 B, C로 분해하는 것)하도록 분해
  • BCNF 정규형 : 3 정규형을 만족하고, 함수 종속성 x -> y가 성립시 모든 결정자가 X가 후보키가 되도록 분해

트랜잭션(Transaction)?

  • 데이터베이스 작업 단위
  • 쿼리 실행시 동일한 Connection 객체를 공유해 에러 발생시 모든 과정을 롤백하기 위한 방법

트랜잭션의 ACID

  • 원자성(A) : 트랜잭션내 작업은 전부 성공 또는 실패 해야함.
  • 일관성(C) : DB 상태는 트랜잭션 전-후와 상관 없이 일관되게 유지해야 함.
  • 격리성(I) : 트랜잭션이 실행되는 동안 다른 트랜잭션이 간섭해 변경중인 데이터 값을 훼손해서는 안됨.
  • 지속성(D) : 성공한 트랜잭션은 변경한 데이터를 영구 저장해야 함.

낙관적 동시성 제어와 비관적 동시성 제어

낙관적 동시성 제어(낙관적 락)

  • 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라 가정
  • Lock을 사용하지 않는 대신, 레코드의 버전을 통해 수정 시점에 대한 변경 여부 검사

비관적 동시성 제어(비관적 락)

  • 사용자들이 같은 데이터를 동시에 수정할 것을 가정
  • 공유락, 베타락 등과 같은 Lock을 사용
  • 시스템의 동시성을 저하할 수 있어 wait 또는 nowait 옵션과 함께 사용

DB 락의 종류

  • DB 락은 여러 트랜잭션이 하나의 데이터에 동시 접근시 제어하는 도구

S-LOCK

  • 트랜잭션이 읽기시 사용하는 락, 데이터 읽기는 가능하나 쓰기는 불가

X-LOCK

  • 트랜잭션이 읽고 쓰기시 사용하는 락, 데이터를 읽고 쓰는게 가능

커넥션 풀 사용 이유와 장점

  • 커넥션은 TCP/IP 통신의 3-way handshaking에 의해 시간이 소요됨
  • 처음에 여러 커넥션을 생성하고 반환하며, 재사용하는 커넥션을 모아둔 커넥션 풀 등장
  • 멀티스레드 환경에서는 각 스레드가 커넥션을 점유해 사용, 커넥션 부족시 커넥션이 풀에 반환까지 대기하는 상황 발생
  • 커넥션 풀이 바닥나지 않도록 주의

RDB와 NoSQL 차이

RDB

  • 2차원 행과 열로 데이터의 관계를 관리하는 DB
  • 스키마에 맞춰 데이터를 관리해 데이터 정합성 보장
  • 시스템이 커지며 쿼리 복잡도, 성능 저하, 수평 확장의 어려움 같은 문제 발생

NoSQL

  • RDB 관계가 복잡해지는 것을 극복하기 위해 등장
  • Key-Value 형태로 자유로운 데이터 관리
  • 중복 데이터에 대한 관리 필요

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

리플리케이션

  • 여려 DB를 권한에 따라 수직적인 구조로 구축하는 방식
  • 비동기 방식으로 노드들 간의 데이터 동기화
  • 비동기 방식으로 데이터가 동기화되어 지연 시간이 거의 없음
  • 노드들 간의 데이터가 동기화되지 않아 일관성 있는 데이터를 얻지 못할 수 있음

클러스터링

  • 여러 DB를 수평적인 구조로 구축해 Fail Over한 시스템을 구축
  • 동기 방식으로 노드들 간의 데이터 동기화
  • 1개의 노드가 죽어도 다른 노드가 살아 있어 장애없이 시스템 운영
  • 동기화에 지연 시간이 있어 리플리케이션에 비해 성능이 떨어짐

데이터베이스 튜닝과 방법

  • 데이터베이스의 구조, 데이터베이스 자체, 운영체제 등을 조정해 데이터베이스 시스템의 성능을 향상 시키는작업

출처

https://mangkyu.tistory.com/93
감사합니다!

profile
정신차려 이 각박한 세상속에서!!!

0개의 댓글