๐พ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ฐ์ดํฐ๋ฅผ ํตํฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์งํฉ์ฒด.
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ด๋ฆฌํจ์ผ๋ก์จ ๋ฐ์ดํฐ ์ค๋ณต์ ๋ง๊ณ , ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
DBMS
DataBase Management System, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๊ณ ๊ด๋ฆฌ
DBMS๋ ์ฌ์ฉ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์์ ํ๊ณ , ์ญ์ ํ๋ ๋ฑ์ ์์ ์ ์ํํ๋ค. ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ณ , ๋์์ฑ ์ ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๊ทผํด๋ ๋ฌธ์ ์๊ฒ ๊ด๋ฆฌํ๋ฉฐ, ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฌ๋ฌ ์ข ๋ฅ์ DBMS๊ฐ ์๊ณ , ์ด์ํ๋ ํ์ฌ๋ ๋ฌ๋ผ๋ ์ฌ์ฉํ๋ ์ฃผ์ ๋ช ๋ น์ด๋ ๋์ผํ๋ค. ๋ํ์ ์ผ๋ก,
- Oracle Database
- MySQL
์ด ๋ DBMS๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์์คํ ์ด๋ค.
MariaDB
MySQL์ ๋ชจ์ฒด๋ก ํ๋ DBMS
MariaDB๋ Oracle์ MySQL ์ธ์ ํ ์คํ์์ค ์ปค๋ฎค๋ํฐ์์ ๋ง๋ ํ๋ก์ ํธ๋ก, MySQL๊ณผ ๋์ ํธํ์ฑ์ ๊ฐ์ง๋ฉด์๋ ์ฑ๋ฅ ํฅ์๊ณผ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋, ๊ธ๋ถ์ ์ค์ธ ์์คํ ์ด๋ค.
๐ปSQL
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ์ฐ์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ธ์ด. ๋ฐ์ดํฐ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ํ
SQL(Structured Query Language)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (RDBMS)์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ํ์ค ์ธ์ด์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง ์์ฑ, ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์ , ๊ฐฑ์ , ์ญ์ ๋ฐ ์ง์๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋ฐ์ดํฐ ์ฝ์ : INSERT
- ๋ฐ์ดํฐ ์กฐํ: SELECT
- ๋ฐ์ดํฐ ์์ : UPDATE
- ๋ฐ์ดํฐ ์ญ์ : DELETE
์ด์ธ์๋ CREATE, ALTER, DROM ๋ฑ DDL(Data Definition Language) ๋ช ๋ น์ด์, GRANT, REVOKE ๋ฑ DCL(Data Control Language) ๋ช ๋ น์ด๊ฐ ์๋ค.
๐๋์ปค
์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ ๊ธฐ์ ๋ฑ์ ์ฌ์ฉํด ์ปจํ ์ด๋๋ก ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์คํ์์ค ํ๋ก์ ํธ
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
์ปจํ ์ด๋
์ปจํ ์ด๋๋ ๋์ปค ์์ ์ฑ์ ์ค์นํ๋ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์ด๋ค. ๋์ปค ๋ฐ๋ก ์๊ฐ ์๋๋ผ ๋์ปค๊ฐ ๊ฐ์ง๊ณ ์๋ ์ปจํ ์ด๋ ๊ณต๊ฐ์ ์ฑ์ ์ค์นํ๋ค.
์ปจํ ์ด๋๋ ๊ฐ์ ๋จธ์ ๊ณผ ๋ฌ๋ฆฌ ํธ์คํธ OS์ ์ปค๋์ ๊ณต์ ํ๋ฉด์๋ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์คํํ๋ค. ์ด๋ก ์ธํด ๊ฐ์ ๋จธ์ ๋ณด๋ค ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์์๋๋ฉฐ, ์์ ํจ์จ์ฑ์ด ๋๋ค. ๊ฐ ์ปจํ ์ด๋๋ ์์ฒด ํ์ผ ์์คํ , CPU ๊ณต์ , ๋ฉ๋ชจ๋ฆฌ, ํ๋ก์ธ์ค ๊ณต๊ฐ ๋ฑ์ ๊ฐ์ง๋ค.
MariaDB ์ค์นํ๊ณ ์คํํ๊ธฐ
๋์ปค์์ MariaDB ์ค์น
๋์ปค์์ MariaDB๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์๋ค. ๋์ปค ๋ฐ์คํฌํฑ์ ์คํ์ค์ด์ด์ผ ํ๋ค.
docker pull mariadb
- Docker Hub์์ ์ต์ MariaDB ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ํ๋ค.
๋์ปค ์ปจํ ์ด๋ ์คํ
docker run --name mariadb -d -p 3306:3306 --restart=always -e MYSQL\_ROOT\_PASSWORD=root mariadb
- --name mariadb: ์ปจํ ์ด๋ ์ด๋ฆ์ mariadb๋ก ์ง์
- -d: ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปจํ ์ด๋ ์คํ
- -p 3306:3306: ํธ์คํธ์ 3306 ํฌํธ๋ฅผ์ปจํ ์ด๋์ 3306 ํฌํธ์ ๋งคํ
- --restart=always: ๋์ปค ๋ฐ๋ชฌ์ด ์ฌ์์๋ ๋ ์ปจํ ์ด๋๋ ์๋ ์ฌ์์
- -e MYSQL_ROOT_PASSWORD=root: ํ๊ฒฝ ๋ณ์ ์ค์ , root ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ 'root'๋ก ์ค์
โ์ค๋ฅ: ํฌํธ ์ถฉ๋ ๋ฌธ์
MariaDB๋ฅผ ์ค์นํ๋ ์ค, ์ด๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
์ด ์ค๋ฅ๋ 3306 ํฌํธ
๊ฐ ์ด๋ฏธ ์ฌ์ฉ์ค์ด์ด์ ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค. ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ํฌํธ๋ฅผ ์ ์ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ฐพ์ ์ข
๋ฃํด์ฃผ์๋ค.
1. ์ฌ์ฉ ์ค์ธ ํฌํธ ํ์ธ
netstat
๋ช
๋ น์ผ๋ก ํ์ธํ๋ฉด, LISTENING
์ํ์ ํ๋ก์ธ์ค(PID)๋ฅผ ํ์ธํ ์ ์๋ค.
netstat -ano | findstr :3306
2. ํ๋ก์ธ์ค ์๋ณ
ํ์ธ๋ PID๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ํ๋ก์ธ์ค์ธ์ง ํ์ธํ ์ ์๋ค. ๋ฒ์ธ์ MySQL์ด์๋ค.
tasklist | findstr 8972
3. ํ๋ก์ธ์ค ์ข ๋ฃ
ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ฌ ํฌํธ๋ฅผ ํด์ ํ๋ค.
taskkill /PID 8972 /F
์ด์ , 3306ํฌํธ๊ฐ ํด์ ๋์ด ๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๊ฒ ๋์๋ค.
MariaDB ์ปจํ ์ด๋ ์ ์ ๋ฐ ์ฌ์ฉ
MariaDB ์ปจํ ์ด๋ ์ ์
docker exec -it mariadb /bin/bash
- ์คํ์ค์ธ mariaDB ์ปจํ ์ด๋์ bash ์ ธ์ ๋ํํ ํฐ๋ฏธ๋๋ก ์ ์ํ๋ค.
MariaDB ํด๋ผ์ด์ธํธ ์คํ
mysql -u root -p
๋๋
mariadb -u root -p
๋น๋ฐ๋ฒํธ ํ๋กฌํํธ๊ฐ ํ์๋๋ฉด, ์ปจํ ์ด๋ ์คํ ์ ์ค์ ํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค. (ํ ์คํธ๋ฅผ ์ ๋ ฅํ๋๊ฒ ๋ณด์ด์ง ์์๋ ๋นํฉํ์ง ์๊ณ ์ํฐ ๋๋ฅด๊ธฐ)
๐SQL ์ค์ต: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ๋ฐ ๊ด๋ฆฌ
MariaDB์ ์ ์ํ์ผ๋, ์ด์ SQL ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ํ์ธ
ํ์ฌ ์๋ฒ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ ํ์ํ๋ค.
SHOW DATABASES;
2. ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
CREATE DATABASE ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
;
3. ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ
์ดํ์ ๋ช ๋ น์ด๋ ์ ํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ๋๋ค.
USE ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
;
ํ ์ด๋ธ ์์ฑ ๋ฐ ๊ด๋ฆฌ
1. ํ ์ด๋ธ ์์ฑ
์ด ์์ ๋ id, name, pwd ํ๋๋ฅผ ๊ฐ์ง member ํ ์ด๋ธ์ ์์ฑํ๋ค.
CREATE TABLE member (
id INT,
name VARCHAR(30),
pwd VARCHAR(30),
);
2. ๋ฐ์ดํฐ ์กฐํ
๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ:
SELECT * FROM ํ
์ด๋ธ๋ช
;
ํน์ ์ปฌ๋ผ๋ง ์กฐํ:
SELECT ์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2 FROM ํ
์ด๋ธ๋ช
;
์กฐ๊ฑด์ ์ฌ์ฉํ ์กฐํ:
SELECT * FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด;
3. ๋ฐ์ดํฐ ์ฝ์
INSERT INTO ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2, ...) VALUES (๊ฐ1, ๊ฐ2, ...);
4. ๋ฐ์ดํฐ ์์
์กฐ๊ฑด์ ์ง์ ํ์ง ์์ผ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ค.
UPDATE ํ
์ด๋ธ๋ช
SET ์ปฌ๋ผ๋ช
1 = ๊ฐ1, ์ปฌ๋ผ๋ช
2 = ๊ฐ2 WHERE ์กฐ๊ฑด;
5. ๋ฐ์ดํฐ ์ญ์
์กฐ๊ฑด ์์ด ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค.
DELETE FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด;
SQL ์ฌ๋ฏธ์๋ค