개인 공부/TIL

[ TIL - CS ] 면접을 위한 CS 공부 5편 - 데이터베이스 -

킴도비 2024. 11. 11. 09:40

🚌 2024년 11월 11일~ 2024년 11월 18일까지의 주제는 데이터베이스이다.

 

💡 공통으로 준비한 질문

1️⃣ 첫번째 접은 글은 내 말로 풀어쓴 정답
2️⃣ 두번째 접은 글은 해석 또는 공부한 내용 또는 추가적으로 궁금한 내용

 

1. DB에서 사용하는 '키'와 키의 종류

더보기
  • DB에서 '키'란?
    • 검색, 정렬 시 튜플(tuple)을 구분할 수 있는 기준이 되는 속성입니다.
    • 키는 후보키, 기본키, 대체키, 슈퍼키, 외래키가 있습니다.
    • 후보키란?
      • 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합입니다.
      • 2가지를 만족해야 합니다. 
        • 유일성 : 키로 하나의 튜플을 유일하게 식별할 수 있다.
        • 최소성 : 꼭 필요한 속성으로만 구성된다.
    • 기본키란?
      • 후보키 중 선택한 메인 키입니다.
      • 특징은 null 값을 가질 수 없고, 동일한 값이 중복될 수 없습니다.
    • 대체키란?
      • 후보키 중 기본키를 제외한 나머지 키, 즉 보조키를 뜻합니다.
    • 슈퍼키란? 
      • 유일성은 만족하지만, 최소성은 만족하지 못하는 키입니다.
    • 외래키란?
      • 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합입니다.

 

2. 트랜잭션과 그 특징 (ACID 원칙)

더보기
  • 트랜잭션이란?
    • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위입니다.
  • 트랜잭션의 특징은?
    • 원자성(Atomicity)
      • 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다.
    • 일관성(Consistency)
      • 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.
    • 독립성(Isolation)
      • 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
    • 지속성(Durability)
      • 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

 

3. 트랜잭션의 격리 수준과 동시성 문제 해결 방법

더보기
  • 트랜잭션 격리 수준이란?
    • 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준입니다.
    • 효율적인 Locking 방법을 정한 레벨
    • 종류는?
      • Read Uncommitted(lv. 0) : select 문장이 수행되는 동안 해당 데이터에 shared lock이 걸리지 않은 계층
      • Read Committed(lv. 1) : select 문장이 수행되는 동안 해당 데이터에 shared lock이 걸리는 계층
      • Repeatable Read(lv. 2) : 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
      • Serializable(lv. 3) : 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
  • 단, 동시성 문제를 해결하기 위해 Lock을 걸 때 낮은 레벨에서 Dirty Read, Non-Repeatable Read, Phantom Read 등의 문제가 생길 수 있음을 고려해서 짜야 한다.
더보기

 

4. 정규화와 역정규화

더보기
  • 정규화란?
    • 가장 큰 목표는 테이블 간 중복된 데이터를 허용하지 않는 것이다. 
    • 정규화의 목적은?
      • 데이터의 중복을 없애면서 불필요한 데이터를 최소화 시킨다.
      • 무결성을 지키고, 이상 현상을 방지한다.
      • 테이블 구성을 논리적이고 직관적으로 할 수 있다.
      • 데이터베이스 구조의 확장에 용이해진다.
    • 정규화는 최대 1~6까지의 정규화를 가진다. 대표적으론 3단계까지의 과정을 거친다.
    • 제 1 정규화(1NF)
      • 테이블 컬럼이 원자 값(하나)를 갖도록 테이블을 분리시키는 것이다.
      • 아래의 조건을 만족해야 한다.
        • 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있어야 한다.
        • 모든 속성에 반복되는 그룹이 나타나지 않아야 한다.
        • 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.
    • 제 2정규화(2NF)
      • 테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다. 기본키의 부분집합 키가 결정자가 되어선 안된다.
    • 제 3정규화(3NF)
      • 2NF가 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리하는 것이다.
      • 아래 두 가지 조건을 만족시켜야 한다.
        • 릴레이션이 2NF에 만족한다.
        • 기본키가 아닌 속성들은 기본키에 의존한다.

 

  • 역정규화란?
    • 정규화의 단점으로 릴레이션 간의 JOIN 연산이 늘어나 질의 성능이 저하될 우려가 있기에, 읽기 작업이 많이 필요한 DB의 전반적인 성능을 향상시키는 것이다.
더보기

1. 개념

 

정규화(Normalization) | 👨🏻‍💻 Tech Interview

정규화(Normalization) Normalization 가장 큰 목표는 테이블 간 중복된 데이터를 허용하지 않는 것이다. 중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고, DB 저장 용량 또한 효율적으로 관리할

gyoogle.dev

 

2. 그림 예시

 

데이터베이스 정규화(Normalization), 역정규화(DeNormalization)

데이터베이스 정규화(Normalization) 란?관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.정규화의 기본 목표는 관련이 없는 함수 종속성은

sh970901.tistory.com

 

3. 장단점

 

[DB] 정규화, 역정규화

관계형 DB 설계에서 중복을 최소화하고 데이터 일관성을 유지하기 위해 데이터의 구조를 조직화하는 프로세스이다. 주로 테이블을 작은 단위로 분리하여 중복을 제거하고, 이상 현상(anomalies)을

velog.io

 

4. 역정규화 상세 예시

 

📋 제 1-2-3 정규화 & 역정규화 기법 💯 정리

정규화란? ERD내에서 중복요소를 찾아 제거해 나가는 과정 - 중복된 데이터는 많은 문제를 일으킨다. ​ 3차 정규화 정도만 알면 설계하는데 무리가 없다. - 중복을 최소화 -> 완전히 없애는게 아

inpa.tistory.com

 

5.  역정규화를 해야 하는 이유

 

역정규화 무엇이 문제인가?

아래의 글은 모델러에 따라 생각이 다를 수 있음을 밝혀둔다. 모델링에는 정답이 없다. 하지만 모범답안을 찾기 위해 노력해야 한다. 역정규화는 정합성과 확장성을 방해한다. 많은 종류의 모델

scidb.tistory.com

 

 

5. RDB와 NoSQL의 차이점

더보기
  • 관계형 데이터 베이스(RDB 또는 SQL이라 표현)란?
    • RDBMS에서 데이터를 저장, 수정, 삭제 및 검색을 할 수 있게 해준다.
    • 두 가지 특징이 있다.
      • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
      • 데이터는 관계를 통해 여러 테이블에 분산된다.
    • 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다.
  • 비관계형 데이터 베이스(NoSQL)란?
    • 스키마도 없고, 관계도 없다.

 

 

❔ 개인으로 준비한 질문

1. Join의 모든 종류에 대해 설명해 주세요.

 

 

2. Index에 대해 설명해 주세요.

 

 

3. 이상에 대해 설명해 주세요.

 

 

4. 트랜잭션에 대해 설명해 주세요.