์น ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ๋ฉ์ธ ํ์ด์ง, ์ด๋ฒคํธ ํ์ด์ง ๋ฑ ์ฌ๋ฌ ํ๋ฉด์์ ๋์ผํ HTML ๊ตฌ์กฐ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฑ์ฅํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฐ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๊ณ , ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์๊ฒผ์ ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ ์์ ํด์ผ ํ๋ ๋ถํธํจ์ด ์๊น๋๋ค.
์ด๋ฒ ์์
์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ ์ญ ์๋ฐ์คํฌ๋ฆฝํธ ์ปดํฌ๋ํธ๋ก ๋ชจ๋ํํ์ฌ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
1. ์ ์ญ ๋ค์์คํ์ด์ค ํจํด
window.RentalComponents = window.RentalComponents || {};
- ์ ์ญ ๋ณ์ ์ค์ผ(Global Pollution) ๋ฐฉ์ง.
- window ๊ฐ์ฒด์ RentalComponents๋ผ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ ์ํ์ฌ ๋ชจ๋ ํจ์๋ฅผ ์ด ์์ ๋ชจ์ ๊ด๋ฆฌ
- ์ด๋ฏธ ์ ์ธ๋ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ (|| {}), ์์ผ๋ฉด ์ ๊ฐ์ฒด ์์ฑ.
2. ํจ์ ์ ์ ๋ฐฉ์
RentalComponents.createProductPointHtml = function() { ... };
- ์ต๋ช ํจ์(Anonymous Function)๋ฅผ ๋ณ์์ ํ ๋นํ๋ ๋ฐฉ์.
- ํ์ดํ ํจ์(=>) ๋์ function ํค์๋๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋๋ฌธ
- ๋ฐํ๊ฐ์ HTML ๋ฌธ์์ด(string)๋ก, ํ์ํ ์์น์ ์ฝ์ ๊ฐ๋ฅ
3. HTML ๋ฌธ์์ด ๊ฒฐํฉ
return '<div class="pro_point">' +
'<span class="pro_point_best"><img src="/images/pro_best.jpg" alt="๋ฒ ์คํธ" /></span>' +
...
'</div>';
- + ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์์ด์ ์ด์ด๋ถ์ด๋ ์ ํต์ ์ธ ๋ฐฉ์
- ES6 ์ดํ์๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด(`)์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋ ์ข์ง๋ง, ๊ตฌ๋ฒ์ ํธํ์ ์ํด ๊ธฐ์กด ๋ฐฉ์ ์ ์ง
4. jQuery ํ์ฉ
$('.pro_point_placeholder').each(function() {
$(this).html(RentalComponents.createProductPointHtml());
});
- jQuery์ .each()๋ก ๋ฐ๋ณต๋ฌธ ์ฒ๋ฆฌ
- .html()์ ์ด์ฉํด placeholder ์์ญ์ ์ค์ HTML๋ก ์นํ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ด์ง ๋ด ํน์ ์์น์ ๋์ ์ผ๋ก UI๋ฅผ ์์ฑ
5. ๋ฐ์ดํฐ ์์ฑ(Data Attribute) ํ์ฉ
var imgPath = $(this).data('img-path') || '';
var imgFileName = $(this).data('img-filename') || '';
- <div data-img-path="/images/" data-img-filename="test.png"></div> data- ์์ฑ์ ์ฝ์ด์ ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐ ํ์ผ๋ช ์ ๋์ ์ผ๋ก ์กฐํฉ
- ๊ฐ์ด ์์ ๊ฒฝ์ฐ ''(๋น ๋ฌธ์์ด)๋ก ์ฒ๋ฆฌํด ์ค๋ฅ ๋ฐฉ์ง
6. ์ด๊ธฐํ ๋ก์ง
$(document).ready(function() {
RentalComponents.initializeComponents();
});
- DOM์ด ์ค๋น๋๋ฉด ์๋ ์คํ.
- initializeComponents()์์ ๊ฐ placeholder(.pro_point_placeholder, .thumb_gift_placeholder ๋ฑ)๋ฅผ ์ฐพ์ HTML๋ก ๋ณํ
- ํ์ด์ง ๋ก๋ ์์ ์ ํ์ํ UI๋ฅผ ์๋์ผ๋ก ๋ ๋๋ง
7. ํ์ ํธํ์ฑ ์ฒ๋ฆฌ
window.createProductPointHtml = RentalComponents.createProductPointHtml;
- ๊ธฐ์กด ์ฝ๋์์ ์ฌ์ฉํ๋ createProductPointHtml() ํธ์ถ ๋ฐฉ์์ ์ ์ง
- ์๋ก์ด ๋ค์์คํ์ด์ค ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ํจ๊ป ๋์ํ๋๋ก ๋ฐฑ์๋ ํธํ์ฑ ํ๋ณด
8. ๋ฌธ๋ฒ/์ค๊ณ ํฌ์ธํธ ์ ๋ฆฌ
- ๋ชจ๋ ํจํด: ๋ค์์คํ์ด์ค ๊ธฐ๋ฐ์ผ๋ก ํจ์ ๊ด๋ฆฌ.
- ๋์ HTML ๋ ๋๋ง: ๋ฌธ์์ด ๋ฐํ ํ jQuery .html() ์ฝ์ .
- ์ฌ์ฌ์ฉ์ฑ: ์ํ ํฌ์ธํธ, ์ฌ์ํ, ์ด๋ฏธ์ง ๋ฑ ๋ฐ๋ณต ์ฝ๋๋ฅผ ํจ์ํํ์ฌ ์ค๋ณต ์ ๊ฑฐ
- ํ์ฅ์ฑ: ์๋ก์ด ์ ํ์ด ์๊ฒจ๋ ํจ์ ์ถ๊ฐ๋ง์ผ๋ก ์์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅ
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๊ฐ์ ์์
์ ํตํด ์ค๋ณต๋ ์ฝ๋๊ฐ ํ๋์ ์ ์ญ ์ปดํฌ๋ํธ๋ก ํตํฉ๋๋ฉด์ ์ ์ง๋ณด์๊ฐ ํจ์ฌ ์ฌ์์ก์ต๋๋ค. ์๋ก์ด ์ํ ์ ํ์ด ์ถ๊ฐ๋๋๋ผ๋ ํจ์๋ง ํ์ฅํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ๋ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค.
๐ ์์ผ๋ก๋ ํ์ด์ง๋ง๋ค ๊ฐ์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ๋ ๋์ , ํ ๊ณณ์์๋ง ๊ด๋ฆฌํ๊ณ ์ ์ฒด์์ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์ฌ ๋๊ฐ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
'DevLog' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [CLS ๊ฐ์ ] Lighthouse ์ฑ๋ฅ ๊ฐ์ ๊ธฐ๋ก: 76์ โ 82์ ๊น์ง ์ฌ๋ฆฐ ๊ณผ์ (0) | 2025.08.20 |
|---|