์ฃผ์ ์์
- Sorting card button โ 2024-08-22
- ์์ฑ ์ ์ ๋ ฌ
- ์ต์ ์ ์ ๋ ฌ
- drag & drop box โ 2024-08-22
- ๋๋๊ทธ ์ค ๋๋กญ ์ ์์ ๋ณ๊ฒฝ(์์)
- ์นด๋ ์ปดํฌ๋ํธ ์ํ ๊ด๋ฆฌ โ 2024-08-22
- ํ์คํ ๋ฆฌ ์์ดํ ์ปดํฌ๋ํธ โ 2024-08-22
- ์นด๋ ์์ โ 2024-08-22
ํ์ต ํค์๋
- ์ด๋ฒคํธ ์์
- pug mixin
- templating
- addEventListener
- DOM API
1์ฃผ์ฐจ ํ์ต์ ๋ฆฌ https://luxurious-share-af6.notion.site/1-baed698a7b3c40bbbd6b94fb1097dc42?pvs=4
๊ณ ๋ฏผ ๋ฐ ํด๊ฒฐ ๊ณผ์
์ญ์ ์ปดํฌ๋ํธํ
์ญ์ ์ ๊ฐ์ ๊ฒฝ์ฐ, ํด๋น ์๋น์ค์์๋ ํ ์ผ ์นด๋์ ๋ํ ์ญ์ ์ ์ ์ฒด์ ์ธ ํ์คํ ๋ฆฌ์ ๋ํ ์ญ์ ๊ฐ ์์ผ๋ฉฐ ์ด๋ฅผ ์ํ ํ์ธ ๋ชจ๋ฌ์ด ์กด์ฌํ๋ค. ํ์ธ ๋ชจ๋ฌ๊ฐ์ ๊ฒฝ์ฐ ๋ฒํผ์ด๋ ์์๋ค์ ๋๋ถ๋ถ ๋์ผํ์ง๋ง ํ ์คํธ๊ฐ ์กฐ๊ธ ๋ฌ๋๋ค. ํ์ง๋ง ์ด๊ฑฐ๋๋ฌธ์ ๊ตณ์ด ๊ฐ๊ฐ ๋ค๋ฅธ pug ํ์ผ์ ์ผ์ผ์ด ์์ ํ๋ ๊ฒ์ ๋ค์ ํ๋์ฝ๋ฉ ๊ฐ๋ค๊ณ ์๊ฐํ์ฌ ์ด๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ปดํฌ๋ํธํ๋ฅผ ์ํฌ ์ ์์๊น ์๊ฐํ๋ค.
SOL : ์ญ์ ๋ชจ๋ฌ mixin โ ์ฑ๊ณต
mixin deleteConfirm(target)
style
| @import "/shared/deleteConfirm/css/deleteConfirm.css"
.modalBackground
.deleteConfirmContainer
if target==="user"
p ๋ชจ๋ ์ฌ์ฉ์ ๊ธฐ๋ก์ ์ญ์ ํ ๊น์?
else if target==="todo"
p ์ ํํ ์นด๋๋ฅผ ์ญ์ ํ ๊น์?
.deleteConfirmContainer
button.cancelButton ์ทจ์
button.conFirmButton ์ญ์ ์ญ์ ๋ชจ๋ฌ์ ์ปดํฌ๋ํธํ์์ผ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๊ฐ์ด๋ฐ ๋ค์ด๊ฐ๋ ํ์ธ ์ฐฝ์ ์ฌ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๋ง๋ค์๋ค. ์ฌ๊ธฐ์ html ์ค๊ฐ์ js๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ ํ์ฉํ๋๋ฐ, if else๋ฌธ์ ํตํด target์ด๋ผ๋ attribute์ ๋ฐ๋ผ์ ๊ฐ๊ฐ ๋ค๋ฅธ ํ ์คํธ๋ง ๋์ฌ ์ ์๋๋ก ์ค๊ณํ๋ค.
๋ํ ์์ ์ปดํฌ๋ํธ์์ ์ด๋ฒคํธ ๋ฑ๋ก์ ํตํด ํด๋น ๋ชจ๋ฌ์ ์ ์ดํ๋ฉฐ, ์ํ ํ๊ฒ ์๋ํ ์ ์๊ฒ ๋ณด์ํ์๋ค.
๋ฐ์ดํฐ ์กฐ์ action
SSR๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค์ด ๊ฐ๋ฉด์ ๊ฐ์ฅ ๊ณ ๋ฏผ์ด ๋๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์นด๋๋ ํ์คํ ๋ฆฌ ๋ฑ ์ ๋ณด๋ฅผ ์กฐ์ํ๋ ๋ฐ์ดํฐ fetching api๋ค์ด ํ์ํ ๋ถ๋ถ์ด ๋ง์๋ฐ, ์ด๋ฅผ ๋ฐ์ํ๊ณ ์๋ก๊ณ ์นจํ๋๋, ์๋๋ฉด ์ํ ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด์ ์์์ ์ผ๋ก ๋์ฐ๋๋์ ์ฐจ์ด๋ผ๊ณ ์๊ฐํ๋ค.
SOL 1 : ์๋ฒ์์ templatingํด์ ๋ฐ์ ๋ค ๋ ๋๋ง โ ์คํจ
์ค์ํ ์ ์ ์์ ์ ํ๊ณ ์ ์ฅ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๊ด์ฐฎ์ง๋ง, ์๋กญ๊ฒ ์นด๋ ๋ฑ๋ก์ ํ๋ ๊ฒฝ์ฐ๋ ๊ธฐ์กด SSR ๋ฐฉ์์์ ์ฒ์์ ํ์ด์ง๋ฅผ ๋ก๋ฉํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ ํด๋น ํ์ด์ง์ ํ์ํ ํ์คํ ๋ฆฌ์ ๋ฑ๋กํ ํ ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ๋ ๋๋ง์ ์์ผ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์์ ์ผ๋ก ๋ณด์ด๊ฒ ํ๊ณ ๋์ค์ ์๋ก๊ณ ์นจํ ๋๋ถํฐ ๋ฐ์์ด ๋๋๋ ํน์ ์๋กญ๊ฒ data post๋ฅผ ํ ๋ค์ ๋ค์๊ธ ์ ์ฒด์ ์ธ ํ์ด์ง refresh์ ํ๋๋์ ์ฐจ์ด๊ฐ ๋๋ค๊ณ ์๊ฐํ๋ค.
์ด๋ฅผ ๋งจ ์ฒ์์๋ ๋ฐ๋๋ก ์๊ฐํด์ ๊ทธ๋ฅ ์์๋ก ๋ณด์ฌ์ฃผ๋, ์๋ฒ์์ templating์ ํ๊ณ ๋ณด๋ด๋ฉด ๋์ง ์์๊น?๋ผ๊ณ ์๊ฐํด์ ๋งจ ์ฒ์์๋ ์๋ฒ์ templating ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
pug์๋ pug ํ์ผ์ ๊ฐ์ ธ์ ํด๋น ํ์ผ์ ๋ ๋๋ง ์ํฌ ์ ์๋ ๋ฌธ์์ด์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ฆฌํดํ๋ค. ์ด๋ฌํ Pug์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๊ฐ ์ผ์ผ์ด ๊ท์ฐฎ๊ฒ ํ
ํ๋ฆฟ์ ๋ฌธ์์ด๋ก ํ๋ํ๋ ๋ง๋ค์ง ์๊ณ ํจ์๋ง ์คํ์ํค๋ฉด ์์์ ๋ ๋๋ง ๊ฐ๋ฅํ ๋ฌธ์์ด๋ก ๋์ค๋ ์ด๋ฅผ ํ์ฉํ๋ฉด ์ข๊ฒ ๋ค ์๊ฐํ์๋ค..
// 'client' ํด๋๋ฅผ ์ ์ ํ์ผ๋ก ์ ๊ณต
app.use(express.static(path.join(__dirname, "client")));
// Pug ํ
ํ๋ฆฟ ํ์ผ์ด ์์นํ ๋๋ ํ ๋ฆฌ ์ค์
app.set("views", path.join(__dirname, "client"));
// ํ
ํ๋ฆฟ ์์ง์ Pug๋ก ์ค์
app.set("view engine", "pug");
app.locals.basedir = path.join(__dirname, "client");
// '/' ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์ฒ๋ฆฌ
app.get("/", (req, res, next) => {
console.log("refresh");
const filePath = path.join(__dirname, "mockups");
const todoData = JSON.parse(readFileSync(`${filePath}/todo.json`, "utf-8"));
const historyData = JSON.parse(
readFileSync(`${filePath}/history.json`, "utf-8")
);
// home.pug ํ
ํ๋ฆฟ์ ๋ ๋๋งํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ก
res.render("app", { todoData: todoData, historyData: historyData.history });
});ํ์ง๋ง ๋ด ์๋ฒ์ ์ธํ ์์ฒด๊ฐ ๋ฌธ์ ์๋ค. ๋๋ SSR ๋ฐฉ์์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ์ด์ง ์์ฒด๋ฅผ ๋ ๋๋งํด์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ํํ๋ค. ํด๋น ๋ฐฉ์๋ง์ ์๊ฐํ๋ฉด์ ํด๋๊ตฌ์กฐ๋ฅผ ์งฐ๋๋ฐ, ๋์ค์ ์ด๋ฅผ ์ปดํ์ผํ ๊ฒ์ templatingํด์ ๋ณด๋ด๊ธฐ ์ํด์๋ Res.render ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ, ํด๋น ๋ฉ์๋์์๋ ์์์ ์ค์ ํ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๊น๊ฒ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ธ์๋ก ์ค ์ ์์๋ค. ์ฒ์์๋ ์ด ๋ถ๋ถ์ด ์ ์ด๋ฌ๋์ง ์ ๋ชฐ๋๊ณ , ์ด๊ฑฐ๋๋ฌธ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค.
SOL2: ์ฌ์ ์ปดํ์ผ์ ํตํ ๋ฌธ์์ด ๋ณด๋ด๊ธฐ โ ์คํจ์ค
const compiled = pug.compileFile(
path.join(__dirname, "client", "shared", "card", "component", "card.pug"),
{
basedir: path.join(__dirname, "client"),
}
);
console.log(
"๋ญ์ฌ",
compiled({
title: "์์",
detail: "์์๋ํ
์ผ",
author: "๋ฏผํ",
date: "2023-10-24 11:00",
id: "temp-1",
})
);์ด์ compileFile์ ํตํด pug ํ์ผ์ ์ปดํ์ผ ํด์ ๋ฌธ์์ด๋ง ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ ์ถ๋ ฅํ๋ ๋ฐฉ์์ ์๊ฐํด๋ณด์๋๋ฐ, ๊ธฐ์กด์ ์นด๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ attiribute๋ฅผ ๋ฐ์์์ธ์ง You should not have pug tags with multiple attributes. ์๋ฌ๊ฐ ๋ด๋ค. ์๊ฐ์ด ๋จ์ ๋ ์ด ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ํ์ตํด์ ์๋ง์ ํ
ํ๋ฆฟ ํํ๋ก ์ ์ํ ๋ค ์ ์ฉํ ์์ ์ด๋ค.