
์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋์ด์ฌ๋ฆฌ๋ โ๋ฒ๋ค ํฌ๊ธฐ ์ต์ ํโ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋์ด์ฌ๋ฆฌ๋ โ๋ฒ๋ค ํฌ๊ธฐ ์ต์ ํโ ๊ด๋ จ
๋ณธ๋ฌธ์ ์์ฆIT์ ๋ฒ์ญ๊ฐ David๊ฐ ํจ๊ป ์ํ ๋ ๋งฅ์ค(Anthony Max)์ ๊ธ <How to Reduce Web Application Bundle Size?>์ ๋ฒ์ญํ ๊ธ์ ๋๋ค. ํ์๋ 6๋ ์ด์ ์น ๊ฐ๋ฐ ๋ถ์ผ์์ ํ๋ํด ์จ ๊ฐ๋ฐ์๋ก, ๋ค์ํ ์ธ์ฃผ ๋ฐ ๊ธฐ์ ํ๋ก์ ํธ์ ์ฐธ์ฌํ ๊ฒฝํ์ด ์์ต๋๋ค. ํ์ฌ ๊ทธ๋ ์คํ ์์ค ํ๋ก์ ํธ์ธ HMPL ํ ํ๋ฆฟ ์ธ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ DOM ์์ด๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ Cample ํ๋ ์์ํฌ๋ฅผ ๊ฐ๋ฐํ ๊ฒฝํ์ด ์์ต๋๋ค. ์ด ๊ธ์์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ค๋ซ๋์ ์์ ํ๋ค ๋ณด๋ฉด, ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ ค์ง๋ ๊ฒ์ ์ข ์ข ๋ฐ๊ฒฌํ๊ฒ ๋ฉ๋๋ค. ํ ์ด๋ธ์ด๋ ๋ฒํผ ๋๋ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ํฌ๊ฒ ๋ฌด๊ฒ๋ฅผ ์ฐจ์งํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด 10~30์ด ์ด์ ๊ฑธ๋ฆฌ๋ ๋ฑ ์ฉ๋ฉํ ์ ์๋ ์์ค์ด ๋ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๊ณ ์ฌ์ดํธ์ ๋ก๋ฉ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ฉฐ, ํฌ๊ธฐ๋ฅผ ์ต๋ํ ์ค์ผ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ๊ณผ ํ์ ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค.
ํ๋ซํผ ์์กด์ฑ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ถ๋ค๋ฉด, ์ฐ์ ๊ธฐ๋ณธ ํ๋ซํผ๋ถํฐ ์์ํด์ผ ํฉ๋๋ค. Next.js๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํน์ ๋ฐฉ๋ฒ๋ค์ด ์๊ณ , ์ง์ ์์ฑํ ์ฌ์ดํธ๋ผ๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.

๋ฌด์๋ณด๋ค๋ ๋์ผํ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ฌ, ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ ์์ฒญ์ ๋ํ ์๋ต ์บ์ฑ์ด๋ ์ด๋ฏธ์ง์ฉ ์ ๋์จ ๋ฑ์ ๋ช ๊ฐ์ง ์ค์ ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ๋๋ก๋ ์ด๋ฏธ ์ค์ ์์ฒด์ ๋ด์ฅ๋์ด ์์ด ์ฐพ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
CSR์์ SSR(SSG, ISG ๋ฑ)๋ก ์ด๊ด
๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ ์ค ํ๋๋ ํ์ด์ง ์ผ๋ถ์ ๋ ๋๋ง์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ํ๋์ฉ ์ฐจ๋ก๋๋ก ๋ก๋๋๋ ์ผ์ข ์ ํ๋ ์์ํฌ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ํ๋ก์ ํธ์ HTML ๋ฐ JS ์์ค ํ์ผ์ ํฌ๊ธฐ๋ ๋น ํ๊ทธ์ ์ค๋น๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ๋ ์๋ฒ ์์ฒญ์ผ๋ก๋ง ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์๋ ๋ค์ ์ฝ๋์ ๊ฐ์ต๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= data.title %></title>
</head>
<body>
<h1><%= data.title %></h1>
<p><%= data.content %></p>
</body>
const express = require('express');
const app = express();
const PORT = 3000;
// EJS๋ฅผ ํ
ํ๋ฆฟ ์์ง์ผ๋ก ์ค์
app.set('view engine', 'ejs');
// ์ํ ๋ฐ์ดํฐ
const data = {
title: '์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์์ ',
content: '์ด๊ฒ์ Node.js์ EJS๋ฅผ ์ฌ์ฉํ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์์์
๋๋ค.'
};
// ๋ฃจํธ ์ ์
app.get('/', (req, res) => {
// EJS๋ฅผ ์ฌ์ฉํ์ฌ HTML ๋ ๋๋ง
res.render('index', { data });
});
// ์๋ฒ ์์
app.listen(PORT, () => {
console.log(`์๋ฒ๊ฐ http://localhost:${PORT}์์ ์คํ ์ค์
๋๋ค`);
});
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ EJS์ Express ๋๋ถ์ ๋ชจ๋ ๊ฒ์ ์๋ฒ์์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋ํ ์ฌ์ดํธ๋ฅผ Next.js๋ก ์ฌ์ค๊ณํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฌ๋ฉด ํ ํ์ด์ง๋ฟ๋ง ์๋๋ผ, ๋์ ๊ฒฝ๋ก๋ฅผ ํฌํจํ ๋ค๋ฅธ ํ์ด์ง์์๋ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๊ณ , ๋ฌผ๋ก ํฌ๋กค๋ฌ์ ์ํ ์ธ๋ฑ์ฑ๋ ๊ฐ๋ฅํฉ๋๋ค.
ํ์ง๋ง SSR(SSG, ISG ๋ฑ)์ ๊ตฌํํ๋ ์ด ๋ฐฉ๋ฒ์๋ ์ฌ๊ฐํ ๋จ์ ์ด ์์ด ์ ํฉํ์ง ์์ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ดํธ๊ฐ ์ด๋ฏธ ํด๋ผ์ด์ธํธ ์ธก์ ์ด์ ์ ๋ง์ถ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๋ชจ๋ ๊ฒ์ ๋ค์ ๋ง๋๋ ๋ฐ ๋ง์ ๋น์ฉ๊ณผ ์๊ฐ์ด ๋ค ์ ์์ต๋๋ค.
๋ํ Next.js๋ฅผ ์ ์ธํ ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ, ํด๋น ์์ ์ ์ ํฉํ ์ธ๋ ฅ ๋ถ์กฑ์ ์ด๋ํ ์ ์์ต๋๋ค. ํ ์ฌ๋์ด ํน์ ํ๋ ์์ํฌ๋ก ์ผํ๋ ๋ฒ์ ๋ฐฐ์ ๋๋ฐ, ๊ทธ ์ผ์๋ฆฌ๊ฐ ์ธ๊ธฐ๊ฐ ์๊ฑฐ๋ ๋์ฒดํ๊ธฐ ์ด๋ ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์ ํฉํ ์ง์์๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
์๋ฒ ์งํฅ ์ ๊ทผ ๋ฐฉ์์ ์ ์งํ๋ฉด์๋ ์์์ ์ค๋ช ํ ์ค์ํ ๋ฌธ์ ๋ฅผ ๊ฒช์ง ์์ผ๋ ค๋ฉด, HMPL.js๋ ์ ์ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
HMPL.js๋ฅผ ์ฌ์ฉํ ์๋ฒ ์งํฅ ๋ฐฉ์ ๊ตฌํ
์์์ ์ค๋ช ํ ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ฆฌ, ์ด ๋ชจ๋์ ํฌ๋กค๋ฌ๊ฐ ํ์ด์ง๋ฅผ ์ธ๋ฑ์ฑํ๋๋ก ํ์ฉํ์ง ์์ง๋ง, WordPress, Vue.js, Tilda, Next.js ๋ฑ ์ํ๋ ์ด๋ค ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์ฌ์ดํธ์๋ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋ชจ๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<main id="app"></main>
<script src="https://unpkg.com/json5/dist/index.js"></script>
<script src="https://unpkg.com/hmpl-js/dist/hmpl.min.js"></script>
const templateFn = hmpl.compile(
`<div>
<button data-action="increment" id="btn">Click!</button>
<div>Clicks: {{ src: "/api/clicks", after: "click:#btn" }}</div>
</div>`
);
const clicker = templateFn(({ request: { event } }) => ({
body: JSON.stringify({ action: event.target.getAttribute("data-action") })
})).response;
document.querySelector("#app").append(clicker);
์ฌ๊ธฐ์๋ ๋ ๋๋ง ๋ HTML์ ์ป์ง๋ง, ๋ฐ๋ผ์ผ ํ ๋ช ํํ ์ํคํ ์ฒ๋ ์์ต๋๋ค. ์ด๋ค ํ๋ก์ ํธ์์๋ ๋ชจ๋์ ๋นํ์ฑํํ๊ฑฐ๋ ํ์ฑํํ ์ ์์ผ๋ฉฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ํ ์ฌ์ฉํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์์ง๋ง ํ์ํ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์์์์๋ โafterโ๋ฅผ ์์ ํ๊ฒ ์ ๊ฑฐํ๊ณ DOM ๋ ๋๋ง ์ค์ ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ ์ฃผ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
์๋ฒ์์ ์์ ์ด ์๋, ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ผ๋ฐ์ ์ธ ์์ ์ ํ๋ค๋ฉด, ์๋์ ์ค๋ช ๋ ๋ฐฉ๋ฒ๋ค๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
1. ๋ถํ์ํ ์์กด์ฑ ์ ๊ฑฐ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ํน์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ค์ํ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ํ ์คํธํ๊ณ , ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉํ์ง ์๋ ํจํค์ง๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ์์ผ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๋ ๊ณ์ ์ปค์ง๊ฒ ๋ฉ๋๋ค. ๋๋ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๊ฐ๋จํ ์์ ์ ์ํด ๊ฑฐ๋ํ ๋ชจ๋์ ์ฐ๊ฒฐํ๊ณ , ๊ทธ์ค ๋จ ํ๋์ ํจ์๋ง ์ฌ์ฉํ๋ ๊ฒ๋ ๋ฌด์๋ฏธํฉ๋๋ค.
์ฌ์ฉํ์ง ์๋ ํจํค์ง๋ฅผ ํ์ ํ๊ธฐ ์ํด, ๋ค์๊ณผ ๊ฐ์ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
npm install depcheck
depcheck /path/to/my/project
๋๋
npx depcheck
์ด ๋ชจ๋์ ์ง์์ด ์ค๋จ๋์์ง๋ง, ์ฌ์ ํ ์ข ์์ฑ์ ๋ถ์ํ๊ณ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ์๋ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ๊ทธ๊ฒ ์์ด๋ ์ผ๋ถ ๋ชจ๋์ด ์๋ํ์ง ์์ ์ ์์ผ๋ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ํ ๋ค์ ๋ช ๋ น์ ํตํด npm์ ๋ด์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
npm prune
์ด ๋ช ๋ น์ โ๋ถํ์ํโ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ํจํค์ง ์ด๋ฆ์ด ์ ๊ณต๋๋ฉด ์ ๊ณต๋ ์ด๋ฆ ์ค ํ๋์ ์ผ์นํ๋ ํจํค์ง๋ง ์ ๊ฑฐ๋ฉ๋๋ค.
2. ์์ ํฌ๊ธฐ์ ๋ฏธ๋์ด ํ์ผ ์ฌ์ฉ
์ด๊ฒ์ ์๋ง๋ ์ ๊ณตํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๋ช ๋ฐฑํ ์กฐ์ธ ์ค ํ๋์ผ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ์ ์ ์ฒด ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํฌ๊ธฐ๊ฐ ๋์ผํ ๋น๋์ค ํ๋๊ฐ ์๋ค๋ฉด, โgit cloneโ๊ณผ ๊ฐ์ ์์ ์ ์ํํ ๋ ๋งค์ฐ ์ด๋ ค์์ ๊ฒช๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ด๋ฏธ์ง์ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ฉฐ, ์์ค ์์ด ์ด๋ฏธ์ง๋น ๋ช MB๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค. ์์ฆ์ ์จ๋ผ์ธ ์์ถ ํ๋ซํผ๋ค์ด ์ด๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํด ์ค๋๋ค.

๋ํ ์ด๋ฏธ์ง ํด์๋๋ฅผ png
, jpg
์์ webp
๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด ๋ํ ๋ง์ ๋ํ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ๋๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค.
3. CDN ์ฌ์ฉ
์ด๋ โnpm_modulesโ์์ ์ธ๋ถ ํ๊ฒฝ์ผ๋ก ๋ชจ๋์ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
import { chunk } from "lodash";
๋๋
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
์ด๊ฒ์ ์์ ์ค๋ช ํ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง ์ฝ๊ฐ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
4. ์ฝ๋ ๋ถํ
์ฝ๋๋ฅผ ๋ถํ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ ์ค ํ๋๋ ๋์ ์ผ๋ก ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ๊ฒ์ ๋๋ค. Webpack ๋ฐ Vite์ ๊ฐ์ ํ๋ ๋ฒ๋ค๋ฌ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
document.getElementById('loadButton').addEventListener('click', () => {
import('./module.js')
.then(module => {
module.default();
})
.catch(err => {
console.error('๋ชจ๋ ๋ก๋ฉ ์ค๋ฅ:', err);
});
});
์ด ๊ฒฝ์ฐ ๋ชจ๋์ ๋ฐ๋ก ๋ก๋ํ์ง ์๊ณ ๋ฒํผ์ ๋๋ฅผ ๋์ ๊ฐ์ด ํ์ํ ๋๋ง ๋ก๋ํฉ๋๋ค. ๋ํ ์ฒญํฌ ๋ถํ ์ ํ์ฑํํ ์ ์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ๊ณตํต ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
},
},
};
5. </>
์ฝ๋ ์์ถ
์ปดํ์ผ ์ค์ ์ฝ๋๋ฅผ ์์ถํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ด ์๋ง๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค.
uglifyjs file.js -c toplevel,sequences=false
์ด๋ฅผ ์ํด Uglify.js๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ด๋ ์ฝ๋ ์์ถ์ ์ํ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋๊ตฌ ์ค ํ๋์ ๋๋ค. ๋ฌผ๋ก ๋ฒ๋ค๋ฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด ์์ง ์๋ค๋ฉด, ๋ฒ๋ค๋ฌ์ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๊ฒฐ๋ก
์ฐ์ ์์์ ๋์ดํ ๋ด์ฉ๋ค์ ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ๋ค์ ๋๋ค. ์ด ๋ฐฉ๋ฒ๋ค์ ์ค์ ์น ๊ฐ๋ฐ ์์ ์์ ๋ง์ ์ฌ๋๋ค์ด ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ธ๊ธฐ ์๋ ๋ฐฉ์๋ค์ ๋๋ค. ๋ํ ์ด๋ฏธ ๋๋ฆฌ ์๋ ค์ง DRY[1](Don't Repeat Yourself)๋ KISS[2](Keep It Simple, Stupid)์ ๊ฐ์ ์์น๋ณด๋ค๋, ์ค๋ฌด์์ ๋ ๊ตฌ์ฒด์ ์ด๊ณ ํ์ค์ ์ผ๋ก ํ์ฉํ ์ ์๋ ์ค์ฉ์ ์ธ ์กฐ์ธ์ ๋๋ฆฌ๊ณ ์ ํ์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ์ ์ ์ฉํ์๋ฉด ์ฌ๋ฌ๋ถ์ ์น์ฌ์ดํธ๋ ๋์ฑ ๊ฐ๋ฒผ์์ง๊ณ , ๋ก๋ฉ ์๋๋ ํจ์ฌ ๋นจ๋ผ์ง ๊ฒ์ ๋๋ค. ์ด ๊ธ์ด ๋ ํจ๊ณผ์ ์ด๊ณ ํจ์จ์ ์ธ ์น ๊ฐ๋ฐ์ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์๋ฌธ