티스토리 뷰

면접질문

[DB] 면접 스터디 (1)

sayho 2022. 2. 28. 21:12
데이터베이스와 DBMS

  여러사람이 공유하는 데이터의 집합데이터베이스라고 하고 이런 데이터를 관리하기 위한 시스템을

  DBMS라고 한다. 

데이터베이스 성능

  데이터베이스는 컴퓨터의 기억장치 중 가장 속도가 느린 물리디스크에 저장된다. 뿐만 아니라 물리 디스크에

  데이터의 입출력이 발생할 때 데이터가 위치한 섹터로 디스크 헤더가 움직여야 하기 때문에 디스크 헤더의

  대기시간 + 이동시간만큼 더 걸리게 된다. 그렇기 때문에 데이터베이스의 성능 개선은 아주 중요하다.

 

Clustered 인덱스와 Secondary 인덱스

  Clustered 인덱스기본키를 사용하여 인덱싱을 한다. 인덱스는 데이터 블록의 첫번째 레코드 주소값을 갖고 

  있고 데이터를 삽입시 정렬이 되기 때문에 범위 질의에 유리하다. Clustered 인덱스는 테이블당 한 개만 생성할 

  수 있다. 

  Secondary 인덱스는 기본키외의 컬럼을 인덱스 기준으로 삼는다. 기본키가 아니기 때문에 중복될 가능성이 있고

  데이터가 정렬되지 않기 때문에 범위 질의에 유리하지 않다. 그리고 모든 레코드의 주소를 가지고 있기 때문에

  Clusterd 인덱스에 비해 더 많은 공간을 차지하게 된다. 

  

데이터베이스 정규화

  관계형 데이터베이스에서 이상현상과 중복되는 데이터를 최소화 하기위해 데이터를 구조화를 하는 일련의

  과정이다. 

 

  • 삭제이상 : 튜플을 삭제했을 때 원치 않게 값들도 삭제되는 경우
  • 갱신이상 : 속성 값을 수정했을 때 일부의 값만 수정이 되는 경우
  • 삽입이상 : 삽입하려고 할 때 원하지 않는 필드의 값을 삽입해야하는 경우
데이터베이스 정규화 과정
  • 제 1 정규형 :컬럼은 하나의 값만 가질 수 있다. 비 원자적인 값을 허용하지 않는다. 
  • 제 2 정규형 : 종속자가 기본키에만 종속이 되는 완전 함수적 종속 관계를 갖는 경우 경우 분리를 해줘야 한다. 
  • 제 3 정규형 : 기본키가 아닌 모든 속성이 기본키에 대해 이행 함수적 종속 관계라면 분리를 해줘야 한다.
  • BCNF : 키가 아닌 속성에서의 부분집합에서 함수 종속 관계가 발견된다면 분리를 해줘야 한다. 
정규화의 장점과 단점

  정규화를 통해 이상현상과 데이터의 중복을 막을 수 있고, 데이터베이스 구조를 확장시킬 때 일부만 수정해주면

  된다. 그러나 지나친 정규화를 하게 되면 테이블 분해로 인해 데이터를 조회 시 JOIN 연산을 많이 하기 때문에

  질의에 대한 응답 속도가 느려진다. 

반정규화

  시스템의 성능 향상을 위해 다시 반정규화를 한다. 자주 사용되는 테이블에 접근하는 프로세스 수가 많거나

  테이블들이 지나치게 JOIN이 많이 되고 대량의 데이터를 처리하는 경우 반 정규화의 대상이 된다. 

Lock

  락은 트랜잭션 처리의 순차성을 보장하기 위한 기능이다. 

  • Shared Lock(공유 락) : 데이터를 읽을 때 사용된다. 공유 Lock 설정이 되어있다면 데이터(레코드, 테이블)를 동시에 읽을 수 있다.
  • Exclusive Lock(배타 락) : 데이터를 수정할 때 사용된다. 트랜잭션이 완료될 때까지 데이터는 배타 락 상태를 유지한다. 트랜잭션이 해제될 때까지 다른 트랜잭션은 데이터에 접근할 수 없다.  
트랜잭션

  나누어지지 않는 작업의 단위를 트랜잭션이라고 한다. 그렇기 때문에 하나의 트랜잭션에 여러가지 쿼리가 들어갈

  수 있다.

트랜잭션의 특성
  • 원자성 : 트랜잭션의 결과는 데이터베이스에 반영이 되거나 되지 않아야 한다. 트랜잭션 내에서 실행되는 모든 쿼리는 모두 완벽하게 수행되어야 하고 어느 하나라도 오류가 발생하게 되면 트랜잭션은 취소되어야 한다. 
  • 일관성 : 트랜잭션이 성공적으로 완료되면 데이터 베이스도 일관된 상태를 유지한다.
  • 독립성/격리성 : 두개 이상의 트랜잭션이 병행으로 실행될 때 트랜잭션에 다른 트랜잭션의 연산이 개입할 수 없다. 트랜잭션이 완료될 때까지 다른 트랜잭션이 수행 결과를 참조할 수 없다.
  • 영속성/지속성 : 트랜잭션이 정상 종료된 뒤 데이터베이스에 영구적으로 저장되어야 한다.
트랜잭션 상태 변화
  • 트랜잭션이 시작되면 트랜잭션은 Active 상태로 변하게 된다. 수행이 완료되면 트랜잭션은 수행이 완료 되었지만 커밋이 되지 않은 상태인 Partially Committed 상태가 된다. Committed는 트랜잭션이 완료되고 커밋이 된 상태가 된다. 트랜잭션 실행을 실패하게 된다면 Failed 상태가 되고 Aborted는 트랜잭션이 취소되어 트랜잭션 실행 이전 상태로 돌아간 상태를 말한다.
교착상태

  복수의 트랜잭션을 사용하다보면 교착상태가 일어날 수 있다. 교착상태란 두 개 이상의 트랜잭션이 특정

  자원의 잠금을 획득한 채 다른 트랜잭션이 소유하고 있는 자원의 잠금을 요구하게되면 교착상태에 빠진다.

  1. 트랜잭션을 자주 커밋하여 교착상태를 방지
  2. 정해진 순서대로 테이블에 접근한다
  3. 읽기 잠금 획득을 피한다
Statement와 PreparedStatement

  두가지 다 쿼리를 실행하기 위한 라이브러리이다.

참고
https://kay0426.tistory.com/70
https://sabarada.tistory.com/121

 

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

[Day02] 디자인 패턴  (0) 2022.12.14
[Day01] 네트워크와 운영체제  (0) 2022.12.13
MVC 패턴  (0) 2022.01.30
API와 SDK  (0) 2022.01.30
[네트워크] HTTP  (0) 2022.01.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함