⌨️ Python & Algorithm

[Python] Database - 데이터베이스

Bigbread1129 2024. 7. 15. 15:54

Database

데이터베이스는 구조화된 데이터의 집합으로, 데이터를 효율적으로 저장, 관리, 검색할 수 있도록 설계된 시스템입니다.
  • 데이터베이스는 다양한 응용 프로그램에서 데이터를 일관성 있게 관리하고 사용할 수 있게 합니다.

데이터베이스의 유형

관계형 데이터베이스 (RDBMS)

  • 관계형 데이터베이스는 데이터를 테이블 형식으로 저장하며, SQL(Structured Query Language)을 사용하여 데이터를 관리하고 조작합니다.
  • 관계형 데이터베이스의 대표적인 예로는 MySQL, PostgreSQL, Oracle 등이 있습니다.
  • 장점:
    • 데이터의 무결성을 보장합니다.
    • 복잡한 쿼리 작성이 가능합니다.
    • 트랜잭션 처리를 지원합니다.

 

비관계형 데이터베이스 (NoSQL)

  • 비관계형 데이터베이스는 다양한 데이터 모델을 지원하며, 관계형 데이터베이스와 달리 테이블 구조를 갖지 않습니다.
  • NoSQL 데이터베이스의 대표적인 예로는 MongoDB, Cassandra, Redis 등이 있습니다.
  • 장점:
    • 유연한 데이터 모델
    • 수평적 확장에 용이합니다.
    • 높은 성능과 처리 속도를 자랑합니다.

데이터베이스의 구성요소

테이블 (Table)

  • 테이블은 데이터가 저장되는 기본 단위로, 행(row)과 열(column)로 구성됩니다.

레코드 (Record)

  • 레코드는 테이블의 한 행(row)으로, 각 행은 개별 데이터 항목을 나타냅니다.

필드 (Field)

  • 필드는 테이블의 한 열(column)으로, 각 열은 특정 데이터 속성을 나타냅니다.

키 (Key)

  • 키는 데이터를 고유하게 식별할 수 있는 필드입니다. 키는 주로 중복된 데이터 없이 각 레코드를 식별하기 위해 사용됩니다.
  • 기본 키 (Primary Key): 각 레코드를 고유하게 식별하는 데 사용되는 필드. 중복값이 없어야 하며, null 값을 가질 수 없습니다.
  • 외래 키 (Foreign Key): 다른 테이블의 기본 키를 참조하는 필드로, 테이블 간의 관계를 설정하는 데 사용됩니다.

관계형 데이터베이스의 특징

Schema (스키마)

스키마는 데이터베이스의 구조와 제약 조건을 정의합니다.
스키마는 테이블, 필드, 데이터 타입, 인덱스, 제약 조건 등을 포함하며, 데이터베이스의 논리적 설계를 나타냅니다.
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(100),
    salary DECIMAL(10, 2)
);

 

SQL (Structured Query Language)

SQL은 관계형 데이터베이스에서 데이터를 정의, 조작, 제어하기 위한 언어입니다.
  • SQL은 데이터베이스를 생성, 수정, 삭제하는 DDL(Data Definition Language), 데이터를 삽입, 조회, 갱신, 삭제하는 DML(Data Manipulation Language), 데이터베이스 접근 권한을 관리하는 DCL(Data Control Language)로 구성됩니다.
-- 테이블 생성 (DDL)
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(100),
    salary DECIMAL(10, 2)
);

-- 데이터 삽입 (DML)
INSERT INTO employees (name, position, salary) VALUES ('Alice', 'Engineer', 75000.00);

-- 데이터 조회 (DML)
SELECT * FROM employees;

-- 접근 권한 부여 (DCL)
GRANT SELECT, INSERT ON employees TO 'user'@'localhost';

 

참조 무결성 (Referential Integrity)

참조 무결성은 데이터의 일관성을 유지하기 위한 제약 조건입니다.
  • 이는 외래 키(Foreign Key)를 통해 구현되며, 한 테이블의 값이 다른 테이블의 값을 참조할 때 그 값의 유효성을 보장합니다.
CREATE TABLE departments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(100),
    salary DECIMAL(10, 2),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

관계형 데이터베이스의 필요성

데이터 관리

  • 관계형 데이터베이스는 대량의 데이터를 효율적으로 저장, 관리, 검색할 수 있도록 설계되었습니다.
  • 효율적인 저장: 데이터 중복을 최소화하고, 필요한 데이터만 저장하여 저장 공간을 절약합니다.
  • 빠른 검색: 인덱스를 통해 빠른 데이터 검색과 조회가 가능합니다.

 

데이터 무결성

  • 데이터 무결성은 데이터의 정확성과 일관성을 유지하는 데 중요한 역할을 합니다.
  • 관계형 데이터베이스는 스키마와 제약 조건을 통해 데이터 무결성을 보장합니다.
  • 정확성: 데이터가 잘못되거나 부정확한 값이 입력되지 않도록 제약 조건을 설정합니다.
  • 일관성: 트랜잭션을 통해 데이터의 일관성을 유지하며, 데이터베이스 상태를 항상 올바르게 유지합니다.

 

데이터 보안

  • 관계형 데이터베이스는 접근 제어를 통해 데이터를 보호합니다.
  • 사용자 권한을 설정하여 데이터에 대한 접근을 제어할 수 있으며, 데이터의 기밀성과 무결성을 보장합니다.
  • 접근 제어: 사용자의 역할과 권한을 설정하여 데이터베이스 접근을 제어합니다.
  • 기밀성: 민감한 데이터에 대한 접근을 제한하여 데이터의 기밀성을 유지합니다.
  • 무결성: 데이터의 변경 및 삭제를 제어하여 데이터의 무결성을 유지합니다.

Python과 Database 연동

Python 애플리케이션은 데이터베이스에 접속하고, 데이터를 조회, 삽입, 수정, 삭제하는 작업을 통해 데이터를 효율적으로 처리하고, 데이터 기반 애플리케이션을 개발할 수 있습니다.

 

Python DB-API

  • Python DB-API는 Python에서 데이터베이스와 상호 작용하기 위한 표준 인터페이스를 제공합니다.
  • 주요 객체는 Connection 객체와 Cursor 객체입니다.
  • Connection 객체: 데이터베이스와의 연결을 관리합니다.
  • Cursor 객체: SQL 문을 실행하고 결과를 관리합니다.

 

주요 데이터베이스 모듈

SQLite

  • SQLite는 내장형 데이터베이스로, 파일 기반의 경량 데이터베이스입니다.
  • Python 표준 라이브러리에 포함되어 있어 추가 설치 없이 사용할 수 있습니다.

MySQL

  • MySQL은 오픈 소스 관계형 데이터베이스입니다.
  • Python에서는 mysql-connector-python 모듈을 사용하여 MySQL과 상호 작용할 수 있습니다.

PostgreSQL

  • PostgreSQL은 오픈 소스 객체-관계형 데이터베이스입니다.
  • Python에서는 psycopg2 모듈을 사용하여 PostgreSQL과 상호 작용할 수 있습니다.

ORM (Object-Relational Mapping)

  • ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어를 사용하여 관계형 데이터베이스를 조작하는 방법입니다.
  • SQL 문을 직접 작성하지 않고, 객체 지향 방식으로 데이터베이스 작업을 수행할 수 있습니다. 

 

ORM의 장점

  1. 코드 간결화: SQL 문을 직접 작성하지 않고, 파이썬 코드로 데이터베이스 작업을 수행할 수 있어 코드가 간결해집니다.
  2. 유지보수성 향상: 데이터베이스 스키마 변경 시 코드 수정이 최소화됩니다. ORM 매핑을 통해 스키마 변경을 쉽게 반영할 수 있습니다.
  3. 객체 지향 설계: 객체 지향 방식으로 데이터베이스 작업을 설계 및 구현할 수 있습니다.
  4. 웹 애플리케이션 개발: Django, Flask 등 웹 프레임워크에서 ORM을 사용하여 데이터베이스 작업을 효율적으로 수행할 수 있습니다.