์ฃผ์š” ์ž‘์—…

  • ํด๋” ๊ตฌ์กฐ ๋ฐ ๋ชจ๋“ˆ ๊ตฌ์กฐ ๋ณ€๊ฒฝ โœ… 2024-08-27
  • express api์™€ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ โœ… 2024-08-27
  • ๋ฆฌ๋ Œ๋”๋ง ๋กœ์ง ์ž‘์„ฑ โœ… 2024-08-27

ํ•™์Šต ํ‚ค์›Œ๋“œ

๊ณ ๋ฏผ ๋ฐ ํ•ด๊ฒฐ๊ณผ์ •

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์œผ๋กœ ๋™์  ๋ Œ๋”๋งํ•˜๊ธฐ

์–ด์ œ๊นŒ์ง€๋งŒ ํ•ด๋„ ์›นํŒฉ์„ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์„ ์›นํŒฉ์— ๋„˜๊ฒจ์ฃผ์–ด ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด์ œ ๊ณ„์†ํ•ด์„œ ์‹คํŒจ๋ฅผ ๊ฑฐ๋“ญํ•œ ๊ฒฐ๊ณผ, ์ด๋Ÿฌํ•œ ์›นํŒฉ์˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์—์„œ ์‹คํ–‰ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ๋‹ค.

๋‚˜๋Š” ์–ด์ œ ์ด ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

  1. ์›นํŒฉ์—์„œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋ง ํ›„ import ํ•ด์„œ ์‚ฌ์šฉ โ†’ ์‹คํŒจ
    • Pug๋Š” fs์— ์˜์กดํ•˜๋Š” ๋ชจ๋“ˆ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €์—์„œ pug๋ฅผ Importํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กด์„ฑ์ด ์žˆ๋Š” fs ๋ชจ๋“ˆ ๋˜ํ•œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, fs ๋ชจ๋“ˆ์€ node.js๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ–ˆ๋‹ค.
    • not defined ์—๋Ÿฌ์™€ not relative path~์™€ ๊ฐ™์€ ์—๋Ÿฌ๋งŒ ์ด์–ด์กŒ๋‹ค.
  2. commonjs์˜ require๋ฌธ์„ ํ†ตํ•ด import
    • commonjs๋ฅผ ํ†ตํ•ด import ํ•˜๋Š” ๋ฐฉ์‹๋„ ์‹œ๋„ํ•ด๋ดค์ง€๋งŒ, ์• ์ดˆ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ require ๋ฌธ๋ฒ• ์ž์ฒด๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์†Œ์šฉ์—†์—ˆ๋‹ค.
    • require is not defined ์—๋Ÿฌ๋งŒ ๋–ด๋‹ค.
  3. ์ŠคํŠธ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ cdn jsdeliver์„ ํ†ตํ•ด ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ
    • ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ ๊ฐ€์ ธ์˜จ pug esm์—์„œ export default๋ฅผ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์•„ ๋‚˜์˜ค๋Š” ์—๋Ÿฌ๋งŒ ๋‚˜์™”๋‹ค.

์–ด์ œ ํ•˜๋ฃจ์ข…์ผ ์ด๊ฑฐ๋งŒ ์žก๊ณ  ์žˆ์—ˆ๊ธฐ์— ๊ฑฐ์˜ ํฌ๊ธฐํ•˜๊ณ  ๊ทธ๋ƒฅ pug ํŒŒ์ผ์„ ์˜จ๋ผ์ธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ํ•œ ๋’ค ์‚ฌ์šฉํ•˜๋ ค๋˜ ์ฐฐ๋‚˜, ๋ฌธ๋“ โ€˜Pug online compilerโ€™๋Š” ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ์„ ํ•˜๋Š”๊ฑธ๊นŒ? ์‹ถ์–ด์„œ ํ•ด๋‹น ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋ดค๋Š”๋ฐ https://gnjo.github.io/pug/pug.js?v=1๋ผ๋Š” ์ฃผ์†Œ๋กœ import ํ•ด์™€์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋‚˜๋„ ์ด ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ , module์—์„œ window.pug๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์ œ๋Œ€๋กœ compileClient ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ–ˆ๋‹ค!

ํ•˜์ง€๋งŒ ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ pug ํŒŒ์ผ ์ค‘์— import ํ•ด์„œ mixin์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ…œํ”Œ๋ฆฟ ์ž์ฒด๋ฅผ Import ํ•ด์˜ค๋Š” ์ž‘์—…์€ fs ๋ชจ๋“ˆ์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

import deleteConfirm from "/shared/deleteConfirm/index.js";
 
function Card() {
  const template = `style
    | @import url('/entities/card/style/card.css')
div.cardContainer(id=card.id draggable="true" data-date=card.date)
    form(action="post").editform(hidden)
        .form__div--cardForm
            input.form__input--title(type="text" placeholder="์ œ๋ชฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”" value=card.title) 
            textarea.form__textarea--cardDetail(type="text" placeholder="๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”" rows=1 maxlength=500)#cardDetail #{card.detail}
            .form__div--buttonWrapper
                input.form__input__cancel-button(type="button", value="์ทจ์†Œ")
                input.form__input__submit-button(type="button", value="๋“ฑ๋ก")
    li.generalCard(data-drag=card.id)
        .articleWrapper
            article
                p.title #{card.title}
                p.detail #{card.detail}
            p.author author by #{card.author}
        aside
            img.deleteTodo(src="/asset/close.svg", alt="delete", data-close=card.id)
            img.activeEditmode(src="/asset/pen.svg", alt="edit", data-edit=card.id)`;
  const compiledFunction = window.pug.compile(template, {
    basedir: "/Users/miguel/Desktop/naver/membership/week1/views",
  });
  function render(section, cards) {
    cards.forEach((card) => {
      section.innerHTML += compiledFunction({ card: card });
      deleteConfirm.render(card.id);
    });
  }
  return {
    render,
  };
}
 
const card = new Card();
export default card;
 

์ด์ฒ˜๋Ÿผ esm์„ ํ™œ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ํ˜•์˜ ํŠน์ง•์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค. ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋„ฃ๊ณ , ํด๋กœ์ €๋ฅผ ํ™œ์šฉํ•œ ๋‚ด๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ์บก์Аํ™”๊ฐ€ ์ ์šฉ๋˜์–ด ๋ณด์•ˆ์—๋„ ์ด์ ์„ ์ง€๋‹Œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ, mainsection ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ โ†’ section ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋ฅผ ๊ฑฐ์ณ import ํ•ด์˜จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ด๋‹น ๋ถ€๋ชจ ์š”์†Œ์˜ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋ Œ๋”๋งํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜์—ฌ๊ธˆ ์—ฐ์‡„์ ์œผ๋กœ ๋ Œ๋”๋ง์„ ์‹œํ‚ค๋„๋ก ์„ค๊ณ„ํ•˜์˜€๋‹ค.

fsd ์›์น™์— ์ถฉ์‹คํ•œ ๋ชจ๋“ˆ๋“ค

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ ๋ Œ๋”๋ง์€ ๋ชจ๋“ˆํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๋ณด๋‹ค ๊ณ„์ธต์ ์œผ๋กœ ๋ณด๋‹ค ์ž˜ ํŒŒ์•…ํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด๋‚˜ ๊ตฌ์กฐ ์ธก๋ฉด์—์„œ ๊ฐ€์ง€๋Š” ์ด์ ์ด ํฌ๋‹ค. ์ด์— ๊ธฐ์กด์˜ fsd ์›์น™์€ ๊ทธ์ € ๊ฐœ๋…์„ ๋‚ด๊ฐ€ ํŽธํ•œ๋Œ€๋กœ ํ•ด์„ํ•˜์—ฌ ์„ค๊ณ„ํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” fsd ์›์น™์— ์ถฉ์‹คํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์งœ๋ ค ํ•œ๋‹ค.