๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

[๋ฐ๋ธŒ์ฝ”์Šค] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์ž‘ํ•˜๊ธฐ(๐Ÿ‹Docker, MariaDB, SQL)

ํ‚ํ‚์ž‰ 2025. 4. 4. 22:04

๐Ÿ’พ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ฒด.
๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๋ง‰๊ณ , ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

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) ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค.


๐Ÿ‹๋„์ปค

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ  ๋“ฑ์„ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ

https://www.docker.com/

 

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

 

์ปจํ…Œ์ด๋„ˆ

์ถœ์ฒ˜:https://www.docker.com/resources/what-container/

์ปจํ…Œ์ด๋„ˆ๋Š” ๋„์ปค ์œ„์— ์•ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์ด๋‹ค. ๋„์ปค ๋ฐ”๋กœ ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋„์ปค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ณต๊ฐ„์— ์•ฑ์„ ์„ค์น˜ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋‹ฌ๋ฆฌ ํ˜ธ์ŠคํŠธ 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 ์žฌ๋ฏธ์žˆ๋‹ค

๋Œ“๊ธ€์ˆ˜0