본문 바로가기

카테고리 없음

데이터베이스 이론 정리

기본

💡 DBMS란?

더보기

데이터베이스 관리 시스템(DBMS)은 다양한 데이터를 효율적으로 저장, 관리, 검색할 수 있도록 돕는 소프트웨어입니다.

 

💡 DBMS의 기능?

더보기
  • 데이터의 독립성: 데이터의 물리적 위치가 변경되더라도 응용 프로그램에 영향을 미치지 않도록 하고, 데이터베이스의 논리적 구조가 변경되더라도 응용 프로그램에 영향을 미치지 않음을 보장합니다.
  • 데이터의 무결성: 데이터의 정확성과 일관성을 유지하기 위한 규칙을 설정하고 강제합니다. 예를 들어, 특정 범위 밖의 값이나 논리적으로 부적합한 값의 입력을 방지할 수 있습니다.
  • 데이터의 보안성: DBMS는 사용자의 권한에 따라 데이터 접근을 제어합니다. 이를 통해 허가되지 않은 사용자의 데이터 접근을 방지하며, 보안을 유지합니다.
  • 데이터의 일관성: DBMS는 데이터의 일관성을 유지합니다. 즉, 하나의 데이터가 변경될 경우, 이와 관련된 모든 데이터도 함께 업데이트되어 데이터 간의 불일치를 방지합니다.
  • 데이터 중복 최소화: DBMS는 중복된 데이터의 저장을 최소화하며, 이를 통해 데이터 저장 공간을 효율적으로 사용하고, 데이터의 일관성을 유지합니다.

💡 스키마란?

더보기

DB의 구조와 제약조건에 관해 명세를 기술한 것입니다. 스키마에는 테이블, 속성, 제약조건, 관계 등이 포함됩니다.

 

💡 개념, 외부, 내부 스키마란?

더보기

1. 개념 스키마 - 데이터베이스의 전체적인 논리 구조이며 데이터베이스의 모든 개체, 속성, 관계, 제약 조건 등의 정보를 포함합니다.

2. 내부 스키마 - 데이터베이스의 물리적 저장구조를 정의한 것이며 데이터 저장의 물리적인 내용, 인덱싱 등의 정보를 포함합니다.

3. 외부 스키마 - 데이터베이스의 사용자 뷰를 나타내며 사용자에게 보여질 방식을 정의합니다.

 

💡 키와 키의 종류?

더보기

키란 검색, 정렬 시 튜플을 구분하는 기준이 되는 속성을 의미하며 종류에는 기본키, 외래키, 후보키, 슈퍼키가 있습니다.

 

  • 기본키: 기본 키는 테이블에서 특정 레코드를 구별하기 위해 후보 키 중에서 선택된 하나의 고유한 식별자를 의미합니다. 중복되는 값이나 NULL값은 가질 수 없습니다. 후보키 중에서 값이 자주 변경되지 않고, 값이 단순한 것을 선택하는 것이 좋습니다.
  • 외래키: 한 테이블에서 다른 테이블의 레코드를 참조하는 데 사용되는 키입니다. 중복된 값과 NULL값을 가질 수 있으며 반드시 참조되는 테이블에서 유일한 값을 갖는 필드를 참조해야 합니다.
  • 후보키: 후보키는 기본 키가 될 수 있는 후보가 되는 키들을 의미하며 유일성과 최소성을 만족하는 키들을 의미합니다.
  • 슈퍼키: 유일성은 만족하지만 최소성은 만족하지 못하는 키입니다.
  • 대체키: 기본 키로 선택되지 않은 후보 키를 말합니다.

 

💡파티셔닝이란? 장단점?

더보기

파티셔닝이란 데이터베이스를 작은 파티션 단위로 나누어 관리하는 기법을 뜻하며 크게 수평 파티셔닝과 수직 파티셔닝으로 분류됩니다.

 

수평 파티셔닝

수평 파티셔닝

수평 파티셔닝은 하나의 데이터베이스 내에서 테이블의 행(row)을 기준으로 데이터를 분할하는 방법입니다.
테이블을 분할하기 때문에 쿼리 수행 시간이 감소한다는 장점과 접근 권한을 쉽게 제어할 수 있다는 장점이 있습니다.
하지만 데이터 관리의 복잡성이 증가된다는 단점과, 여러 파티션에서 데이터를 합쳐야 하는 경우 성능이 저하된다는 단점이 있습니다.

 

 

수직 파티셔닝

수직 파티셔닝

수직 파티셔닝은 하나의 데이터베이스 내에서 테이블의 열(column)을 기준으로 데이터를 분할하는 방법입니다.
자주 사용되는 컬럼을 파티션화하면 해당 데이터에 대한 접근 성능을 향상할 수 있고, 조회 시 필요 없는 컬럼을 조회하지 않음으로써 성능을 향상할 수 있다는 장점이 있습니다.
하지만 여러 테이블에 걸쳐 있는 데이터를 조인해야 하는 경우 복잡성이 증가할 수 있으며 테이블 간 무결성 유지의 복잡성이 증가된다는 단점이 있습니다.

 

💡파티션 분할 기법?

더보기

1. 범위 파티셔닝 (Range Partitioning)

연속적인 숫자나 날짜 등을 기준으로 파티셔닝 하는 것입니다. 

 

2. 목록 파티셔닝 (List Partitioning)

3. 해시 파티셔닝 (Hash Partitioning)

4. 키 파티셔닝 (Key Partitioning)

 

💡샤딩이란? 장단점?

더보기

샤딩은 동일한 스키마를 가지고 있는 여러 대의 데이터베이스 서버들에 데이터를 작은 단위(shard)로 나누어 분산 저장하는 기법입니다.
샤딩은 데이터를 분산 저장하기 때문에 확장성을 높일 수 있으며 한 데이터베이스에서 처리해야 할 데이터의 양을 줄일 수 있으므로 성능을 개선할 수 있다는 장점이 있습니다.

하지만 잘못된 샤딩 전략을 사용할 경우 데이터의 불균형 현상이 발생할 수 있으며 데이터 관리의 복잡성이 증가한다는 단점이 있습니다.

 

💡샤딩 기법? 장단점?

더보기

1. 모듈러 샤딩

2. 레인지 샤딩

3. 디렉토리 샤딩

 

💡샤딩과 수평 파티셔닝의 차이?

더보기

샤딩은 데이터를 여러 데이터베이스나 여러 서버에 물리적으로 분산시키는 것이고, 파티셔닝은 하나의 데이터베이스 내에서 데이터를 논리적으로 분할하는 것을 말합니다.

 

💡 커넥션 풀이란? 장단점?

더보기

데이터베이스 커넥션 풀은 데이터베이스 연결에 필요한 객체를 미리 생성하여 풀(pool)로 관리하는 기법입니다.

커넥션 풀을 사용하면 미리 여러 개의 연결을 생성해두고 이를 재사용함으로써 성능을 향상할 수 있다는 장점이 있습니다.

하지만 연결을 유지하기 위해 메모리를 사용하기 때문에 불필요한 연결이 있다면 자원의 낭비가 발생할 수 있다는 단점이 있습니다.

 

💡커넥션 풀 사용시 주의할 점?

더보기

커넥션 풀을 사용할 때는 적절한 크기를 설정하는 것이 중요합니다. 너무 작게 설정하면 동시에 많은 사용자가 요청을 보냈을 때 충분한 연결을 제공할 수 없고, 너무 크게 설정하면 불필요한 자원을 낭비하게 됩니다.

또한, 데이터베이스 작업이 완료되면 반드시 커넥션을 풀에 반환하도록 하는게 중요합니다. 만약 반환하지 않는다면 커넥션 풀이 고갈되는 문제가 발생할 수 있습니다.

 

💡 RDB란? 장단점?

더보기

RDB란 데이터들의 관계를 정의하고 이를 테이블로 관리하는 데이터베이스입니다.

데이터를 구조화된 테이블 형태로 관리하기 때문에 데이터의 일관성과 정확성을 보장하며, ACID 성질을 준수한다는 장점이 있습니다.

하지만 데이터의 유연성이 부족하다는 문제와 데이터 간의 관계가 많아질 수록 복잡성이 증가한다는 단점이 있습니다.

 

💡 NoSQL이란? 장단점?

더보기

NoSQL이란 데이터 간의 관계를 정의하지 않는 데이터베이스입니다.

비정형 데이터를 저장할 수 있으며 조회 성능이 뛰어나다는 장점이 있습니다.

하지만 트랜잭션을 보장하지 않으며 데이터 일관성이 항상 보장되지 않다는 단점이 있습니다.

 

💡ORM?

더보기

ORM은 객체와 데이터베이스의 관계를 매핑해줌으로써 데이터베이스의 데이터를 객체 지향적으로 다룰 수 있게 해주는 기술입니다.

ORM을 사용하면 프로그래밍 언어로 데이터를 조작할 수 있기 때문에 데이터베이스에 독립적인 코드를 작성할 수 있다는 장점이 있습니다.

하지만 의도치 않은 방향으로 쿼리가 실행될 수 있으며 이로 인해 심각한 성능 저하가 발생할 수 있다는 단점이 있습니다.

 

정규화

💡 정규화란? 장단점?

더보기

정규화는 데이터베이스에서 중복을 최소화하고 데이터의 구조를 효율적으로 만들기 위한 과정입니다.

정규화를 하면 데이터의 일관성을 유지할 수 있고 이상 현상을 해결할 수 있다는 장점이 있습니다.

하지만 데이터 조회를 위해 여러 테이블의 조인 연산이 발생하여 성능이 저하되고 쿼리가 복잡해질 수 있다는 단점이 있습니다.

 

💡 정규화의 종류?

더보기
  • 1 정규화 : 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분해하는 것입니다. (도메인이 원자값만 포함)
  • 2 정규화 : 기본키의 부분집합이 결정자가 되지 안도록 분리하는 것입니다. (완전 함수적 종속)
  • 3 정규화 : 이행종속을 제거하는 것입니다. (a -> b, b -> c 일때, a->c 가 성립되는 것을 분리, 즉, a-> b랑 b->c 테이블로 분리)
  • BCNF 정규화 : 값을 정하는 결정자가 후보키가 되도록 테이블 분해하는 것입니다. (모든 결정키가 후보키)

 

💡 반정규화란? 장단점?

더보기

반정규화는 성능 향상을 위해 중복,통합을 허용하는 기법입니다.

반정규화를 하면 성능이 향상된다는 장점이 있지만 과도하게 적용하면 일관성을 해칠 수 있다는 단점이 있습니다.

 

💡 이상 현상(Anomaly)이란?

더보기

데이터의 중복으로 인한 부작용을 말하며 세 가지 현상이 있습니다.

 

첫 번째, 삽입 이상은 데이터를 삽입하는 데 불필요한 속성도 함께 추가해야 하는 경우입니다.

두 번째, 수정 이상은 데이터를 수정할 때 일관성을 유지하기 위해 여러 데이터를 수정해야 되는 경우입니다.

세 번째, 삭제 이상은 데이터를 삭제할 때 의도하지 않은 것이 함께 삭제되는 경우입니다.

 

이런 이상 현상들은 데이터베이스 설계의 중복성을 줄이고, 데이터의 무결성을 보장하는 정규화 과정을 통해 해결할 수 있습니다.

 

 

인덱스

💡 인덱스란?

더보기

인덱스는 RDBMS에서 정렬 상태를 유지하여 검색 연산의 속도를 높이기 위한 방법입니다. 데이터 삽입/삭제/수정 시에는 추가적인 작업이 필요하므로 실행 속도가 느려진다는 단점이 있지만 항상 정렬된 상태를 유지하므로 조회에 유리하다는 장점이 있습니다.

 

💡 인덱스를 사용 했을 때 좋은 경우?

더보기
  • WHERE 절에서 자주 사용되는 컬럼
  • 외래키에 사용되는 컬럼
  • JOIN에 자주 사용되는 컬럼

 

💡 인덱스를 사용 했을 때 안좋은 경우?

더보기
  • 데이터의 중복도가 높은 컬럼
  • 삽입, 삭제, 수정 연산이 자주 일어나는 컬럼

 

💡 인덱스의 알고리즘? 장단점?

 

💡 클러스터드 인덱스란? 장단점?

 

💡 논클러스터드 인덱스란? 장단점?

 

트랜잭션

💡 트랜잭션이란?

 

💡 트랜잭션의 상태란?

 

💡 Commit과 Rollback이란?

 

💡 트랜잭션의 격리 수준이란?

 

💡 각 격리 수준에서 발생할 수 있는 문제는?

 

💡 락이란?

 

💡 낙관적 락이란?

 

💡 비관적 락이란?

 

💡 공유 락이란?

 

💡 배타적 락이란?

 

💡 데드락이란? 발생 조건?

 

💡 데드락 해결 방법?

 

💡 동시성 제어란?

 

💡 동시성 제어 기법?

 

SQL

💡 DDL, DCL, DML이란?

 

 

💡 DELETE, TRUNCATE, DROP의 차이?

 

 

💡 JOIN이란?

 

 

💡 INNER JOIN이란?

 

 

💡 OUTER JOIN이란?

 

 

💡 GROUP BY란?

 

 

💡 ~