본문 바로가기

면접준비

CS 지식 정리 - 데이터베이스(1)

데이터베이스의 기본 개념

  1. 데이터베이스를 사용하는 이유?
  2. 트랜잭션이 무엇?
  3. RDBMS와 NoSQL의 차이점
  1. 데이터베이스는 데이터를 체계적으로 저장하고 관리하여 데이터 중복을 줄이고, 무결성을 보장하며, 빠르고 효율적인 검색과 처리가 가능하도록 도와줍니다. 또한, 동시성 제어를 통해 여러 사용자가 데이터를 안전하게 공유할 수 있으며, 백업과 복구 기능을 통해 데이터의 안정성을 제공한다. 이러한 이유로 데이터를 체계적으로 관리하고 활용해야 하는 시스템에서 데이터베이스가 필수적이다.
  2. 트랜잭션은 데이터베이스에서 수행되는 논리적 작업의 단위로, 데이터를 일관성 있게 관리하기 위해 사용된다. 트랜잭션은 반드시 ACID 특성을 만족해야 하는데, 이는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durablility)을 뜻한다.
    예를 들어, 은행 송금 시스템에서 돈을 보내는 작업이 완료되려면, 계좌 차감과 입금이 모두 성공적으로 수행되거나, 실패 시 이전 상태로 복구되어야 한다. 트랜잭션은 이러한 작업의 신뢰성을 보장한다.
  3. RDBMS(Relational Database Management System)는 데이터를 테이블 형태로 저장하며, 관계형 모델을 기반으로 정규화와 강력한 트랜잭션 관리를 지원한다. 대표적인 예로 MySQL, PostgreSQL 등이 있다.

NoSQL은 데이터를 유연한 구조로 저장하며, JSON, Key-Value와 같은 다양한 형식을 지원한다. NoSQL은 수평적 확장성과 빠른 읽기/쓰기가 필요한 대규모 데이터 처리에 적합하며, 대표적으로 MongoDB 등이 있다.

RDBMS는 관계형 데이터와 정형 데이터 관리에, NoSQL은 비정형 데이터나 실시간 확장성이 필요한 환경에 적합하다.

데이터베이스 언어

  1. DDL, DML, DCL의 차이점
  2. 자주 사용하는 SQL 명령어에 대해 설명
  1. DDL(Data Definition Language)은 데이터베이스의 구조를 정의하거나 변경하는 명령어로, 테이블 생성(CREATE), 수정(ALTER), 삭제(DROP)과 같은 작업에 사용된다. DML(Data Manipulation Language)은 데이터베이스의 데이터를 조회하거나 수정하는 명령어로, 데이터를 삽입(INSERT), 조회(SELECT), 갱신(UPDATE), 삭제(DELETE)하는 데 사용된다. DCL(Data Control Language)은 데이터베이스의 권한을 제어하는 명령어로, 사용자에게 권한은 부여(GRANT)하거나 회수(REVOKE)하는 작업에 사용된다.
    각각의 언어는 데이터베이스를 구성하고 데이터를 관리하며, 보안을 유지하는 데 중요한 역할을 한다.
  2. SQL 명령어는 데이터베이스와 상호작용하기 위해 사용되며, 주로 사용되는 명령어는 SELECT(데이터를 조회할 때 사용), WHERE (특정 조건에 맞는 데이터를 조회하거나 수정할때 사용), JOIN(여러 테이블에서 관련 데이터를 결합하여 가져옴), INSERT(데이터를 테이블에 추가할 때 사용), UPDATE(기존 데이터를 수정할 때 사용), DELETE(데이터를 삭제할 때 사용), GROUP BY(데이터를 그룹화하고 집계 함수와 함께 사용)
    이러한 명령어는 데이터를 효과적으로 조회, 분석, 관리하는 데 필수적

데이터 모델링 및 설계

  1. 정규화란 무엇? 왜 필요?
  2. 역정규화란 무엇? 언제 필요한가
  3. 테이블 설계를 잘못하면 어떤 문제가 발생할까
  1. 정규화는 테이블의 설계 과정에서 데이터 중복을 줄이고, 데이터 무결성을 보장하기 위해 데이터베이스를 구조화하는 방법이다. 이를 통해 데이터의 일관성을 유지하고, 저장 공간을 효율적으로 사용하며, 갱신 이상, 삭제 이상 같은 문제를 방지할 수 있다. 정규화는 대표적으로 1, 2, 3 정규형이 있다.
  2. 역정규화는 정규화를 통해 나누어진 테이블을 성능 최적화를 위해 다시 합치거나 데이터를 중복 저장하는 과정이다. 이는 조회 성능을 향상시키기 위해 사용되며, 특히 읽기 작업이 많고 쓰기 작업이 적은 시스템에서 효율적이다.
  3. 테이블 설계를 잘못하면 데이터 중복, 중복 데이터 중 일부만 수정되면 데이터의 무결성이 깨질 수 있음, 특정 데이터를 삭제하면서 관련 없는 중요한 정보도 함께 사라질 수 있음, 비효율적인 테이블 설계로 인해 쿼리 실행 속도가 느려지고, 인덱스 활용이 어려워 질 수 있음, 확장성 문제가 있을 수 있음

데이터베이스 성능 및 최적화

  1. 인덱스란 무엇? 왜 사용?
  2. DB Lock이 무엇?
  1. 인덱스는 데이터베이스에서 테이블의 특정 열에 대해 빠르게 데이터를 검색할 수 있도록 만들어진 데이터 구조이다. 인덱스를 사용하면 SELECT, WHERE, JOIN과 같은 쿼리의 실행 속도를 크게 향상시킬 수 있다.
    대표적인 인덱스의 종류로는 B-Tree 인덱스와 Hash 인덱스가 있다. 하지만 인덱스를 너무 많이 생성하면, 데이터 삽입/수정/삭제 시 인덱스를 갱신해야 하므로 쓰기 성능이 저하될 수 있다.

인덱스는 읽기 작업이 빈번하거나 대규모 데이터에서 성능 최적화가 필요한 경우에 주로 사용된다.

 

2. DB Lock은 여러 트랜잭션이 동시에 동일한 데이터에 접근할 때, 데이터의 일관성과 무결성을 유지하기 위해 데이터를 보호하는 메커니즘이다.

데이터베이스 설계와 운영

  1. 데이터의 특성에 따라 RDBMS와 NoSQL 중 어느 것을 선택?
  2. ORM이란 무엇?
  1. RDBMS는 데이터가 정형화되어 있고, 명확한 관계가 있는 경우 적합하다. NoSQL은 데이터 구조가 비정형적이거나, 유연한 스키마가 필요하며, 수평적 확장이 중요한 경우 적합하다. (소셜 미디어 데이터, 실시간 로그 처리와 같은)
  2. ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 매핑하여, SQL을 작성하지 않고도 데이터베이스를 조작할 수 있게 하는 기술이다. ORM을 사용하면 생산성과 코드의 가독성이 향상되며, 데이터베이스 독립성을 확보할 수 있다. 하지만 복잡한 쿼리가 필요한 경우 SQL에 비해 성능이 떨어질 수 있으며, 데이터베이스의 동작 방식을 정확히 이해해야 한다.