반응형
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의 장점
- 코드 간결화: SQL 문을 직접 작성하지 않고, 파이썬 코드로 데이터베이스 작업을 수행할 수 있어 코드가 간결해집니다.
- 유지보수성 향상: 데이터베이스 스키마 변경 시 코드 수정이 최소화됩니다. ORM 매핑을 통해 스키마 변경을 쉽게 반영할 수 있습니다.
- 객체 지향 설계: 객체 지향 방식으로 데이터베이스 작업을 설계 및 구현할 수 있습니다.
- 웹 애플리케이션 개발: Django, Flask 등 웹 프레임워크에서 ORM을 사용하여 데이터베이스 작업을 효율적으로 수행할 수 있습니다.
반응형
'⌨️ Python' 카테고리의 다른 글
[Python] Exception Handling - 예외처리 (0) | 2024.07.16 |
---|---|
[Python] Module, Package, Virtual Environment (모듈, 패키지, 가상환경) (0) | 2024.07.15 |
[Python] 파일 입출력 (0) | 2024.07.15 |
[Python] Generator, Iterator, Yield (제너레이터, 이터레이터, Yield) (0) | 2024.07.15 |
[Python] Class & OOP (클래스 & 객체지향 프로그래밍) (0) | 2024.07.14 |