Bibi's DevLog ๐Ÿค“๐ŸŽ

[ํ…œํ”Œ๋ฆฟ ์—”์ง„] mustache ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ

[ํ…œํ”Œ๋ฆฟ ์—”์ง„] mustache ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋น„๋น„ bibi 2021. 3. 9. 18:27

mustache ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์ •๋ฆฌํ•˜๊ธฐ

๋ณต์žกํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณต๋ถ€ ๋ฐ ์—ฐ์Šตํ•ด ๋ณธ๋‹ค!

๊ณต์‹ํŽ˜์ด์ง€..๋ฅผ ๋ฒˆ์—ญํ•œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ๋ณ€์ˆ˜

{{, }} ์‚ฌ์ด์— ๋ณ€์ˆ˜๋ช…์„ ์ž…๋ ฅํ•œ๋‹ค.

  • ๋ฌธ์ž์—ด์€ ์ž๋™ HTML ์ด์Šค์ผ€์ดํ”„ ๋œ๋‹ค.
  • ์ด์Šค์ผ€์ดํ”„ Escape๋ž€? ํŠน์ • ๋ฌธ์ž๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ–‰์œ„. (์ œ๋กœ์ดˆ ์ฐธ๊ณ )
  • ์ด์Šค์ผ€์ดํ”„๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด {{{, }}}์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ

{
    "name" : "Chris",
      "company" : "<b>Github</b>"
}

ํ…œํ”Œ๋ฆฟ

{{name}}
{{age}}
{{company}}
{{{company}}}

๊ฒฐ๊ณผ

Chris

&lt;b&gt;Github&lt;/b&gt;
<b>Github</b>

1-1. ๋ณต์žกํ•œ ๊ฐ์ฒด

: ๊ฐ์ฒด ์•ˆ์— ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์„ ๋•Œ๋Š” ์  ๋ฌธ๋ฒ•(dot-syntax)์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ

{
  "name" : "Chris",
  "company" : {
    "name" : "Github",
    "address" : {
      "country" : "USA"
    }
  }
}

ํ…œํ”Œ๋ฆฟ

Country : {{company.address.country}}

๊ฒฐ๊ณผ

Country : USA

2. ์„น์…˜ (๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ)

์„น์…˜section์€ {{#๋ณ€์ˆ˜๋ช…}} ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  {{/๋ณ€์ˆ˜๋ช…}}์œผ๋กœ ๋๋‚œ๋‹ค.

์„น์…˜์€ ์ฃผ์–ด์ง„ ๊ฐ’์— ๋”ฐ๋ผ ์กฐ๊ฑด๋ฌธ / ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ๋ณ€์ˆ˜๊ฐ€ ๋ฐฐ์—ด์ด๋ฉด ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋จ.
  • ๋ณ€์ˆ˜๊ฐ€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ฉด ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋จ.
    • 0, false, ๋นˆ ๋ฌธ์ž์—ด์€ ๊ฑฐ์ง“์œผ๋กœ ํŒ๋‹จํ•˜๋ฉฐ ์„น์…˜ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฐฐ์—ด์ด๋ผ๋„ ๋นˆ ๋ฐฐ์—ด์€ ๊ฑฐ์ง“ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉฐ ์„น์…˜ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

2-1. ์„น์…˜ - ์กฐ๊ฑด๋ฌธ

๋ฐ์ดํ„ฐ

{
  "person" : false
}

ํ…œํ”Œ๋ฆฟ

์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
{{#person}}
  ์ถœ๋ ฅ์•ˆ๋ฉ๋‹ˆ๋‹ค.
{{/person}}

๊ฒฐ๊ณผ

์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด์ผ ๋•Œ๋Š” ์„น์…˜ ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

๋ฐ์ดํ„ฐ

{
  "person" : {"name" : "Jon"}
}

ํ…œํ”Œ๋ฆฟ

{{#person}}
  {{name}}
{{/person}}

๊ฒฐ๊ณผ

Jon

์„น์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ์ˆ˜์ค€์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ

๋ฐ์ดํ„ฐ

{
  "person" : {"name" : "Jon"},
  "company" : {"name" : "Google"}
}

ํšŒ์‚ฌ ์ด๋ฆ„์œผ๋กœ Google์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

ํ…œํ”Œ๋ฆฟ

{{#person}}
  {{name}}์˜ ํšŒ์‚ฌ๋Š” {{company.name}}์ž…๋‹ˆ๋‹ค.
{{/person}}

๊ฒฐ๊ณผ

Jon์˜ ํšŒ์‚ฌ๋Š” Google์ž…๋‹ˆ๋‹ค.

2-2. ์„น์…˜ - ๋ฐ˜๋ณต๋ฌธ

๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐฐ์—ด์ด๋ฉด ๋ฐ˜๋ณต๋ฌธ์ด ๋œ๋‹ค.

๋นˆ ๋ฐฐ์—ด์€ ๊ฑฐ์ง“ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

๋ฐ์ดํ„ฐ

{
  "repo" : [
    { "name" : "resque" },
    { "name" : "hub" },
    { "name" : "rip" }
  ]
}

ํ…œํ”Œ๋ฆฟ

{{#repo}}
  <b>{{name}}</b>
{{/repo}}

๊ฒฐ๊ณผ

<b>resque</b>
<b>hub</b>
<b>rip</b>

2-3. ๋ฐ˜์ „ ์„น์…˜

{{^๋ณ€์ˆ˜๋ช…}}์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  {{/๋ณ€์ˆ˜๋ช…}}์œผ๋กœ ๋๋‚œ๋‹ค.

๋ฐ˜์ „ ์„น์…˜์€ ์„น์…˜๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ์กฐ๊ฑด์—์„œ๋งŒ ์ถœ๋ ฅ๋˜๋Š” ๋ธ”๋Ÿญ์ด๋‹ค.

  • ์„น์…˜์— ์‚ฌ์šฉ๋œ ์ ์ด ์—†๋Š” ๋ณ€์ˆ˜์ผ ๋•Œ
  • ๋ณ€์ˆ˜์˜ ๊ฐ’์ด false , 0, ๋นˆ ๋ฌธ์ž์—ด์ผ ๋•Œ
  • ๋ณ€์ˆ˜๊ฐ€ ๋นˆ ๋ฐฐ์—ด์ผ ๋•Œ

๋ฐ์ดํ„ฐ

{
  "repo": []
}

ํ…œํ”Œ๋ฆฟ

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  ์ €์žฅ์†Œ๊ฐ€ ์—†๋„ค์š”. -_-
{{/repo}}

๊ฒฐ๊ณผ

์ €์žฅ์†Œ๊ฐ€ ์—†๋„ค์š”. -_-

์ฃผ์„

{{!๋กœ ์‹œ์ž‘ํ•˜๊ณ , }}๋กœ ๋๋‚œ๋‹ค.

์ฃผ์„์€ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ ํ™”๋ฉด์—๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํ…œํ”Œ๋ฆฟ

<h1>Today{{! ์—ฌ๊ธฐ๋Š” ์•ˆ ๋‚˜์˜ต๋‹ˆ๋‹ค. }}</h1>

๊ฒฐ๊ณผ

<h1>Today</h1>

๋ถ€๋ถ„ ํ…œํ”Œ๋ฆฟ

{{> ํŒŒ์ผ์ด๋ฆ„}} ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ถ€๋ถ„ํ…œํ”Œ๋ฆฟ(Partials)์€ ์™ธ๋ถ€ ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟ์˜ ์ผ๋ถ€๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

ํ…œํ”Œ๋ฆฟ1 (base.mustache)

<h2>Names</h2>
{{#names}}
  {{> user}}
{{/names}}

ํ…œํ”Œ๋ฆฟ2 (user.mustache)

<strong>{{name}}</strong>

๊ฒฐ๊ณผ ํ…œํ”Œ๋ฆฟ

<h2>Names</h2>
{{#names}}
  <strong>{{name}}</strong>
{{/names}}

๊ตฌ๋ถ„์ž ์„ค์ •

ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ {{ ์™€ }} ๋ฅผ ์ž ์‹œ ๋‹ค๋ฅธ ๊ตฌ๋ถ„์ž๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

{{=๋ฐ”๊ฟ€์—ฌ๋Š”๊ตฌ๋ถ„์ž ๋ฐ”๊ฟ€๋‹ซ๋Š”๊ตฌ๋ถ„์ž=}}

๋ฐ”๊ฟจ๋˜ ๊ตฌ๋ถ„์ž๋ฅผ ๋‹ค์‹œ ๋˜๋Œ๋ฆด ๋•Œ๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋ฐ”๊ฟจ๋˜์—ฌ๋Š”๊ตฌ๋ถ„์ž={{ }}=๋ฐ”๊ฟจ๋˜๋‹ซ๋Š”๊ตฌ๋ถ„์ž

ํ…œํ”Œ๋ฆฟ

* {{default_tags}}
{{=<% %>=}}
* <% ERB_์Šคํƒ€์ผ_ํƒœ๊ทธ %>
<%={{ }}=%>
* {{ ์›๋ž˜_ํ…œํ”Œ๋ฆฟ_์ฝ”๋“œ }}