Week1

파일시스템과 데이터베이스의 차이점에 대해서 설명해주세요.

파일 시스템은 파일을 저장하고 관리하는 간단한 방법으로 기본적인 데이터 저장 및 검색에 적합합니다.
하지만 이는 같은 내용의 데이터가 여러 파일에 중복 저장이 되므로 데이터의 일관성과 무결성에 문제가 있습니다.

반면, 데이터베이스는 구조화된 데이터를 관리하기 시스템으로 고급 질의, 동시성 제어 및 데이터 무결성 시행을 가능하게 합니다.

  파일 시스템 DBMS
데이터 중복 • 파일 시스템은 응용 프로그램마다 별도의 파일을 유지.
같은 내용의 데이터가 여러 파일에 중복 저장의 가능성
• 저장공간의 낭비, 데이터를 저장하고 수정하는 비용의 증가.
• 일관성문제
• 데이터를 통합 관리 ⇒ 데이터 중복 문제 해결
• 효율성 때문에 데이터 중복을 허락한다 하더라도 중복 최소화
데이터 독립성 • 파일 구조가 바뀌면 응용 프로그램도 수정
• 비용 증가
응용프로그램 또는 사용자와 데이터베이스 간의 독립성
동시공유 동시 공유 불가능 • 동시 접근 가능하도록 지원
• 동일한 데이터를 응용 프로그램의 요구에 따라 다양한 구조로 제공.
• 데이터 중복 해결
데이터보안 ◦ 모든 파일의 보안을 같은 수준으로 유지하기 어려움.
◦ 사용권한을 파일 단위로 제한, 구체적이고 다양한 접근제어 제공 X
• 중앙 집중식 관리 시스템 ⇒ 효율적인 접근 제어 가능
• 허용되지 않은 데이터에 대한 연산을 사전에 차단 가능. ⇒ 보안성
• 사용자별 접근 수준의 차별화
데이터 무결성 새로운 데이터가 입력되거나 수정될 때 유효성 검사가 필요. 데이터에 대한 연산이 수행될 때마다 유효성을 검사. ⇒ 데이터 무결성 유지
표준화   데이터에 대한 모든 접근이 데이터 베이스를 통해 이루어지므로 표준화의 용이.
장애 발생시 회복 장애 발생시 회복 불가능 데이터베이스의 일관성과 무결성 유지하면서, 데이터를 이전상태로 복구 가능
응용 프로그램 개발 비용 비용 부담 높음 • 비용부담이 적음 ⇒ 독립적이기 때문
• 데이터베이스의 구조가 변경되어도 응용 프로그램은 변경할 필요가 없어 유지 보수 비용이 낮음.

데이터베이스의 특징에 대해 설명해주세요.

데이터베이스는 사용자의 요구에 따라 실시간으로 응답할 수 있고, 데이터가 계속 변화하지만 데이터의 원자성이 보장됩니다.
또 여러 사용자가 동시에 이용할 수 있으며 프로그래밍 언어에서의 메모리 주소 값으로 접근하는 것이 아닌 값으로 참조할 수 있습니다.

  • 실시간 접근(real-time accessibility)
    • 데이터베이스는 사용자의 데이터 요구에 실시간으로 응답할 수 있어야 함.
    • 사용자의 특성이나 서비스 유형에 따라 응답시간이 다를지라도, 대게 몇초 이내에 데이터를 제공해야한다.
  • 계속 변화(continuous evolution)
    •  현실 세계의 상태를 정확히 반영.
    • 현실 세계의 데이터가 계속 변화하므로 데이터베이스의 데이터 역시 삽입, 삭제, 수정을 하여 데이터를 정확하게 유지해야 한다.
  • 동시 공유(concurrent sharing)
    • 여러 사용자가 동시에 이용할 수 있는 동시 공유 특징을 제공.
    • 여러 사용자가 다른 데이터를 동시에 사용하는 것뿐만 아니라 같은 데이터를 사용하는 것까지 포함. 
      ⇒ 이 부분이 어려워 더욱 까다로운 처리가 필요.
  • 내용 참조(Content reference)
    • 데이터베이스는 저장된 주소로 검색하는 것이 아닌, 값으로 참조할 수 있다.
    • 조건에 맞을 시 대부분 검색이 가능하다.

DBMS는 뭘까요? 특징에 대해 설명해주세요.

통합 저장된 데이터를 관리하고 모든 응용 프로그램이 공통으로 요구하는 데이터에 대한 기본 처리를 담당하면서
동시 공유, 보안, 회복 등의 기능을 제공해주는 시스템을 말합니다.

이를 통해서 파일 시스템의 데이터 중복과 데이터 종속 문제를 해결할 수 있습니다.
또 응용 프로그램을 대신하여 데이터베이스의 데이터를 삽입, 삭제, 수정, 검색 및 공유가 가능합니다.

  • 응용프로그램이 동시에 데이터베이스를 사용할 때 발생하는 문제점 해결
    • 데이터 중복 X
      • PK값을 어떻게 설정하느냐 또는 효율성 측면에 따라 데이터 중복이 발생가능
    • 데이터 중복을 제어
    • 데이터 일관성
  • 사용하기 쉬운 인터페이스를 제공하므로 데이터 처리 요구가 쉬움

스키마가 뭘까요? 3단계 데이터베이스 구조에 대해 설명해주세요.

데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것입니다.

데이터베이스는
개별 사용자 관점에서 외부 스키마
조직 관점에서의 개념 스키마
물리적인 저장 장치의 관점에서 내부 스키마로 나누어져 있습니다.
  • 외부 단계
    • 개별 사용자 관점. 데이터베이스를 이해하고 표현
    • 각 사용자마다 원하는 데이터가 다른 것.
      이처럼 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것을 외부 스키마
    • 여러개의 외부 스키마가 존재할 수 있음.
  • 개념 단계
    • 데이터베이스를 이용하는 사용자들의 관점. 데이터베이스를 조직 전체의 관점에서 이해하고 표현.
    • 모든 사용자에게 필요한 데이터를 통합하여 전체 데이터베이스의 논리적 구조를 정의 → 개념 스키마
    • 개념 스키마
      • 조직 전체의 관점에서 생각하는 데이터베이스
      • 전체 데이터베이스에 어떤 데이터가 저장되는지, 데이터들 간에는 어떤 관계가 존재하고
        어떤 제약조건이 있는 지에 대한 정의
        데이터에 대한 보안 정책이나 접근 권한에 대한 정의도 포함.
      • 데이터베이스 하나당 개념 스키마 하나.
  • 내부 단계
    • 데이터베이스를 디스크나 테이프 같은 저장장치의 관점에서 이해하고 표현.
    • 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법 정의 → 내부 스키마
    • 내부스키마
      • 데이터베이스는 저장 장치에 파일 형태로 저장.
      • 파일에 데이터를 저장하는 레코드의 구조, 레코드를 구성하는 필드 크기, 인덱스를 이용한 레코드 접근 경로 등을 지정.
      • 하나의 데이터베이스 당 하나의 내부 스키마.

데이터 독립성에 대해서 설명해주세요.

데이터베이스를 생성하고 접근하며 관리하는 일은 전부 데이터베이스 관리 시스템이 담당합니다.

데이터베이스의 구조와 데이터의 내용이 서로 영향을 미치지 않는 특성데이터 독립성이라고합니다.
  • 논리적 데이터 독립성
    • 개념 스키마가 변경되더라도 외부 스키마가 영향 받지 않는 것.
    • 논리적인 데이터 구조가 변하더라도 외부/개념 사상 정보만 적절히 수정하면 직접 관련이 없는 외부 스키마는 변경할 필요가 없음.
  • 물리적 데이터 독립성
    • 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 것. ⇒ 외부 스키마까지 영향을 받지 않음.

RDBMS(관계형 데이터베이스 관리시스템)는 뭘까요?

RDBMS(Rational Database Management System)는 관계형 모델을 이용하여 데이터를 관리하고 정리하는 소프트웨어 시스템으로, 데이터를 행(레코드)과 열(속성)로 구조화된 테이블(관계)에 저장하고, 데이터 무결성을 강제하며, 테이블 간의 관계를 정의할 수 있도록 합니다.

RDBMS는 데이터 검색 및 조작을 위해 SQL을 사용하고, ACID 속성을 통해 데이터 일관성을 보장하며, 성능 최적화를 위한 인덱싱을 제공하며, 동시성 제어 및 데이터 보안을 지원합니다. 구조화된 데이터를 효율적으로 관리하기 위해 다양한 응용 분야 및 산업 분야에서 널리 사용되고 있어 데이터 저장 및 검색을 위한 기본 도구로 자리 잡고 있습니다.

트랜잭션의 특성(ACID)

  1. 원자성(Atomicity) 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.
  2. 일관성(Consistency) 트랜잭션 실행 전 DB 내용이 잘못되지 않으면 실행 후도 잘못되지 않아야 한다.
  3. 고립성(Isolation) 둘 이상의 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.
    1. 고립 레벨에 따라 하나의 데이터에 여러 트랜잭션이 발생할 수 있다.
  4. 고립성(Isolation) 트랜잭션 실행도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
  5. 영속성(Durability) 완료된 결과는 영구적으로 반영되어야 한다.

릴레이션 스키마와 릴레이션 인스턴스에 대해서 설명해주세요.

릴레이션 스키마는 릴레이션을 정의하기 위한 튜플 구조와 제약조건을 명세한 것이고
릴레이션 인스턴스는 실제 데이터가 존재하는 릴레이션을 의미합니다.

릴레이션 스키마: 부모 및 자식 테이블, 외부 키 및 기본 키를 포함하여 관계형 데이터베이스의 테이블이 연결되는 방법을 설명합니다.

릴레이션 인스턴스(Relationship Instance)
: 라이브러리 데이터베이스에서 대출자가 체크아웃한 특정 책과 같이 부모 테이블과 자식 테이블의 레코드 간의 실제 데이터 연결을 나타냅니다.

 

릴레이션의 차수와 카디널리티에 대해 설명해주세요.

한 릴레이션에 들어 있는 애트리뷰트의 수차수라고 합니다. 따라서 유효한 릴레이션의 최소 차수는 1입니다.

카디널리티릴레이션 튜플의 갯수이다. 릴레이션의 경우 카디널리티가 0일 수 있으며 시간이 지남에 따라 카디널리티는 계속해서 변화합니다.

중복도가 ‘낮으면’ 카디널리티가 ‘높다’고 표현한다. 중복도가 ‘높으면’ 카디널리티가 ‘낮다’고 표현한다.
카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표 ⇒ 인덱싱은 카디널리티가 높은 곳에 적용해야함

 

키(Key)에 대해서 설명해주세요. (슈퍼키, 후보키, 기본키, 대리키, 외래키)

릴레이션에서 모든 튜플들을 유일하게 구분하는데 사용되는 요소들을 슈퍼키라고 합니다.

슈퍼키의 부분집합이 슈퍼키가 아닌 최소한의 슈퍼키를 후보키라 합니다. 이는 유일성과 최소성을 동시에 만족해야합니다.

후보키 중 하나를 기본키로 설정하고 테이블 당 기본키는 하나여야 하며 NULL 값을 가질 수 없으며 중복값도 가질 수 없습니다.

후보키가 두개 이상인 경우 기본키가 아닌 나머지 후보키를 대리키라고 합니다.

다른 릴레이션에 관계가 있는 속성을 외래키라고 합니다. 여기서 참조될 데이터는 기본키로 설정되어 있어야하며, 값이 있어야 합니다.
  • 슈퍼키
    • 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합
    • 유일성이란 하나의 키로 특정 행을 바로 찾아낼 수 있는 고유한 데이터 속성
    • 어떤 속성끼리 묶던 슈퍼키는 유일성만 만족하면 슈퍼키가 됨.
  • 후보키
    • 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
    • 유일성과 최소성 동시에 만족
  • 기본키
    • 후보키들 중에서 하나를 선택한 키로, 최소성과 유일성을 만족하는 속성
    • 테이블에서 기본키는 오로지 한개
    • 기본키는 테이블 안에서 유일하게 각 행을 구별할 수 있도록.
    • NULL이 아니며 중복된 값을 가질 수 없다.
  • 대체키(대리키)
    • 기본키가 아닌 후보키
  • 외래키
    • 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것
    • 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약
    • 참조될 테이블이 먼저 만들어지고 참조하는 테이블에 값이 입력되어야함.
    • 참조될 값은 참조될 테이블에서 기본키로 설정
    • 부모 테이블 먼저 삭제될 수 없음. ⇒ 외래키 오류
    • 제약조건
      • cascade
        • 부모 테이블의 컬럼이 변경 또는 삭제될 경우, 외래키로 참조하는 컬의 값도 변경/삭제
      • restrict
        • 부모 테이블의 컬럼이 변경/삭제될 때 그 컬럼을 변경/삭제할 칼럼을 참조하고 있는 경우 변경/삭제가 취소
      • NO ACTION
        • 부모 테이블의 컬럼이 변경/삭제될 때 변경/삭제할 개체만 변경/삭제되고 참조하고 있는 개체는 변동 X
      • SET NULL
        • 부모 테이블의 컬럼이 변경/삭제될 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 참조하고 있는 값 NULL로 세팅

무결성 제약조건에 대해서 설명해주세요. (도메인 무결성, 개체 무결성, 참조 무결성)

무결성 제약조건은 데이터베이스의 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정등을 제약하기 위한 조건을 말합니다.

개체 무결성은 각 릴레이션의 기본키를 구성하는 속성은 NULL값이나 중복된 값을 가질 수 없습니다.
참조 무결성은 외래키 값은 NULL이거나 참조하는 릴레이션의 키본키 값과 동일해야합니다. ⇒ 즉 릴레이션은 참조할 수 없는 외래키의 값을 가지지 않습니다.
도메인 무결성은 속성들의 값은 정의된 도메인에 속한 값이어야 합니다.
고유 무결성은 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 각 튜플이 가지는 속성 값들은 서로 달라야합니다.
NULL 무결성은 릴레이션의 특정 속성 값은 NULL이 될 수 없으며
키 무결성은 최소한 한개 이상의 키가 존재해야합니다.

 

사용했던 데이터베이스에 대해서 설명해주세요. (오라클DB, MySQL, MariaDB, MongoDB 등)

(MySQL을 사용했다면) MySQL 엔진에 대해서 설명해주세요.

MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 나뉘어집니다.

MySQL 엔진은 클라이언트로부터 오는 요청 처리(SQL 분석 및 최적화)를 담당하고
스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나 조회하는 부분을 담당합니다. 

MySQL 엔진

  • Connection Handler : 커넥션 및 쿼리 요청을 처리 담당
  • SQL 인터페이스 : DML, DDL, Procedure, View 등 SQL 인터페이스 제공 담당
  • SQL 파서(parser) : SQL문법 오류 탐지 및 SQL 쿼리 문장을 MySQL이 처리하기 좋은 토큰 단위로 나눠서 트리 형태로 파싱 하는 작업 담당
  • SQL 옵티마이저(optimizer) : 쿼리의 최적화된 실행 담당
  • 캐시와 버퍼 : 성능 향상을 위한 보조 저장소 기능 담당

스토리지 엔진

  • MySQL 엔진과 플러그인 형태로 연동/분리 가능하고 핸들러 API(핸들러 요청)를 통해 스토리지 엔진에 읽기/쓰기 요청이 가능

MySQL 스레드 구조

MySQL thread = foreground thread + background thread

  • 포그라운드 스레드
    • 클라이언트/사용자가 요청한 쿼리 문장을 처리하는 스레드(고객 창구 역할)
    • 데이터 조회 스레드(데이터 버퍼나 캐시 또는 직접 디스크나 인덱스 파일로 접근하여 데이터를 가져오는 스레드)
  • 백그라운드 스레드
    • Insert buffer를 병합하는 스레드
    • 로그 기록 스레드
    • InnoDB 버퍼 풀의 데이터를 디스크로 기록(Write)하는 스레드
    • 데이터를 버퍼로 읽어들이는 스레드
    • 잠금, 데드락을 모니터링하는 스레드
    • 모든 백그라운드 스레드를 관리하는 메인 스레드
  • 포그라운드 스레드는 'thread_cache_size' 설정 값에 따라 일정 스레드 개수로 유지

(MySQL을 사용했다면) InnoDB에 대해 설명해주세요.

MySQL의 엔진 중 레코드 기반의 Lock을 제공하며 높은 동시성 처리가 가능하고 안정적인 스토리지 엔진입니다.

특징으로는 primary key 순서대로 디스크에 저장되므로 range scan이 굉장히 빠르며 다른 보조 인덱스에 비해 pk가 선택될 확률이 높습니다.

구조

  • 메모리 영역
    • InnoDB 버퍼 풀 : 실제 데이터 블록(페이지)을 메모리에 적재하는 영역 + 인서트 버퍼 + 언두 레코드
    • 로그 버퍼 : 로그 스레드에 의해 로그 파일로 기록되기 전 버퍼링 하는 영역
  • 디스크 영역
    • 시스템 테이블 스페이스
    • 사용자 테이블 스페이스
    • 리두(Redo) 로그

InnoDB 스토리지 엔진의 특징

  • 테이블은 Primary Key 순서대로 디스크에 저장되며 그렇기 때문에 Range scan이 굉장히 빠르다
  • 실행계획 결정에서 다른 보조 인덱스에 비해 Primary Key가 선택될 확률이 높다.
  • MVCC를 이용하여 락을 걸지 않고 읽기 수행
  • 외래 키 지원
    • 외래 키는 부모 테이블과 자식 테이블 모두 해당 컬럼에 대한 인덱스 생성이 필요하고 변경 시에는 반드시 부모 테이블과 자식 테이블의 데이터가 있는지 체크하는 작업이 필요하므로 잠금(Lock)이 전파되는 특징이 있다. Lock이 여러 곳에 전파되면서 데드락 발생을 시킬 수 있기 때문에 실무에서 제약을 걸지 않는 경우가 많다.
  • 자동 데드락 감지 : 감지 시 변경된 레코드가 가장 작은 트랜잭션을 롤백해버려서 데드락을 풀어준다.
  • 자동 장애 복구 : 완료하지 못한 트랜잭션이나 일부만 기록되어 손상된 데이터 페이지 등을 자동 복구한다.

'Database > JSCode' 카테고리의 다른 글

[JSCode] Database 면접 스터디 회고록  (1) 2023.12.08
[JSCode] Database Week5  (2) 2023.12.05
[JSCode] Database Week4  (0) 2023.11.28
[JSCode] Database Week3  (0) 2023.11.21
[JSCode] Database Week2  (1) 2023.11.14

+ Recent posts