Svelte-todo-app-docker_compose Svelte Themes

Svelte Todo App Docker_compose

๐Ÿ“ Docker + Jenkins ๊ธฐ๋ฐ˜ To-Do List Fullstack ์ž๋™๋ฐฐํฌ ํ”„๋กœ์ ํŠธ

๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

ํ”„๋ก ํŠธ์—”๋“œ(Svelte), ๋ฐฑ์—”๋“œ(PHP), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL)๋ฅผ Docker Compose๋กœ ํ†ตํ•ฉ ๋ฐฐํฌํ•˜๊ณ ,
GitHub Webhook๊ณผ Jenkins๋ฅผ ์—ฐ๊ณ„ํ•˜์—ฌ ์ฝ”๋“œ Push ์‹œ ๋นŒ๋“œ & ๋ฐฐํฌ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•œ ํ’€์Šคํƒ To-Do List ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

XAMPP์™€ ๊ฐ™์€ ๋กœ์ปฌ ์„œ๋ฒ„ ์—†์ด, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ ํ™˜๊ฒฝ์„ ์ผ์›ํ™”ํ•˜๊ณ ,
Jenkins๋ฅผ ํ†ตํ•ด Push๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ ํ•˜๋Š” ์ž๋™ ๋นŒ๋“œ & ๋ฐฐํฌ ํ™˜๊ฒฝ(DevOps) ์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ Tech Stack


๐Ÿš€ CI/CD with Jenkins

Jenkins logo

๐Ÿ“ฆ ๊ตฌ์ถ• ์Šคํƒ

  • GitHub Webhook + ngrok๋ฅผ ์ด์šฉํ•œ Jenkins ํŠธ๋ฆฌ๊ฑฐ
  • Jenkins Freestyle Job์„ ํ†ตํ•œ ๋นŒ๋“œ & ๋ฐฐํฌ ์ž๋™ํ™”
  • Git SCM Polling์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฐ์ง€ ํ›„ ๋นŒ๋“œ ์‹คํ–‰
  • Docker Compose ๊ธฐ๋ฐ˜ ํ”„๋ก ํŠธ์—”๋“œ(Svelte), ๋ฐฑ์—”๋“œ(PHP), DB(MySQL) ํ†ตํ•ฉ ๋ฐฐํฌ

GitHub์—์„œ ์ฝ”๋“œ Push ์‹œ, Webhook์„ ํ†ตํ•ด Jenkins๊ฐ€ ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ 
๋ณ€๊ฒฝ๋œ ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ์„œ๋น„์Šค ์žฌ๋ฐฐํฌ๊นŒ์ง€ ์ž๋™ํ™”๋œ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

todoapp/
โ”œโ”€โ”€ docker-compose.yml # ์ „์ฒด ์„œ๋น„์Šค ์ •์˜
โ”œโ”€โ”€ db/ # DB ์ดˆ๊ธฐํ™” ๋ฐ ๊ถŒํ•œ ์„ค์ •
โ”‚ โ””โ”€โ”€ init.sql
โ”œโ”€โ”€ backend/ # PHP API ์„œ๋ฒ„
โ”‚ โ”œโ”€โ”€ Dockerfile
โ”‚ โ”œโ”€โ”€ config.php
โ”‚ โ””โ”€โ”€ getTodos.php / addTodo.php / deleteTodo.php
โ”œโ”€โ”€ frontend/ # Svelte ํ”„๋ก ํŠธ์—”๋“œ
โ”‚ โ”œโ”€โ”€ Dockerfile
โ”‚ โ”œโ”€โ”€ src/
โ”‚ โ””โ”€โ”€ public/


๐Ÿณ docker-compose.yml ์ฃผ์š” ์„ค์ •

services:
db:
image: mysql:8.0
container_name: todo-db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: todoapp
MYSQL_USER: todo
MYSQL_PASSWORD: todo123
volumes:
- ./db:/docker-entrypoint-initdb.d
ports:
- "3306:3306"

backend:
build: ./backend
container_name: todo-backend
ports:
- "8082:80"
depends_on:
- db

frontend:
build: ./frontend
container_name: todo-frontend
ports:
- "3000:5173"
depends_on:
- backend


๐Ÿฌ db/init.sql (์ดˆ๊ธฐ ํ…Œ์ด๋ธ” & ๊ถŒํ•œ ์„ค์ •)

CREATE TABLE IF NOT EXISTS todos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  task VARCHAR(255) NOT NULL,
  completed BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

GRANT ALL PRIVILEGES ON todoapp.* TO 'todo'@'%';
FLUSH PRIVILEGES;

---

๐Ÿ˜ backend/config.php (DB ์—ฐ๊ฒฐ ์„ค์ •)
<?php
$host = "db";
$user = "todo";
$pass = "todo123";
$db = "todoapp";

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

---

๐Ÿ“ก frontend API ์—ฐ๊ฒฐ ์˜ˆ์‹œ (Svelte)  
const res = await fetch('http://localhost:8082/getTodos.php');

---

๐Ÿ› ๏ธ ์‹คํ–‰ ๋ฐฉ๋ฒ•  
# 1. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™  
cd ~/todoapp  

# 2. Docker Compose๋กœ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰  
docker compose up -d --build  
  
---

๐ŸŒ ์ ‘์† URL  
http://localhost:3000    - Svelte ํ”„๋ก ํŠธ์—”๋“œ  
http://localhost:8082/getTodos.php - PHP API ๋ฐฑ์—”๋“œ  

---

๐Ÿš€ ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ฒฝํ—˜  
ํ”„๋ก ํŠธ(Svelte) + ๋ฐฑ์—”๋“œ(PHP) + DB(MySQL) ํ†ตํ•ฉ ์šด์˜  

Docker Compose๋ฅผ ํ†ตํ•œ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•  

API ๊ฒฝ๋กœ, DB ๊ถŒํ•œ, ์ธ์ฝ”๋”ฉ ์ด์Šˆ ์ง์ ‘ ํ•ด๊ฒฐ  

XAMPP ์—†์ด ์™„์ „ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์‹ค์Šต  

Top categories

Loading Svelte Themes