DB/DBMS/SQL

강혜인·2025년 5월 29일
0

Security

목록 보기
11/12

Database(DB)

체계적으로 구성된 데이터의 집합으로, 데이터를 효율적으로 저장 및 관리하고 검색, 갱신, 삭제할 수 있는 기능을 제공한다.

→ 여기서 데이터는 이 세상에 존재하는 모든 정보를 가리키며, 그 어떤 것도 데이터가 될 수 있다.

이러한 데이터를 소프트웨어에서 효율적으로 관리하기 위한 저장소가 DB이다.

DB는 여러 응용 프로그램이 공유하고 동시에 접근할 수 있는 중앙 집중화된 저장소를 제공하고, 데이터의 일관성, 무결성, 보안을 유지하기 위해 설계되어 있다.

DB 특징

  • 데이터의 구조화
    • DB는 테이블 형태로 데이터를 구조화하며, 각 테이블은 컬럼(열)과 로우(행)로 이루어져 있다. 이 구조는 데이터의 관계를 나타내고, 데이터의 중복을 최소화하고 데이터를 효율적으로 저장하고 검색할 수 있게 한다.
  • 데이터의 일관성과 무결성
    • DB는 여러 사용자와 응용 프로그램이 동시에 접근하더라도 데이터의 일관성과 무결성을 보장해야 한다. 이를 위해 Transaction과 Constraints(제약 조건)을 사용해 데이터의 정합성을 유지한다.
  • 데이터의 보안
    • DB는 데이터의 무단 접근을 방지하기 위해 인증과 권한 부여 매커니즘을 제공한다. 이를 통해 데이터에 접근할 수 있는 사용자와 권한을 제어할 수 있다.
  • 데이터의 동시성 관리
    • 여러 사용자가 동시에 데이터에 접근하는 상황에서 데이터의 일관성과 무결성을 유지하기 위해 동시성 관리 기능을 제공한다. 이를 통해 Transaction간의 충돌을 방지하고 조율한다.
  • 데이터의 추상화
    • DB는 데이터를 추상화해 응용 프로그램이 데이터를 다루기 쉽도록 준다. SQL(Structured Query Language)을 사용해 데이터를 검색, 수정, 삭제하는 등의 작업을 할 수 있다.

구성 요소

  • Data
    • 정보의 집합으로, 텍스트, 숫자, 이미지 등 다양한 형식이 있다.
  • Schema
    • DB의 구조와 제약 조건을 정의한 설계도로, 테이블, 컬럼, 관계 등이 포함된다.
  • Table
    • 데이터의 집합을 의미하며, 행과 열로 구성된다.
    • 각 행은 레코드를 나타내고, 열은 속성을 나타낸다.
  • Record
    • 테이블 내의 한 행으로, 데이터의 실제 값을 포함한다.
  • Column
    • 테이블 내의 열로, 특정 속성의 데이터를 포함한다.
  • Index
    • 데이터의 검색 속도를 향상 시키기 위해 생성하는 데이터 구조로, 특정 컬럼의 값을 기준으로 정렬해 빠른 검색을 가능하게 한다.
  • Relationship
    • 테이블 간의 연결을 나타내며, 관계형 데이터베이스에서 중요하다.
  • SQL(Structured Query Language)
    • DB를 관리하고 조작하기 위한 언어로, 데이터의 삽입, 조회, 수정, 삭제 등을 작업한다.

DBMS

특정 목적을 처리하기 위한 프로그램이다.

→ MySQL, Oracle, SQL Server, MariaDB등이 있다. 소프트웨어 각각의 사용 방법과 특징이 다르지만, 특정 목적을 위해서는 어떤 것을 사용해도 괜찮다.

DBMS 분류

계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체 지향형(Object-Oriented), 객체 관계형(Object-Relational)등으로 분류된다.

현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많은 부분을 차지하며, MySQL도 관계형 DBMS에 포함된다.

  • Hierarchical DBMS
    • 각 계층은 트리 형태를 갖는다.
    • 처음 구성을 끝내면 이를 변경하기가 까다롭다.
    • 지금은 사용하지 않는 형태이다.
  • Network DBMS
    • Hierarchical DBMS의 문제점을 개선하기 위해 등장한 구조이다.
    • 하위에 있는 구성원 끼리 연결된 유연한 구조를 가지고 있다.
    • Network DBMS를 잘 활용하려면 프로그래머가 모든 구조를 이해해야지만 프로그램 작성이 가능하다는 단점이 있다.
    • 지금은 거의 사용하지 않는 형태이다.
  • Relational DBMS
    • RDBMS라고도 한다.
    • MySQL 뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용된다.
    • table이라는 최소 단위로 구성되며, 각 table은 하나 이성의 column과 row로 이루어져 있다.
    • 모든 데이터가 table에 저장된다.
  • Object-Oriented DBMS
    • 객체지향 프로그래밍의 개념을 데이터베이스에 적용한 시스템이다. 객체 개념을 그대로 DB에 도입해 데이터와 데이터에 대한 작업(메서드)을 하나의 객체로 관리한다.
    • 객체지향 언어에서 사용하는 클래스, 상속, 다형성 등을 데이터베이스에서도 사용할 수 있게 한다.
    • 객체와 객체 사이의 관계를 그대로 유지할 수 있어서 데이터 모델링이 더 유연하고 직관적이다.
    • 객체를 클래스 형태로 재사용할 수 있기 때문에 데이터베이스 설계와 관리가 효율적이다.
    • 기존 Relational DBMS에 비해 널리 사용되지 않기 때문에 학습 곡선이 높을 수 있다.
    • 표준화가 부족해 시스템 간의 호환성이 낮다.
  • Object-Relational DBMS
    • RDBMS의 구조에 객체지향 개념을 일부 도입한 시스템이다. 기존의 RDBMS 모델을 확장해 객체 지향 프로그래밍의 요소를 통합한 것으로, RDBMS의 테이블과 행 같은 기본구조는 유지하면서 객체지향 개념을 적용할 수 있게 만든 DBMS이다.
    • 기존의 RDBMS에 새로운 데이터 타입이나 객체지향 개념을 추가할 수 있다.
    • 객체를 DB에 저장하고, 객체 지향적 접근 방법을 통해 관리할 수 있다.
    • 기본적인 숫자나 문자열 외에도, 사용자 정의 데이터 타입을 지원한다.
    • 기존의 SQL 기반 접근 방식을 유지하면서 객체지향 개념을 추가해 RDBMS와의 호환성을 유지한다.
    • Object-Oriendted DBMS와 비교했을 때, 객체지향 기능이 완전하지 않다.
    • RDBMS의 기본 구조를 유지하기 때문에, 복잡한 객체지향 개념을 완벽히 구현하기에는 한계가 있다.

SQL

Structured Query Language

RDBMS에서 데이터를 관리하고 조작하기 위해 사용하는 표준화된 프로그래밍 언어이다.

SQL을 통해 DB에 저장된 데이터를 조회, 삽입, 수정, 삭제 등의 작업을 할 수 있다.

SQL은 DB와 상호작용하는 기본적인 언어로, RDBMS를 사용하는 거의 모든 시스템에서 사용된다.

SQL의 주요 기능

  • 데이터 정의 언어(DDL : Data Definition Language)
    • DB의 구조를 정의하는 명령어들을 포함한다. 주로 table, index, view 등을 생성하거나 수정, 삭제할 때 사용된다.
    • 주요 명령어 :
      • ‘CREATE’ : 새로운 DB 객체(table, index 등)를 생성

      • ‘ALTER’ : 기존 DB 객체의 구조를 수정

      • ‘DROP’ : DB 객체를 삭제

        CREATE TABLE Students(
        	ID INT PRIMARY KEY,
        	Name VARCHAR(50),
        	AGE INT
        );
  • 데이터 조작 언어(DML : Data Manipulation Language)
    • DB에 저장된 데이터를 조회하거나 수정, 삽입, 삭제하는 명령어들을 포함한다.
    • 주요 명령어 :
      • ‘SELECT’ : 데이터 조회

      • ‘INSERT’ : 새로운 데이터 삽입

      • ‘UPDATE’ : 기존 데이터 수정

      • ‘DELETE’ : 데이터 삭제

        -- 데이터 조회
        SELECT * FROM Students WHERE Age > 20;
        
        -- 데이터 삽입
        INSERT INTO Students (ID, Name, Age) VALUES  (1, 'Hyein', 23);
        
        -- 데이터 수정
        UPDATE Student SET Age = 21 WHERE Name = 'Hyein';
        
        -- 데이터 삭제
        DELETE FROM Student WHERE ID = 1;
  • 데이터 제어 언어(DCL : Data Control Language)
    • DB에 대한 접근 권한을 제어하는 명령어들을 포함한다. 주로 사용자에게 권한을 부여하거나 철회할 때 사용된다.

    • 주요 명령어 :
      - ‘GRANT’ : 특정 사용자에게 DB 객체에 대한 권한을 부여한다.
      - ‘REVOKE’ : 특정 사용자에게 부여된 권한을 철회한다.

      GRANT SELECT, INSERT ON Students TO 'username';
      REVOKE INSERT ON Students FROM 'username';
  • 트랜잭션 제어 언어(TCL : Transaction Control Language)
    • DB내에서 작업의 논리적 단위인 트랜잭션을 제어하는 명령어들을 포함한다. 트랜잭션은 DB의 일관성을 보장하기 위해 사용된다.
    • 주요 명령어 :
      • ‘COMMIT’ : 트랜잭션에서 수행한 모든 변경사항을 확정한다.

      • ‘ROLLBACK’ : 트랜잭션에서 발생한 모든 변경 사항을 취소하고 이전 상태로 되돌린다.

      • ‘SAVEPOINT’ : 트랜잭션 내에서 중간 저장점을 설정한다.

        BEGIN;
        UPDATE Student SET Age = 23 WHERE Name = 'Hyein';
        COMMIT;
        
        -- if error,
        ROLLBACK;

SQL의 특징

  • 표준화
    • SQL은 국제 표준화 기구(ISO)와 미국 국가 표준 협회(ANSI)에서 표준화한 언어로, 다양한 DBMS(MySQL, PostgreSQL, Oracle등)에서 거의 동일하게 사용된다.
  • 직관적
    • SQL은 영어 문법과 유사한 구조를 가지고 있어, 비교적 이해하기 쉽다.
  • 다양한 기능
    • 데이터 조회, 삽입, 삭제 뿐만 아니라, 복잡한 데이터 연산 및 관리 기능을 제공한다.

0개의 댓글