데이터베이스란

Minji Lee·2025년 3월 26일
0

데이터베이스

목록 보기
1/5
post-thumbnail

데이터베이스와 DBMS

데이터베이스(database)란
여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합
▶︎ 데이터(정보)의 집합

DBMS(데이터베이스 관리 시스템)

DBMS란
데이터베이스를 관리하기 위한 응용 프로그램
▶︎ DBMS는 다른 응용 프로그램과 다르게 사용자와 직접 상호작용하기보다는 개발자가 만든 프로그램과 상호작용하며 실행됨
DBMS 설명

응용 프로그램의 DBMS 이용

  • 클라이언트-서버 간의 동작과 유사함
    → 주로 3-way handshake를 통해 TCP 연결 맺고, 때로는 DB 접속을 위한 인증 필요
  • 클라이언트(서버)가 DBMS에 쿼리를 보내며 원하는 결과 수행
    → DBMS는 데이터베이스 다루기 위한 언어(데이터베이스 언어) 제공 ex) SQL
    SQL(Strctured Query Language): RDBMS에서 데이터를 조작하고 관리하기 위한 언어
  • 여러 프로그램/사용자가 동일한 DBMS 동시다발적으로 사용 가능 → ACID 성질 존재 이유

DBMS 종류

├─ DBMS
   ├─ RDBMS(관계형 데이터베이스 관리 시스템)
	  └─ MySQL, Oracle, Maria DB, PostgreSQL, SQLite, Microsoft SQL Server 등
   └─ NoSQL(NoSQL 데이터베이스 관리 시스템)
      └─ MongoDB, Redis 등

SQL 종류

├─ SQL 종류
   ├─ DDL: 데이터 정의
   	  ├─ CREATE: 데이터베이스, 인덱스, 뷰, 테이블 등 데이터베이스 객체 생성 
      ├─ ALTER: 데이터베이스 객체 갱신
      ├─ DROP: 데이터베이스 객체 삭제
	  └─ TRUNCATE: 테이블 구조 유지한 채 모든 레코드 삭제
   ├─ DML: 데이터 조작
	  ├─ SELECT: 테이블 레코드 조회
      ├─ INSERT: 테이블 레코드 삽입
      ├─ UPDATE: 테이블 레코드 갱신
	  └─ DELETE: 테이블 레코드 삭제
   ├─ DCL: 데이터 제어
	  ├─ COMMIT: 데이터베이스에 작업 반영
      ├─ ROLLBACK: 작업 이전의 상태로 되돌림
	  └─ SAVEPOINT: 롤백의 기준점 설정
   └─ TCL: 트랜잭션 제어
      ├─ GRANT: 사용자에게 권한 부여
	  └─ REVOKE: 사용자로부터 권한 회수

데이터베이스는 왜 사용할까?

❓ 운영체제의 파일 시스템을 활용하면 데이터를 파일과 디렉터리 형태로 관리할 수 있는데 왜 파일 시스템 대신 데이터베이스를 이용하는가?
▶︎ 파일 시스템은 데이터를 단순 나열해서 저장하는 형태이므로 아래와 같은 불편함이 존재한다!
ex) 학과.txt과 학생.txt

학과 이름=컴퓨터과학, 학과 코드=123, 학생=A, B, ...,
학과 이름=경영힉, 학과 코드=234, 학생=C, ...,
학과 이름=경제학, 학과 코드=124, 학생=D, ...,
학생 이름=A, 나이=27, 사는 곳=서울, 학과=컴퓨터과학, 학번=1234
학생 이름=B, 나이=23, 사는 곳=인천, 학과=경영학, 학번=2345
학생 이름=C, 나이=-1, 사는 곳=경기, 학과=경제학, 학번=4567
학생 이름=D, 나이=22, 사는 곳=부산, 학과=컴퓨터과학, 학번=7346

1. 데이터 일관성 및 무결성 제공이 어렵다.

  • 데이터베이스는 보통 다수의 사용자가 동시다발적으로 이용하는 경우가 많음
    • 공유 데이터베이스를 점유하기 위한 경쟁상태가 발생할 수 있음
    • 그로인한 데이터 일관성이 훼손되기 쉬움
  • 데이터 결합(무결성)을 일일이 검사하기 힘들기 때문에 잘못된 데이터가 들어가도 에러가 나지 않음
    • 위의 학생.txt 파일에 학생 C의 나이가 -1로 저장되어 있지만, 파일 기반으로 데이터를 저장할 경우 잘못된 값 검출하기 어려움

2. 불필요한 중복 저장이 많아짐

  • 파일로 다량의 데이터 관리할 경우, 불필요한 중복 저장이 발생해 저장 공간 낭비로 이어짐
    • 학과.txt와 학생.txt파일에서 '학과이름='과 '학생='이 중복으로 데이터가 저장됨

3. 데이터 변경 시 연관 데이터 변경이 어려움

  • 한 데이터 변경 시 연관되어 있는 데이터도 일일이 변경해야함
    • 학생.txt에서 학생이름을 변경하면, 학과.txt파일에서도 해당 학생이름 변경해야함

4. 정교한 검색 어려움

  • 파일에서도 데이터 검색이 가능하지만, 파일 내 문자열 검색에 국한되는 경우가 많음
    • 예를 들어, '나이가 25살 이상인 컴퓨터과학과인 서울 거주자'라는 식의 정교한 검색이 어려움

5. 백업 및 복구가 어려움

  • 데이터베이스는 백업 및 복구 기능을 제공하지만, 파일 시스템은 제공하지 않거나 부족한 수준으로 지원함

데이터베이스 저장 단위와 트랜잭션

데이터베이스 저장단위

데이터베이스에는 다양한 속성을 가진 독립적 객체들이 저장될 수 있음

엔티티(entity): 독립적으로 존재할 수 있는 객체, 즉 어떠한 특성을 가진 대상
속성(attribute): 엔티티의 특성
엔티티 집합: 같은 속성을 공유하는 개별 엔티티들의 묶음
도메인: 엔티티 속성이 가질 수 있는 값의 집합
테이블(표): RDBMS에서 엔티티 집합을 나타내는 형태

  • 레코드(record): 데이터베이스에 기록된 각각의 엔티티, 즉 개별엔티티
  • 필드: 데이터베이스에 저장된 엔티티 속성
  • 차수(degree): 필드의 수
  • 카디날리티(cardinality): 한 필드에 대한 고유 값의 수

컬렉션: NoSQL DBMS 일종인 MongoDB에서의 엔티티 집합

  • 컬렉션은 개별 레코드를 Json형태의 데이터인 도큐먼트(document)라는 단위로 표현하고, 필드를 Json 키의 형태로 표현

스키마(schema)

스키마란?
데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의한 것으로, 레코드가 지켜야 할 틀

  • RDBMS에서는 레코드를 테이블 내 행으로 저장하여 명확한 스키마가 정의됨
    • 레코드들은 스키마로 정의된 테이블 구조, 필드의 데이터 타입 및 제약 조건 따라야함
  • NoSQL의 MongoDB는 컬렉션 내 도큐먼트로 저장하여 명확한 스키마가 정의되지 않아, 자유로운 형태로 레코드 저장 가능
    • 따라서, NoSQL은 스키마리스(schema-less) 데이터베이스라고도 부름

트랜잭션과 ACID

트랜잭션이란?
데이터베이스와의 논리적 상호작용의 단위, 즉 데이터베이스가 처리하는 작업의 단위

  • 초당 트랜잭션(TPS) 지표로 데이터베이스 작업 성능 나타냄

안전한 트랜잭션을 위한 지켜야하는 성질 4가지, ACID

  1. 원자성(Atomicity)
    하나의 트랜잭션 결과가 모두 성공하거나 모두 실패하는 성질(=All or Nothing)
    즉, 트랜잭션이 반드시 커밋(commit)되거나 롤백(rollabck)되어야 한다.
  2. 일관성(Consistency)
    데이터베이스가 지켜야 하는 일련의 규칙들을 지켜야 함
    ex) 잔액이 0 미만이면 안된다는 제약조건이 설정된 상황에서, 인출하는 트랜잭션 수행 후 잔액이 음수가 되면 안된다! → 일관성을 해침
  3. 격리성(Isolation)
    동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장하는 성질
    즉, 한 트랜잭션이 어떤 데이터 접근하여 조작 중일 때는 다른 트랜잭션이 접근할 수 없다.
  4. 지속성(Durability)
    트랜잭션이 성공적으로 완료된 후에 그 결과가 데이터베이스에 영구적으로 반영되는 성질
    즉, 한 트랜잭션이 성공적으로 완료되었다면, 그 결과가 시스템 장애가 발생해도 데이터베이스에 반영되어야 한다. → 대부분 DBMS에는 이를 위해 회복 메커니즘이 구현되어 있음

이것이 컴퓨터 과학이다

0개의 댓글