Skip to content

Latest commit

 

History

History
207 lines (133 loc) · 9.04 KB

File metadata and controls

207 lines (133 loc) · 9.04 KB

Database

DB에서의 Commit과 Rollback이란?

  • 커밋(Commit): 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영
    • 작성한 쿼리문에서 Update, Delete, Insert를 수행했을 때, 그 쿼리문 수행결과에 대해 확정을 짓겠다는 뜻이다.
  • 롤백(Rollback): 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌림
    • 쿼리문 수행결과에 대해 번복을 함. 즉, 쿼리문 수행 이전으로 원상복귀 하겠다는 뜻이다(Commit 하기 전에 사용됨).
데이터베이스 뷰란? 장점과 단점은?

데이터베이스 뷰란?

허용된 데이터를 제한적으로 보여주기 위해 하나 이상의 테이블에서 유도된 가상 테이블입니다.

데이터베이스 뷰의 장점과 단점은 무엇입니까?

장점

  • 뷰의 데이터가 저장되는 물리적 위치가 없으므로 리소스를 낭비하지 않고 출력을 생성합니다.
  • 삽입, 업데이트 및 삭제와 같은 명령을 허용하지 않으므로 데이터 액세스가 제한됩니다.

단점

  • 해당 뷰와 관련된 테이블을 삭제하면 뷰가 관련이 없습니다.
  • 큰 테이블에 대해 뷰를 만들 때 더 많은 메모리가 사용됩니다.
교착상태란? 방지하기 위한 방법?

교착상태란?

2개 이상의 트랜잭션이 특정 자원(테이블 또는 행)의 잠금(Lock)을 획득한 채 다른 트랜잭션이 소유하고 있는 잠금을 요구하면 아무리 기다려도 상황이 바뀌지 않는 상태가 되는데 이를 교착상태 라고 합니다.

교착상태를 방지하기 위한 방법에 대해 설명하세요.

  • 트랜잭션을 자주 커밋한다.
  • 정해진 순서로 테이블에 접근한다.
  • SELECT ~ FOR UPDATE 의 사용을 피한다.
ACID는 각각 무엇을 일컫는 단어인가? 각각에 해당하는 설명을 해주세요.

ACID?

  • Atomacity(원자성)
  • Consistency(일관성)
  • Isolation(격리성)
  • Durability(지속성)

각 특성에 대한 설명

  • Atomacity
    • 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것을 말합니다.
    • All or Nothing의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 말합니다.
  • Consisteny
    • 트랜잭션이 성공적으로 완료되면 일관적인 DB 상태를 유지하는 것을 말합니다.
    • 여기서 말하는 일관성이란, 기본 키, 외래 키 제약과 같은 명시적인 무결성 제약 조건들뿐만 아니라, 대표적인 자금 이체 예에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있습니다.
  • Isolation
    • 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 합니다.
  • Durability
    • 트랜잭션이 성공적으로 완료되어 커밋되고 나면, 해당 트랜잭션에 의한 모든 변경은 향후에 어떤 소프트웨어나 하드웨어 장애가 발생되더라도 보존되어야 합니다.
Functional Dependency가 무엇인지, Fully Functional Dependency의 조건, Fully Functional Dependency의 이점

Functional Dependency이란?

함수와 같이 어떠한 값을 통해 종속 관계에 있는 다른 값을 유일하게 결정할 수 있다는 것입니다. 데이터베이스에서의 함수 종속성을 더욱 명확하게 정의하면 다음과 같습니다.

어떤 테이블 R에 존재하는 필드들의 부분집합을 각각 XY라고 할 때, X의 한 값이 Y에 속한 오직 하나의 값에만 사상될 경우에 "YX에 함수 종속 (Y is functionally dependent on X)"이라고 하며, XY라고 표기합니다.

Fully Functional Dependency의 조건

종속자(Dependant)가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우입니다.

Fully Functional Dependency의 이점

Data Anomaly를 예방할 수 있습니다.

Write-Ahead Loggin에 대해서 설명해주세요.

Write-Ahead Logging은 트랜잭션을 로그에 기입해놓고, 특정 데이터 양이 쌓이면 이를 데이터베이스의 디스크에 Data Block 형태로 쓰게 됩니다. 디스크에 쌓기 전에 Log에 먼저 기록한다고 해서 Write-Ahead Logging이라 불립니다.

이 기법이 사용되는 이유는, 디스크에서 데이터를 읽을 때 두 가지 방법(Sequential Access, Random Access)이 있는데 Sequential Access의 방법이 더 빠르기 때문에 트랜잭션을 Log에 Sequential하게 기록하여 디스크 IO에서 오는 성능 저하를 방지할 수 있게 됩니다.

더하여, ACID의 네 가지 특성 중 Consistency와 Atomacity도 보장할 수 있게 됩니다.

RDBMS과 NoSQL
  • RDBMS는 관계 DBMS으로 데이터 베이스를 테이블 형태로 구성하는 관계 데이터 모델을 사용한다. 단순하고 이해하기 쉬운 구조로 되어있다는 장점이 있으며 현재 가장 많이 사용된다.

    예로는 오라클, MySQL, MS SQL 등이 있다.

  • NoSQL은 Not Only SQL로 데이터 구조를 미리 정해두지 않아 사진, 동영상, 검색 로그와 같은 비정형 데이터를 저장하고 처리하는 데 적합한 DBMS이다. 반면에 관계 DBMS의 강점인 안정성과 일관성 유지가 어렵다.

    예로는 몽고디비와 카산드라, H베이스 등이 있다.

각 정규형에 대해 설명해주세요(1~3 정규형)

릴레이션이 정규화된 정도는 정규형(Normal Form)으로 표현한다.

각 정규형 마다 만족시켜야하는 제약조건이 존재하고, 릴레이션이 특정 정규형의 제약조건을 만족하면 릴레이션이 해당 정규형에 속한다고 한다. 차수가 높아질수록 제약조건이 많아지고, 엄격해진다.

  • 제 1정규형 : 각 속성이 원자값으로만 구성.

    릴레이션에 속한 모든 속성의 도메인(값)이 원자값으로만 구성되어 있으면 제1정규형에 속한다.

    즉, 하나의 튜플의 하나의 속성에 여러개의 값이 들어있는 다중값이 허용되지 않는다.

  • 제 2정규형 : 완전 함수 종속 (부분 함수 종속 제거)

    릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.

    *무손실 분해 : 자연 조인을 하면 원래의 릴레이션으로 다시 복원할 수 있도록, 정보의 손실 없이 릴레이션을 분해하는 것을 무손실 분해라고 한다.

  • 제 3정규형 : 이행적 함수 종속 제거

    릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않으면 제3정규형에 속한다.

    이행적 함수 종속이란 릴레이션을 구성하는 3개의 속성 집합 X,Y,Z에 대해 함수 종속 관계 X→Y, Y→Z가 존재하면 논리적으로 X→Z가 성립한다. 이때 Z가 X에 이행적으로 함수적 종속되었다고 한다.

    이럴때에는 X와 Y 속성 집합 릴레이션과 Y와 Z 속성 집합의 릴레이션으로 분해한다.

반정규화와 그의 목적

반정규화 (De-Normalization)

반정규화란 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위이다.

데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.

반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있음

반정규화를 수행하는 주된 경우

  • 다량의 범위를 자주 처리해야하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우