Jieunny์ ๋ธ๋ก๊ทธ
S4) Unit 8. [์ต์ ํ]์ต์ ํ ๊ธฐ๋ฒ ๋ณธ๋ฌธ
๐ฃ ์ต์ ํ(Optimization)
๐ญ. ์ต์ ํ์ ๊ฐ๋
โ๏ธ ์ฃผ์ด์ง ์กฐ๊ฑด์ผ๋ก ์ต๋ ํจ์จ์ ๋ผ ์ ์๋๋ก ํ๋ ๊ฒ
โฐ ์ปดํจํฐ ๊ณตํ์์์ ์ต์ ํ๋ ๊ฐ๋ฅํ ์ ์ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ๋ฉด์ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋๋ก ํ๋ ๊ฒ์ ์๋ฏธ
โฐ ์น ๊ฐ๋ฐ์์์ ์ต์ ํ๋ ๋ฐ๋ก ์ฃผ์ด์ง ์กฐ๊ฑด ์๋์์ ์ต๋ํ ๋น ๋ฅด๊ฒ ํ๋ฉด์ ํ์ํ๋๋ก ๋ง๋๋ ๊ฒ
โฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ์๋ฆฌ => ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ๋ ์๋ชจํ๊ฑฐ๋ ์ฐ์ฐ ํ์๊ฐ ํ ๋ฒ์ด๋ผ๋ ๋ ์ ์ ์ฝ๋๊ฐ ๋ ํจ์จ์ ์ด๊ณ ์ต์ ํ๋ ์ฝ๋
๐ฎ. ์ต์ ํ์ ํ์์ฑ ๋ฐ ํจ๊ณผ
1๏ธโฃ ์ดํ๋ฅ ๊ฐ์
โ๏ธ ํ์ด์ง ๋ก๋ฉ์ด ๋๋ ค์ ์ดํํ๋ ์ฌ์ฉ์(์ดํ๋ฅ )๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ค์ผ ์ ์๋ค.
2๏ธโฃ ์ ํ์จ ์ฆ๊ฐ
โ๏ธ ์ดํ๋ฅ ์ด ์ค์ด๋ค๋ฉด, ์ ํ์จ์ด ๋์์ง ํ๋ฅ ๋ ์ปค์ง๋ค.
โฐ ์ ํ์จ : ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ์ฌ์ฉ์ ์ค ํ์๊ฐ์ , ์ํ ๊ตฌ๋งค, ๊ฒ์๊ธ ์กฐํ, ๋ค์ด๋ก๋ ๋ฑ์ ํ์๋ฅผ ํ ๋ฐฉ๋ฌธ์์ ๋น์จ
3๏ธโฃ ์์ต ์ฆ๋
โ๏ธ ํ๋ฅ ๊ฐ์, ์ ํ์จ ์ฆ๊ฐ๋ ํธ๋ํฝ ์ฆ๋ ๋ฐ ํ์ ์ ์ฆ๊ฐ๋ก ์ด์ด์ง๊ณ , ์ด๋ ๊ณง ์์ต ์ฆ๋๋ฅผ ์๋ฏธํ๋ค.
4๏ธโฃ ์ฌ์ฉ์ ๊ฒฝํ(UX) ํฅ์
โ๏ธ ํ์ด์ง ๋ก๋ฉ์ด ๋น ๋ฅผ์๋ก UX๋ ํฅ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ํ์ด์ง ๋ก๋ ์๋๊ฐ ๋น ๋ฅธ ํธ์ด๋ผ๊ณ ํด๋ ์ต์ ํ๋ฅผ ํตํด UX๊ฐ ๋์ฑ ํฅ์ํ ์ ์๋ค.
๐ฃ HTML, CSS ์ต์ ํํ๊ธฐ
โ๏ธ DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํด์ ๋ ๋๋งํ ๋ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ๋ฆฌ๋ ๋๋ง์ ํธ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ํฌ๊ณ ๋ณต์กํ ์๋ก ๋ ๋ง์ ๊ณ์ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง์ ์๋ชจ๋๋ ์๊ฐ๋ ๊ธธ์ด์ง๋ค => HTML, CSS ์ฝ๋๋ฅผ ์ต์ ํํจ์ผ๋ก์จ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
๐ญ. HTML ์ต์ ํ ๋ฐฉ๋ฒ
1๏ธโฃ DOM ํธ๋ฆฌ ๊ฐ๋ณ๊ฒ ๋ง๋ค๊ธฐ
โ๏ธ DOM ํธ๋ฆฌ๊ฐ ๊น์์๋ก, ์์ ์์๊ฐ ๋ง์์๋ก DOM ํธ๋ฆฌ์ ๋ณต์ก๋๋ ์ปค์ง๋ค.
โฐ ๋ถํ์ํ๊ฒ ๊น์ด๋ฅผ ์ฆ๊ฐ์ํค๋ ์์๊ฐ ์๋ค๋ฉด ์ญ์ ํ๋ ๊ฒ ์ข๋ค.
// ์์ ์
<div>
<ol>
<li> ์ฒซ ๋ฒ์งธ </li>
<li> ๋ ๋ฒ์งธ </li>
<li> ์ธ ๋ฒ์งธ </li>
</ol>
</div>
// ์์ ํ : ๋ถํ์ํ div ์์ ์ ๊ฑฐ
<ol>
<li> ์ฒซ ๋ฒ์งธ </li>
<li> ๋ ๋ฒ์งธ </li>
<li> ์ธ ๋ฒ์งธ </li>
</ol>
2๏ธโฃ ์ธ๋ผ์ธ ์คํ์ผ ์ฌ์ฉํ์ง ์๊ธฐ
โ๏ธ ํด๋์ค๋ก ๋ฌถ์ด์ ํ ๋ฒ์ ์์ฑํด๋ ๋ ์คํ์ผ ์์ฑ์ ์ค๋ณต์ผ๋ก ์์ฑํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒจ ๋ถํ์ํ ์ฝ๋ ์ค๋ณต์ด ์๊ธด๋ค.
โฐ ๋ถํ์ํ ์ฝ๋ ์ค๋ณต์ ๊ฐ๋ ์ฑ์ ๋จ์ด๋จ๋ฆด ๋ฟ ์๋๋ผ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
โฐ ์ธ๋ผ์ธ ์คํ์ผ์ ๋ฆฌํ๋ก์ฐ๋ฅผ ๊ณ์ํด์ ๋ฐ์์์ผ ๋ ๋๋ง ์๋ฃ ์์ ์ ๋ฆ์ถ๋ค.
//์์ ์
<div style="margin: 10px;"> ๋ง์ง 10px </div>
<div style="margin: 10px;"> ์ด๊ฒ๋ ๋ง์ง 10px </div>
//์์ ํ : class์ CSS๋ก ๋์ฒด
<div class="margin10"> ๋ง์ง 10px </div>
<div class="margin10"> ์ด๊ฒ๋ ๋ง์ง 10px </div>
.margin10 {
margin: 10px;
}
๐ฎ. CSS ์ต์ ํ ๋ฐฉ๋ฒ
1๏ธโฃ ์ฌ์ฉํ์ง ์๋ CSS ์ ๊ฑฐํ๊ธฐ
โ๏ธ ๋ถํ์ํ CSS ์ฝ๋๊ฐ ์๋ค๋ฉด CSSOM ํธ๋ฆฌ์ ์์ฑ์ด ๋ฆ์ด์ง๋ค.
โฐ ์์๋ฅผ ์ญ์ ํ ์ผ์ด ์๊ธฐ๋ฉด, CSS ์ฝ๋๋ง ๋จ์ง๋ ์๋์ง ํ์ธํ๊ณ ํจ๊ป ์ญ์ ํ์.
2๏ธโฃ ๊ฐ๊ฒฐํ ์ ๋ ํฐ ์ฌ์ฉํ๊ธฐ
โ๏ธ ์ ๋ ํฐ๊ฐ ๋ณต์กํ ์๋ก ์คํ์ผ ๊ณ์ฐ๊ณผ ๋ ์ด์์์ ์๊ฐ์ ๋ ๋ง์ด ์๋ชจํ๊ฒ ๋๋ค.
// ๋ณต์กํ CSS ์
๋ ํฐ ์์
.cart_page .cart_item #firstItem { ... }
// ํ์ํ ๊ฒฝ์ฐ์๋ ์ด์ฉ ์ ์์ง๋ง, ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํด์ค๋๋ค.
.cart_item { ... }
๐ฃ ๋ฆฌ์์ค ๋ก๋ฉ ์ต์ ํํ๊ธฐ
โ๏ธ <script> ์์์ <link> ์์๋ฅผ ์ด๋์ ๋ถ๋ฌ์ค๋์ง ์์น์ ๋ฐ๋ผ ๋ ๋๋ง ์๋ฃ ์์ ์ด ๋ฌ๋ผ์ง ์ ์๋ค.
1๏ธโฃ CSS ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
โ๏ธ CSSOM ํธ๋ฆฌ๋ CSS ์ฝ๋๋ฅผ ๋ชจ๋ ํด์ํด์ผ ๊ตฌ์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ CSSOM ํธ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ ๋น ๋ฅด๊ฒ ๊ตฌ์ฑํ ์ ์๋๋ก HTML ๋ฌธ์ ์ต์๋จ์ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ข๋ค.
// CSS ํ์ผ์ HTML ํ์ผ ์๋จ์ head ์์ ์์์ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์ข์ต๋๋ค.
<head>
<link href="style.css" rel="stylesheet" />
</head>
2๏ธโฃ JavaScript ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
โ๏ธ JavaScript ํ์ผ์ DOM ํธ๋ฆฌ ์์ฑ์ด ์๋ฃ๋๋ ์์ ์ธ HTML ๋ฌธ์ ์ตํ๋จ์ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ข๋ค.
โฐ HTML ์ฝ๋ ํ์ฑ ์ค์ <script> ์์๋ฅผ ๋ง๋๋ ์๊ฐ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ฉฐ, <script> ์์ ์ด์ ๊น์ง ์์ฑ๋ DOM๊น์ง๋ง ์ ๊ทผํ ์ ์๋ค. => <script> ์์๋ฅผ HTML ์ฝ๋ ์ค๊ฐ์ ๋ฃ๋๋ค๋ฉด, ํด๋น ์์ ์ดํ์ ์์ฑ๋ DOM์ ์์ ํ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํ๋ฉด์ด ์๋ํ ๋๋ก ํ์๋์ง ์๊ฒ ๋๋ค.
โฐ ์คํฌ๋ฆฝํธ ์คํ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง DOM ํธ๋ฆฌ ์์ฑ์ด ์ค๋จ๋๋ฉฐ, JavaScript ํ์ผ์ ๋ค์ด๋ฐ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ค์ด๋ก๋ ๋ฐ ์คํฌ๋ฆฝํธ ์คํ์ด ์๋ฃ๋ ๋๊น์ง DOM ํธ๋ฆฌ ์์ฑ์ด ์ค๋จ๋๋ค => DOM ํธ๋ฆฌ ์์ฑ์ด ์ค๋จ๋ ์๊ฐ๋งํผ ๋ ๋๋ง ์๋ฃ ์๊ฐ์ ๋ฆ์ถฐ์ง๊ฒ ๋๋ค.
<body>
<div>...</div>
...
// JavsScript ํ์ผ์ body ์์๊ฐ ๋ซํ๊ธฐ ์ง์ ์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
<script src="script.js" type="text/javascript"></script>
</body>
๐ฃ ๋ธ๋ผ์ฐ์ ์ด๋ฏธ์ง ์ต์ ํํ๊ธฐ
โ๏ธ ํ์ด์ง์ ๋๋ถ๋ถ์ ์ฉ๋์ HTML/CSS/JS์ ๊ฐ์ ์ฝ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ์ด๋ฏธ์ง ํ์ผ๊ณผ ๊ฐ์ ๋ฏธ๋์ด ํ์ผ์ด ์ฐจ์งํ๋ค.
โฐ ์ด๋ฏธ์ง์ ์ฉ๋์ ์ค์ด๊ฑฐ๋ ์์ฒญ์ ์๋ฅผ ์ค์ด๋ ๊ฒ์ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ ์, ์ฌ์ฉ์ ๊ฒฝํ์ ๋น ๋ฅด๊ฒ ๊ฐ์ ํ ์ ์๋ค.
๐ญ. ์ด๋ฏธ์ง ์คํ๋ผ์ดํธ
โ๏ธ ์น ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ๋ฐ ํ์ํ ์๋ฒ ์์ฒญ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ
โฐ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ชจ์ ํ๋์ ์คํ๋ผ์ดํธ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ณ CSS์ background-position ์์ฑ์ ์ฌ์ฉํด ์ด๋ฏธ์ง์ ์ผ์ ๋ถ๋ถ๋ง ํด๋์ค ๋ฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
โฐ ํ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ๋, ํ์ํ๊ณ ์ถ์ ๋ถ๋ถ์ ๋ง์ถฐ width, height, background-position ์์ฑ์ ์ฃผ์ด ์์ด์ฝ์ ๋ง๋ ๋ค.
โฐ ๋คํธ์ํฌ ๋ก๋ฉ ์๊ฐ์ ์ค์ผ ์ ์๊ณ , ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ฎ. ์์ด์ฝ ํฐํธ ์ฌ์ฉํ๊ธฐ
โ๏ธ ๋ชจ๋ ์์ด์ฝ์ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์์ด์ฝ ํฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฉ๋์ ์ค์ผ ์ ์๋ค.
โฐ Font Awesome
1๏ธโฃ CDN์ผ๋ก ์ฌ์ฉํ๊ธฐ
(1) Font Awesome์ ๊ฐ์ ํ๋ฉด ํคํธ๋ฅผ ๋ฐ๊ธํด์ฃผ๋๋ฐ, ์ด ํคํธ๋ฅผ HTML ํ์ผ์์ <head> ์์์ ๋ฃ์ด์ค๋ค.
(2) Font Awesome ์ฌ์ดํธ์์ ์ฌ์ฉํ๊ณ ์ถ์ ์์ด์ฝ์ ์ฐพ์์ ์ฌ์ฉํ ํ๊ฒฝ(HTML, React, Vue)์ ๋ง๋ ์ฝ๋๋ฅผ ๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ๊ธฐ
<i class="fa-solid fa-face-laugh-beam">
2๏ธโฃ Font Awesome ๋ชจ๋ ์ค์นํ๊ธฐ
(1) ํจํค์ง ์ค์นํ๊ธฐ
// ํต์ฌ ํจํค์ง ์ค์น
npm i --save @fortawesome/fontawesome-svg-core
// ์์ด์ฝ ํจํค์ง ์ค์น (ํด๋น ์ฝ๋๋ ๋ฌด๋ฃ ์์ด์ฝ๋ค์
๋๋ค. ์ ๋ฃ ์์ด์ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ถ๊ฐ๋ก ์ค์น๊ฐ ํ์ํฉ๋๋ค.)
npm i --save @fortawesome/free-solid-svg-icons
npm i --save @fortawesome/free-regular-svg-icons
npm i --save @fortawesome/free-brands-svg-icons
// Font Awesome React ๊ตฌ์ฑ ์์ ์ค์น
npm i --save @fortawesome/react-fontawesome@latest
(2) Font Awesome ์ฌ์ดํธ์์ ์ฌ์ฉํ๊ณ ์ถ์ ์์ด์ฝ์ ์ ๋ณด๋ฅผ ํ์ธํ ํ์, ์๋ง๊ฒ ๋ถ๋ฌ์์ ์ฌ์ฉํ๊ธฐ
ใด ์์ด์ฝ ์ด๋ฆ์ camelCase๋ก ์์ฑํด์ผ ํ๋ค.
<i class="fa-brands fa-react"></i>
๐ฏ. WebP ๋๋ AVIF ์ด๋ฏธ์ง ํฌ๋งท ์ฌ์ฉํ๊ธฐ
โ๏ธ WebP๋ PNG์ ๋น๊ตํด 26% ์ฉ๋์ด ๊ฐ์๋๋ฉฐ JPEG์ ๋น๊ตํ์ ๋ 25-35% ๋ ๊ฐ์๋๋ค.
โ๏ธ AVIF๋ JPEG์ ๋น๊ตํ์ ๋ ๋ฌด๋ ค ์ฉ๋์ 50%๊ฐ ๊ฐ์๋๋ฉฐ WebP์ ๋น๊ตํ์ ๋ 20% ๊ฐ์๋๋ค.
โฐ ์ต๊ทผ์ ๋ฑ์ฅํ ์ด๋ฏธ์ง ํฌ๋งท์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ํธํ๋์ง ์์ ์ ์๋ค.
ใด HTML์ <picture> ํ๊ทธ๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ ๋ธ๋ผ์ฐ์ ์ ํธํ์ ๋ง๋๋ก ๋ถ๊ธฐ๋ฅผ ๋์ฒดํ ์ ์๋ค.
ใด <picture> : img ์์์ ๋ค์ค ์ด๋ฏธ์ง ๋ฆฌ์์ค(multiple image resources)๋ฅผ ์ํ ์ปจํ ์ด๋๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ
<picture>
<source srcset="logo.webp" type="image/webp">
<img src="logo.png" alt="logo">
</picture>
// ๋ง์ฝ ์ ์ํ ๋ธ๋ผ์ฐ์ ์์ <source>ํ๊ทธ ๋ด์ srcset์ ์ ์ํ WebP ํฌ๋งท์ ์ง์ํ์ง ์๋๋ค๋ฉด ํด๋น <source> ํ๊ทธ๋ ๋ฌด์
๐ฃ CDN ์ฌ์ฉํ๊ธฐ
โ๏ธ ์ ์ ๊ฐ ๊ฐ๊น์ด ๊ณณ์ ์์นํ ๋ฐ์ดํฐ ์ผํฐ(์๋ฒ)์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
โฐ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๊ธฐ ์ํด ๊ฑฐ์ณ์ผํ๋ ์๋ฒ์ ๊ฐฏ์๊ฐ ํฌ๊ฒ ์ค๊ธฐ ๋๋ฌธ์ ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 9. [Deploy]Amazon Web Service (0) | 2023.03.31 |
---|---|
S4) Unit 8. [์ต์ ํ]์บ์ & Tree Shaking & Lighthouse (0) | 2023.03.30 |
S4) Unit 7. [Testing] TDD (0) | 2023.03.29 |
S4) Unit 6. [API] GraphQL (0) | 2023.03.28 |
S4) Unit 5. [์ปดํจํฐ ๊ณตํ] ์ด์์ฒด์ & ๋ฌธ์์ด๊ณผ ๊ทธ๋ํฝ & ๊ฐ๋น์ง ์ปฌ๋ ์ (1) | 2023.03.27 |