๐๐ป ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ / directory structure
app.js (or server.js)
โโ db.js
โโ routes/
โ โโ index.js
โ โโ health.js
๐๐ป app.js
const express = require("express");
const app = express();
const port = 3000;
// ๋ฏธ๋ค์จ์ด / middleware
app.use(express.json());
// ๋ผ์ฐํฐ / router
const indexRouter = require("./routes/index");
app.use("/", indexRouter);
app.use("/health", require("./routes/health"));
app.listen(port, () => {
console.log(`Express server running on port ${port}`);
});
~
๐๐ป db.js
// db.js
const mysql = require("mysql2");
const db = mysql.createPool({
host: "host.docker.internal",
// host:"localhost",
user: "myapp",
password: "Myapp@1234",
database: "myapp",
port: 3306,
waitForConnections: true,
connectionLimit: 10,
connectTimeout: 10000,
});
module.exports = db;
๐๐ป routes/index.js
// routes/index.js
const express = require("express");
const router = express.Router();
const db = require("../db");
router.get("/", (req, res) => {
db.query("SELECT NOW() AS now", (err, results) => {
if (err) {
console.error(err);
return res.status(500).json({
success: false,
error: "Database connection failed",
});
}
res.json({
success: true,
message: "Connected to external MySQL!",
serverTime: results[0].now,
});
});
});
module.exports = router;
๐๐ป routes/health.js
const express = require("express");
const router = express.Router();
const db = require("../db");
router.get("/", (req, res) => {
db.query("SELECT 1", (err) => {
if (err) {
return res.status(500).json({ status: "DOWN" });
}
res.json({ status: "UP" });
});
});
module.exports = router;
๐๐ปDockerfile
FROM node:24
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node","app.js"]
๐๐ป ์ด๋ฏธ์ง ๋น๋ / image build
sudo docker build -t myexpressapp .
โญ๏ธ์ด๋ฏธ์ง ๋ฐ ์ปจํ ์ด๋ ํ์ธ ๋ช ๋ น์ด / Image and container verification commands
# ์คํ์ค์ธ ์ปจํ
์ด๋ ํ์ธ / Check running containers
sudo docker ps
# ๋ชจ๋ ์ปจํ
์ด๋ ํ์ธ / Check all containers
sudo docker ps -a
# ๋ชจ๋ ์ด๋ฏธ์ง ํ์ธ / Check all images
sudo docker images
# ์ปจํ
์ด๋ ์ญ์ / Delete container
sudo docker rm container name
# ์ด๋ฏธ์ง ์ญ์ / delete image
sudo docker rmi image name
๐๐ป ์ปจํ ์ด๋ ์คํ / Container run
sudo docker run --name yourexpressapp -d -p 8000:3000 --add-host=host.docker.internal:host-gateway myexpressapp
๐๐ป๋ธ๋ผ์ฐ์ ์ ์ํ
์คํธ / Browser connection test
โ๏ธ http://ipaddress:8000์ ์์ ์๋์ ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ๋๋ฉด ์ ์
If the message below is displayed when accessing http://ipaddress:8000, it is normal.
{"success":true,"message":"Connected to external MySQL!","serverTime":"2025-12-22T15:25:30.000Z"}
โ๏ธ http://ipaddress:8000/health์ ์์ ์๋์ ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ๋๋ฉด ์ ์
If the message below is displayed when accessing http://ipaddress:8000/health, it is normal.
{"status":"UP"}
โญ๏ธ ๋์ปค์ ์ฌ๋ฆฌ๊ธฐ ์ ์ ํ
์คํธ ํ๋ ค๋ฉด db์์ host ์์ ํ๊ณ npm install๋ก mysql2์ express ๋ชจ๋ ์ค์น ํ ๊ฒ
To test before uploading to Docker, modify host in db and install mysql2 and express modules with npm install.