DBMS

김나영·2023년 7월 6일
0

CS

목록 보기
3/12

DBMS란?

  • Database Management system의 준말로 데이터를 한곳에 모은 저장소를 만들고 그 저장소에 여러 사용자가 접근하여 데이터를 저장 및 관리 등의 기능을 수행하며 공유할 수 있는 환경을 제공하는 응용 소프트웨어 프로그램

  • 공유 저장소(서버)를 구축하고 사용자들에게 접근정보를 공유하여 데이터를 처리할 수 있는 인터페이스를 제공하고 복구기능과 보안성 기능 또한 제공

DBMS 용어

Tuple

  • 테이블에서 행을 의미

  • 레코드(record) or 로우(row)라고도 부름

  • 릴레이션에서 중복되는 값을 가질 수 X

  • 튜플의 수 : 카디날리티(Cardinality)

Attribute

  • 테이블에서 열을 의미

  • 칼럼(Column)이라고도 부름

  • Attribute의 수 : Degree(디그리)

    • Degree : 정도 → 도가 지나치다

Relation(=Table)

  • 관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위

  • ex) 유저 정보 > 유저 테이블, 게시글 정보 > 게시글 테이블 등

Key

  • 테이블에서 행의 식별자로 이용되는 테이블의 열

  • ex) 유저ID, 게시글ID

  • 식별자(identifier)

    • 여러 개의 집합(인스턴스)체를 담고 있는 하나의 테이블에서 각각을 구분할 수 있는 논리적인 이름, 개념
  • 주키와 외래키로 나뉘며 하나의 테이블에서 주키는 1개 또는 1쌍으로만 구성되고, 외래키는 여러개로 구성될 수 있음

    • PK(주키) : 현재 테이블에서 행을 식별하는 식별자
    • FK(외래키) : 현재 테이블과 연관되어있는 외부 테이블과 연관된 행을 식별하는 식별자 (조인할때 써서 조인키 라고도 함)

Domain

  • 하나의 어트리뷰트가 취할 수 있는 같은 타입의 원잣값들 집합

    ex) 성별 어트리뷰트의 도메인은 남과 여의 데이터의 값만 가능
    나이 어트리뷰트의 도메인은 숫자의 값만 입력 가능 그 외의 값은 입력될 수 X

DBMS 기능

요구 사항

  • DB를 효율적이고 직관적이고 안전하게 사용할 수 있게 해주는 기능을 가지고 있음

    • 효율적

      • 동일한 데이터가 저장되는 것을 방지하는 중복 제어 가능
      • 무결정 제약 조건을 정의 / 검사하는 기능
    • 직관적

      • 서로 다른 데이터 간의 관계를 표현해주는 관계 표현
      • 편리한 인터페이스 제공
    • 안전하게

      • 접근하는 사용자마다 다른 권한을 주는 접근 통제 기능
      • 데이터가 잘못 수정 / 삭제 되었을 때 백업하는 기능

Transaction

  • DBMS의 요구사항을 충족시킬 핵심 기능

  • 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

    ex) 회원가입 절차 = 가입 Transaction, 결제 절차 = 결제 Transaction

  • 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용

    ex) 회원가입, 결재는 작업 단위로 병행(따로) 처리됨

    ex) 회원가입 처리중 잘못된 항목이 존재하여 가입불가시 가입취소(회복)됨

    ex) 결재 처리중 잔액부족 등으로 결재가 불가능할경우 결재취소(회복) 됨

  • 사용자가 시스템에 대한 요구 시 시스템이 응답하기 위한 상태 변환과정의 작업 단위로 사용

    ex) 회원가입 요구시 가입완료 응답을 하기까지의 작업단위 = 가입 Transaction
    ex) 결재 요구시 결재완료 응답을 하기까지의 작업단위 = 결재 Transaction

특징

  • 데이터의 무결성을 보장하기 위해 가져야할 특성

    • 원자성(Atomicity)

      • Transaction의 연산은 데이터베이스에 모두 반영되도록 완료되든지 아니면 전혀 반영되지 않도록 복구되어야 함
      • 또한 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 함
      • 완벽히 수행되지 않고 하나라도 오류가 발생하면 전부 취소되어야 함
    • 일관성(Consistency)

      • Transaction이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환
      • Transaction 수행 전과 Transaction 수행 완료 후의 상태가 같아함
    • 독립성(Isolation)

      • 둘 이상의 트랜잭션이 동시에 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 X
    • 영속성, 지속성(Durability)

      • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장이 나더라도 영구적으로 반영되어야 함
  • 데이터 관리의 원칙 중 안전, 공유, 일관성, 손상방지 등의 원칙을 트랜잭션 단위로 해결


RDB(관계형 데이터베이스=SQL)

  • 현재 가장 많이 사용되고 있는 데이터베이스의 한 종류

  • 테이블(table)로 이루어져 있으며, 테이블은 키(key)와 값(value)으로 나타냄

  • 데이터 종속성을 관계(Relationship)로 표현하는 것이 큰 특징

특징

  • 데이터의 분류, 정렬, 탐색 속도가 빠름

  • 신뢰성인 높고, 어떠한 상황에서도 데이터의 무결성을 보장

  • SQL이라는 표준 언어로 관리가 가능하기에 개발 언어, 데이터베이스 종류 등에 변화가 있어도 기존에 사용하던 애플리케이션은 그대로 사용이 가능

  • 기존에 작성된 스키마를 수정하기가 어려움

  • 데이터베이스의 부하를 분석하는 것이 어려움

연관관계(1:1, 1:N, N:M)

관계
관계형데이터 베이스에 들어있는 “관계형”에서의 “관계”는 뭘 의미하는 걸까?

  • 각 테이블의 행과 행이 연결되는 관계를 의미
  • 테이블 간 관계는 일대일(1:1), 일대다(1:N), 다대다(N:N)의 관계 존재

  • 각 테이블들은 기본키(Primary key)와 외래키(Foreign key)를 통해 맺어짐

  • 일대일(1 : 1)

    • 하나의 테이블과 다른 하나의 테이블만 연결된 것

      ex) 나 : 내 핸드폰 = 유저 : 프로필

      • 나는 1개의 핸드폰을 가지고, 유저는 1개의 프로필정보를 가지는것과 동일
  • 일대다(1 : N)

    ex) 나 : 담임 선생님 = 유저 : 게시글

    • 각 반에는 한 명의 담임선생님과 여러 명의 학생이 존재하게 되는데, 이 한 명의 담임선생님께 속한 학생들은 일대다 관계
    • 게시글 또한 한명의 유저만 작성하기 때문에 일대다 관계
  • 다대다(N : M)

    ex) 나 : 동아리 = 게시글 : 해시테그

    • 여러 동아리는 각자 여러 명의 회원을 가지고 있을 것이고, 같은 사람이 여러 개의 동아리에 가입할 수 있음 이런 동아리와 여러 회원들의 관계를 테이블로 표현한다면 다대다로 표현
    • 게시글에 사용되는 해시테그의 연관관계를 보자면, 여러 게시글이 여러 해시테그들과 관계를 가질 수 있으므로 다대다로 표현

SQL(Structured Query Language)

  • 관계형 데이터베이스에서 사용되는 언어로, ‘에스큐엘’ 또는 ‘시퀄’로 읽음

  • 관계형 DBMS 중 MySQL를 배우려면 SQL을 필수

  • 데이터베이스를 조작하는 ‘언어’이긴 하지만 일반적인 프로그래밍 언어(C, 자바, 파이썬 등)와는 조금 다른 특성을 갖음

  • 특정 회사에서 만드는 것이 아니라 국제표준화기구에서 SQL에 대한 표준을 정해서 발표하고 있는데 이를 표준 SQL이라고 함

  • SQL을 사용하는 DBMS를 만드는 회사가 여러 곳이기 때문에 표준 SQL이 각 회사 제품의 특성을 모두 포용하지 못해 DBMS를 만드는 회사에서는 되도록 표준 SQL을 준수하되, 각 제품의 특성을 반영한 SQL을 사용

  • 표준 언어로 관리가 가능하기에 개발 언어, 데이터베이스 종류 등에 변화가 있어도 기존에 사용하던 애플리케이션은 그대로 사용이 가능

    • 서비스를 위한 데이터는 데이터베이스(DBMS)를 사용하게 됨

      • 이런 내용을 모두 애플리케이션마다 구현하고 예외를 처리하려면 엄청난 리소스가 들지만, DBMS에서는 이를 제공해주기 때문

종류

  • Oracle

    • 미국 오라클(Oracle) 사의 관계형 데이터베이스 관리 시스템(RDBMS)

    • 오픈 소스 DBMS가 있음에도 안정성과 유지보수를 보장받을 수 있다는 장점 때문에 비 IT업종 기업에서 많이 사용

    • 기업용으로 주로 사용

    • 대량의 정보관리를 할 때 타 DBMS에 비해 좋은 성능을 보임

    • 오라클 자체 SQL 쿼리를 사용해 표준 형식과 약간 다름

  • MySQL

    • 관계형 데이터베이스 관리 시스템(RDMS)

    • 오픈 소스이며, 다중 사용자와 다중 스레드 지원

    • 오픈 소스 라이선스를 따르기 때문에 무료로 사용 가능

    • 표준 SQL 형식 사용

    • 오픈 소스이기 때문에 기술 지원의 한계가 있음

  • PostgrsSQL

    • 오픈 소스 객체-관계형 데이터베이스 시스템 (ORDBMS)
    • macOS 서버의 경우 기본 데이터베이스로 사용됨
    • 북미나 일본에서 많이 사용
    • 초기 개발 단계부터 완벽한 ACID와 MVCC를 지원하는 아키텍처로 설계
    • 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 SQL 차원에서 제공
    • 테이블 상속 기능을 이용해 하위 테이블 생성 가능
    • 오픈 소스임에도 상용 RDBMS급의 기능을 제공
    • 기본적인 CRUD 성능이 경쟁 DB에 비해 좋지 않음
  • MariaDB

    • 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)
    • MySQL과 동일한 소스 코드를 기반, GPL v2 라이선스를 따름
    • MySQL의 개발진들이 오라클의 정책이 추구하는 바와 맞지 않아 나와서 개발한 DB
    • 위의 말한 관계로 인해 MySQL과 거의 100% 호환성을 가지고 있음
    • MySQL에 비해 애플리케이션 부분 속도가 약 4~5천 배 빠르고, 성능면에선 70% 향상을 보인다고 말함
    • 좀 더 자유로운 MySQL 정도로 이해하면 될 듯
  • SQLite

    • 독립형 파일 기반의 오픈소스 RDBMS

    • 구글 안드로이드 운영 체제에 기본 탑재된 데이터베이스

    • ACID 준수

    • 이름과 같이 매우 가벼움

      • 사용하는 공간은 시스템에 따라 다르지만 600kb 미만의 공간을 차지
    • 완전히 독립형이라 SQLite가 작동하기 위해 시스템에 설치해야 하는 외부 종속성 X

    • 이식성이 뛰어남

    • 동시성의 제한, 사용자 관리 존재의 부재, 서버리스 데이터베이스이기에 보안이 약함


NoSQL

  • NoSQL이라고도 부르며, Not Only SQL(SQL 뿐만이 아닌. 이라는 뜻)의 줄임말

  • SQL뿐만 아니라 다른 여러 장점을 가지고 있다!!

  • 기존의 관계형 데이터베이스의 한계를 뛰어넘기 위해 만들어진 새로운 형태의 데이터베이스라서, 관계형 데이터베이스보다 더 융통성 있는 데이터 모델을 사용하며, 데이터의 저장 및 검색에 특화된 메커니즘을 제공

    • 따라서 종류마다 특화된 기능이 다름
  • 대부분 분산 환경에서의 데이터 처리를 더욱 빠르게 하기 위해 개발됨

종류

  • MongoDB

    • 유연한 스키마

      • MongoDB는 유연한 문서 지향 데이터 모델을 사용하여 데이터를 저장합
      • 이는 데이터의 구조를 동적으로 변경할 수 있음을 의미
    • 분산 아키텍처

      • MongoDB는 수평적으로 확장 가능한 분산 아키텍처를 제공하여 대규모 데이터 처리 및 고가용성을 지원
    • 문서형 DB 특징

      • JSON 객체와 비슷한 문서에 데이터를 저장
      • 각 문서에는 필드와 값의 쌍이 포함
      • 대량의 데이터를 수용하도록 수평 스케일아웃이 가능
  • Redis

    • 인메모리 데이터 저장소

      • Redis는 데이터를 메모리에 저장하므로 매우 빠른 데이터 액세스와 응답 시간을 제공
    • 다양한 데이터 구조

      • Redis는 문자열, 해시, 목록, 집합, 정렬된 집합 등 다양한 데이터 구조를 지원하여 유연한 데이터 모델링을 가능하게 함
    • Key-Value DB

      • NoSQL에서도 키값 데이터베이스가 존재함

      • 대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 경우 사용

      • 사용자 선호도 저장 또는 캐싱에서 사용

  • HBase

    • 분산 저장 시스템

      • HBase는 Hadoop 분산 파일 시스템(HDFS) 위에서 작동하며, 대용량 데이터의 분산 저장과 처리를 지원
    • 일관된 읽기/쓰기 성능

      • HBase는 일관된 읽기와 쓰기 성능을 제공하여 대규모 데이터에 대한 실시간 액세스를 지원

      • Wide-column store

        • 테이블, 행 및 동적 열에 데이터 저장
        • 각 행이 동일한 열을 가질 필요가 없다는 점에서 RDB에 비해 뛰어난 유연성을 제공
        • 대량의 데이터 저장에 적합
        • IOT 데이터와 사용자 프로필 데이터 저장 시 사용
  • Neo4j

    • 그래프 데이터베이스

      • Neo4j는 그래프 데이터베이스로서 데이터 간의 관계를 중요시하고 효과적으로 저장하고 조회할 수 있음
    • ACID 트랜잭션

      • Neo4j는 원자성, 일관성, 고립성, 지속성(ACID)을 보장하는 트랜잭션을 지원하여 데이터의 정합성과 신뢰성을 유지
    • 그래프 DB 특징

      • 소셜 네트워킹, 추천 엔진 등에서 사용

      • 정점과 간선에 데이터를 저장

      • 정점에는 사람, 장소 및 사물에 대한 정보가 저장

      • 간선에는 정점과의 관계에 대한 정보가 저장

💡어떤 DBMS 를 사용해야하나요?

  • 테이블 구조가 정해져 있고, 내부 데이터 수정이 빈번할 때 -> SQL DB(RDB)
  • 테이블 구조가 정확히 잡혀있지 않고(추가적으로 수정이 될 가능성이 높을 때) 대량의 데이터를 처리할 때 -> NoSQL DB
  • 그리고, DBMS(DB엔진) 트렌드를 잘 따라가는것도 중요!!

0개의 댓글