+ 개발

데이터베이스 기초

AI.Logger 2024. 8. 21. 03:12
  • 수업 내용 리마인드 및 아카이빙 목적의 업로드

"Image generated using DALL-E by OpenAI"


 

1. 데이터베이스(DB)란?

 

데이터베이스란 여러 사람이 함께 사용하기 위해 데이터를 모아 체계적으로 관리하는 시스템이에요. 데이터를 중복 없이 깔끔하게 정리해서 검색하거나 수정하기 쉽게 해주는 역할을 하죠. 현대적인 데이터베이스의 개념은 1963년 C. 바크만이라는 사람이 제너럴일렉트릭에서 개발한 IDS(Integrated Data Store)라는 시스템에서 시작되었어요.

 

2. 데이터베이스의 구조

 

데이터는 보통 테이블 형태로 저장되는데요, 하나의 데이터베이스(DB)에는 여러 개의 테이블을 만들 수 있어요. 각 테이블은 표처럼 생겼고, 관련된 정보를 담아 다수의 테이블로 데이터를 관리하면 큰 데이터를 다루기도 편리해요.

-- 데이터베이스 생성 예시
CREATE DATABASE MyDatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 테이블 생성 예시
CREATE TABLE Customers (
    CustomerID INT NOT NULL AUTO_INCREMENT,
    FirstName VARCHAR(255),
    LastName VARCHAR(255),
    Email VARCHAR(255),
    PRIMARY KEY (CustomerID)
);

 

3. DBMS란?

 

DBMS(Database Management System)란, 말 그대로 데이터베이스를 관리하는 시스템이에요. DBMS를 통해 데이터베이스나 테이블을 쉽게 만들고, 삭제하거나 조회, 추가, 수정, 삭제하는 등의 작업을 할 수 있어요. 이 시스템은 보통 클라이언트-서버 구조로 되어 있어, 클라이언트가 명령을 내리면 서버가 그 명령을 처리해줍니다.

 

4. 관계형 데이터베이스(RDB)

 

관계형 데이터베이스(Relational Database, RDB)는 데이터를 표 형태로 정리해서 서로 관계를 맺도록 만드는 시스템이에요. 이 방식으로 데이터를 중복 없이 관리하고, 필요한 데이터를 쉽게 찾을 수 있어요.

 

5. SQL (Structured Query Language)

 

SQL은 데이터베이스에서 데이터를 관리하고 조작하기 위한 언어에요. SQL은 크게 네 가지로 나뉘는데요:

  • 데이터 정의어(DDL): 데이터베이스 구조를 만드는 명령어 (예: CREATE, ALTER, DROP).
  • 데이터 조작어(DML): 데이터를 조회하고 추가하고 수정하고 삭제하는 명령어 (예: SELECT, INSERT, UPDATE, DELETE).
  • 데이터 제어어(DCL): 데이터베이스 접근 권한을 관리하는 명령어 (예: GRANT, REVOKE).
  • 트랜잭션 제어어(TCL): 여러 작업을 하나로 묶어 관리하는 명령어 (예: COMMIT, ROLLBACK).
-- 데이터 조회 예시
SELECT FirstName, LastName FROM Customers WHERE Email IS NOT NULL;

-- 데이터 삽입 예시
INSERT INTO Customers (FirstName, LastName, Email) VALUES ('John', 'Doe', 'john.doe@example.com');

-- 데이터 수정 예시
UPDATE Customers SET Email = 'new.email@example.com' WHERE CustomerID = 1;

-- 데이터 삭제 예시
DELETE FROM Customers WHERE CustomerID = 1;

 

6. NoSQL

 

NoSQL은 기존의 관계형 데이터베이스와 달리, 여러 종류의 데이터 모델과 쿼리 방식을 지원해요. 스키마가 없어서 데이터 구조가 자유롭고, 다양한 형태의 데이터를 유연하게 처리할 수 있답니다.

 

7. ERD (Entity Relationship Diagram)

 

ERD는 시스템에 어떤 엔터티(Entity)가 있고, 이들 사이에 어떤 관계가 있는지를 보여주는 다이어그램이에요. 엔터티는 쉽게 말해 '식별 가능한 객체'인데, 데이터베이스 설계에서 중요한 역할을 해요. ERD를 사용하면 데이터베이스의 구조를 한눈에 볼 수 있고, 설계할 때 매우 유용해요.

 

8. MySQL 설치 및 설정

 

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 설치 후에는 서버와 클라이언트가 잘 연결될 수 있도록 설정을 해줘야 해요. MySQL을 설치하면 기본적으로 root 계정이 생기는데, 이 계정으로 데이터베이스에 접속해 여러 작업을 할 수 있어요. MySQL Workbench를 사용하면 GUI 환경에서 MySQL 서버와 쉽게 상호작용할 수 있어요.

# MySQL 서버에 root 사용자로 접속하기
mysql -u root -p

 

9. 데이터베이스와 사용자 생성

 

데이터베이스를 생성하는 명령어는 CREATE DATABASE DB명 CHARACTER SET utf8mb4 COLLATE utf8mb4_Unicode_ci;와 같이 작성해요. 사용자 계정을 만들 때는 CREATE USER '사용자명'@'호스트명' IDENTIFY BY '사용자패스워드'; 명령어를 사용하고, 만들어진 사용자에게 적절한 권한을 부여해야 해요.

-- 사용자 생성 예시
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

-- 사용자에게 권한 부여 예시
GRANT ALL PRIVILEGES ON MyDatabase.* TO 'newuser'@'localhost';

 

10. 데이터베이스 테이블 생성 및 조작

 

테이블을 생성할 때는 CREATE TABLE 명령어를 사용해요. 테이블의 구조를 정의하고, 데이터를 삽입, 수정, 삭제하는 작업을 수행할 수 있죠. INSERT INTO, UPDATE, DELETE 명령어를 사용해서 데이터를 관리할 수 있어요.

-- 테이블 생성 예시
CREATE TABLE Orders (
    OrderID INT NOT NULL AUTO_INCREMENT,
    OrderDate DATE,
    CustomerID INT,
    Amount DECIMAL(10, 2),
    PRIMARY KEY (OrderID)
);

-- 데이터 삽입 예시
INSERT INTO Orders (OrderDate, CustomerID, Amount) VALUES ('2024-08-21', 1, 150.00);

-- 데이터 수정 예시
UPDATE Orders SET Amount = 200.00 WHERE OrderID = 1;

-- 데이터 삭제 예시
DELETE FROM Orders WHERE OrderID = 1;

 

11. 데이터 조회와 정렬

 

데이터를 조회할 때는 SELECT 문을 사용해요. 특정 조건에 맞는 데이터를 찾을 때는 WHERE, AND, OR, NOT 같은 조건자를 사용할 수 있어요. 데이터를 정렬하려면 ORDER BY를 사용해서 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있어요.

-- 특정 조건에 맞는 데이터 조회 예시
SELECT * FROM Orders WHERE Amount > 100.00 ORDER BY OrderDate DESC;

 

12. 데이터 집계 함수

 

데이터의 갯수, 평균, 합계를 계산할 때는 COUNT, AVG, SUM 함수를 사용해요. 최대값과 최소값을 구할 때는 MAX, MIN 함수를 사용할 수 있고요. 이런 함수들은 주로 데이터 분석이나 통계 작업에 많이 쓰여요.

-- 데이터 집계 예시
SELECT COUNT(*) FROM Orders WHERE Amount > 100.00;
SELECT AVG(Amount) FROM Orders;
SELECT SUM(Amount) FROM Orders;
SELECT MAX(Amount), MIN(Amount) FROM Orders;

 

13. 데이터 조인 (JOIN)

 

조인은 두 개 이상의 테이블을 결합해서 데이터를 조회하는 데 사용돼요. 주로 사용하는 조인 유형에는 INNER JOIN, LEFT JOIN, RIGHT JOIN이 있어요. 각각의 조인 방식에 따라 조회 결과가 달라져요.

-- INNER JOIN 예시
SELECT Customers.FirstName, Customers.LastName, Orders.OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

-- LEFT JOIN 예시
SELECT Customers.FirstName, Customers.LastName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

-- RIGHT JOIN 예시
SELECT Customers.FirstName, Customers.LastName, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;