AMP

AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜

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

AMP HTML ํƒœ๊ทธ์™€ ์†์„ฑ ์˜ค๋ฅ˜

ํ•„์ˆ˜ ํƒœ๊ทธ ๋ˆ„๋ฝ

์ฝ”๋“œ MANDATORY_TAG_MISSING
ํ˜•์‹ "The mandatory tag '%1' is missing or incorrect."
ํ•ด๊ฒฐ์ฑ… ํ•„์ˆ˜ HTML ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€(๋˜๋Š” ์ˆ˜์ •)ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  AMP ๋ฌธ์„œ์—๋Š” ๋‹ค์Œ ํƒœ๊ทธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • <!doctype html>
  • <html amp> or <html โšก>
  • <head>
  • <link rel="canonical" href="$SOME_URL">
  • <meta charset="utf-8">
  • <meta name="viewport" content="...">
  • <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
  • <script async src="https://cdn.ampproject.org/v0.js"></script>
  • <body>

์ด๋Ÿฌํ•œ ํ•„์ˆ˜ ํƒœ๊ทธ์—๋Š” AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์— mandatory: true ํ•„๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํƒœ๊ทธ๋Š” AMP ์‚ฌ์–‘์—์„œ๋„ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํƒœ๊ทธ์— ํ•„์š”ํ•œ ํƒœ๊ทธ ๋ˆ„๋ฝ

์ฝ”๋“œ TAG_REQUIRED_BY_MISSING
ํ˜•์‹ "The '%1' tag is missing or incorrect, but required by '%2'."
ํ•ด๊ฒฐ์ฑ… ํ•„์š”ํ•œ HTML ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€(๋˜๋Š” ์ˆ˜์ •)ํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๋Š” AMP ๋ฌธ์„œ์—์„œ ํ™•์žฅ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์œผ๋‚˜ ์ด์— ์ƒ์‘ํ•˜๋Š” <script>๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ TAG_REQUIRED_BY_MISSING ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ™•์žฅ ๊ตฌ์„ฑ์š”์†Œ๋Š” ๋งž์ถค ์š”์†Œ๋กœ์„œ AMP ๋ฌธ์„œ์— ๋ช…์‹œ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํ™•์žฅ ๊ตฌ์„ฑ์š”์†Œ์˜ ์ฐธ์กฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ ๋‹ค์Œ ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ AMP ๋ฌธ์„œ <head>์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.

ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํƒœ๊ทธ

์ฝ”๋“œ DISALLOWED_TAG
ํ˜•์‹ "The tag '%1' is disallowed."
ํ•ด๊ฒฐ์ฑ… ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

ํƒœ๊ทธ๋Š” ํ—ˆ์šฉ๋œ ๊ฒƒ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํƒœ๊ทธ๋ฅผ ๋‚˜์—ดํ•œ ๋ชฉ๋ก์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ AMP ์‚ฌ์–‘์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํƒœ๊ทธ์˜ ๊ด‘๋ฒ”์œ„ํ•œ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์ถค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ

์ฝ”๋“œ DISALLOWED_SCRIPT_TAG
ํ˜•์‹ "Custom JavaScript is not allowed."
ํ•ด๊ฒฐ์ฑ… ํ•ด๋‹น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

AMP ํ˜•์‹์—์„œ๋Š” AMP ํ”„๋กœ์ ํŠธ์—์„œ ์ž์ฒด ์ œ๊ณตํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์•„๋‹Œ ๋งž์ถค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ HTML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ƒ์‘ํ•˜๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AMP ๊ตฌ์„ฑ์š”์†Œ์—์„œ AMP HTML ํŽ˜์ด์ง€๋ฅผ ํ–ฅ์ƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

ํ•„์š”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด AMP ํ”„๋กœ์ ํŠธ์— ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ AMP ํ”„๋กœ์ ํŠธ์˜ ์ฐธ์—ฌํ•˜๊ธฐ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์†์„ฑ ๋ˆ„๋ฝ

์ฝ”๋“œ MANDATORY_ATTR_MISSING
ํ˜•์‹ "The mandatory attribute '%1' is missing in tag '%2'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์— ํ•„์ˆ˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์— AMP ํƒœ๊ทธ์˜ ํ•„์ˆ˜ ์†์„ฑ์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ช…์‹œ๋œ ์†์„ฑ์„ ํ™•์ธํ•œ ๋‹ค์Œ mandatory: true๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ฐ AMP ํƒœ๊ทธ์˜ ํ•„์ˆ˜ ์†์„ฑ์€ ํƒœ๊ทธ ์‚ฌ์–‘์—๋„ ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ์†์„ฑ ๊ฐ’

์ฝ”๋“œ INVALID_ATTR_VALUE
ํ˜•์‹ "The attribute '%1' in tag '%2' is set to the invalid value '%3'."
ํ•ด๊ฒฐ์ฑ… ์†์„ฑ์„ ์œ ํšจํ•œ ๊ฐ’์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” HTML ํƒœ๊ทธ์— ์ด๋ฆ„์€ ํ—ˆ์šฉ๋˜๋‚˜ ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด URL์˜ ๊ฐ’์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ์ด ์˜ค๋ฅ˜๊ฐ€ ํ”ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  URL ๊ฐ’(href ๋ฐ src ์†์„ฑ)์€ ๋‹ค์Œ์˜ ๊ฐ€๋Šฅํ•œ ์†์„ฑ ๊ฐ’ ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”: AMP์˜ URL ๊ฐ’ ๋Œ€๋ถ€๋ถ„์€ HTTPS๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ด€๋ จ AMP ํƒœ๊ทธ ์‚ฌ์–‘์—์„œ ์†์„ฑ์ด HTTPS๋ฅผ ์š”๊ตฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ

์ฝ”๋“œ DISALLOWED_ATTR
ํ˜•์‹ "The attribute '%1' may not appear in tag '%2'."
ํ•ด๊ฒฐ์ฑ… HTML ํƒœ๊ทธ์—์„œ ์†์„ฑ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ์€ ํ—ˆ์šฉ๋œ ๊ฒƒ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์†์„ฑ์„ ๋‚˜์—ดํ•œ ๋ชฉ๋ก์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ํƒœ๊ทธ์—์„œ ์ง€์›๋˜๋Š” ์†์„ฑ์„ ํ™•์ธํ•˜๋ ค๋ฉด HTML ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์—์„œ attrs๋ฅผ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํƒœ๊ทธ๋ณ„๋กœ ํ—ˆ์šฉ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ์†์„ฑ ์™ธ์—๋„ ๋ชจ๋“  AMP ํƒœ๊ทธ๋Š” $GLOBAL_ATTRS์—์„œ ํ—ˆ์šฉ๋œ ๋ชจ๋“  ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ 'data-'๊ฐ€ ์‚ฌ์šฉ๋œ ์†์„ฑ๋„ ๋ชจ๋‘ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํ…์ŠคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋จ

์ฝ”๋“œ MANDATORY_CDATA_MISSING_OR_INCORRECT
ํ˜•์‹ "The mandatory text (CDATA) inside tag '%1' is missing or incorrect."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์— ํ•„์ˆ˜ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

CDATA๋Š” ์‹œ์ž‘ ๋ฐ ๋ HTML ํƒœ๊ทธ ์‚ฌ์ด์— ์œ„์น˜ํ•œ ์ฝ˜ํ…์ธ  ๋ฐ์ดํ„ฐ์ด๋ฉฐ ํ˜„์žฌ ํ—ˆ์šฉ ๋ชฉ๋ก ๋ฐ ๊ธˆ์ง€ ๋ชฉ๋ก์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. CDATA๊ฐ€ ํ•„์ˆ˜์ธ ํƒœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>

๋ฐ

<style amp-custom>

์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ƒ์„ธ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • "Mandatory style boilerplate (js enabled)"
  • "Mandatory style boilerplate (noscript)"
  • "Disallowed -amp- CSS class name prefix"
  • "Disallowed !important attribute in CSS"
  • "Disallowed @charset in CSS"
  • "Disallowed @import in CSS"
  • "Disallowed @namespace in CSS"
  • "Disallowed @supports in CSS"
  • "Disallowed @document in CSS"
  • "Disallowed @page in CSS"
  • "Disallowed @viewport in CSS"

ํƒœ๊ทธ ๋‚ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํ…์ŠคํŠธ

์ฝ”๋“œ CDATA_VIOLATES_DENYLIST
ํ˜•์‹ "The text (CDATA) inside tag '%1' matches '%2', which is disallowed."
ํ•ด๊ฒฐ์ฑ… ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํ…์ŠคํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • CSS ๋ฐ์ดํ„ฐ๋Š” ํ•„์ˆ˜์ ์ธ CSS AMP ๊ทœ์น™์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ธˆ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ธˆ์ง€๋œ CSS ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. (AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์˜ disallowed_cdata_regex๋„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.):

  • "\\.i?-amp-" ("CSS -amp- class name prefix")
  • "!important"
  • "charset"
  • "&#64;import"
  • "@namespace"
  • "@document"
  • "@page"
  • "@viewport"

ํƒœ๊ทธ์˜ ์†์„ฑ ๋‚ด์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ

์ฝ”๋“œ DISALLOWED_PROPERTY_IN_ATTR_VALUE
ํ˜•์‹ "The property '%1' in attribute '%2' in tag '%3' is disallowed."
ํ•ด๊ฒฐ์ฑ… ํ•ด๋‹น ์†์„ฑ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ ์ด๋ฆ„์ด ์†์„ฑ ๋‚ด์— ์žˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งฅ๋ฝ์—์„œ ํŠน์„ฑ(property)์ด๋ž€ ์†์„ฑ ๋‚ด์˜ ๊ตฌ์กฐํ™”๋œ ํ‚ค/๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <meta name="viewport content="width=device-width;minimum-scale=1">์—์„œ width์™€ minimum-scale์ด ํŠน์„ฑ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ DISALLOWED_PROPERTY_IN_ATTR_VALUE ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค:

<meta name="viewport content="width=device-width;invalidfoo=1">

๋‹ค์Œ์˜ ์˜ˆ์—์„œ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

<meta http-equiv="X-UA-Compatible" content="invalidfoo=edge">

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: <meta http-equiv="X-UA-Compatible" content="ie=edge">

์ž˜๋ชป๋œ ํŠน์„ฑ ๊ฐ’

์ฝ”๋“œ INVALID_PROPERTY_VALUE_IN_ATTR_VALUE
ํ˜•์‹ "The property '%1' in attribute '%2' in tag '%3' is set to '%4', which is invalid."
ํ•ด๊ฒฐ์ฑ… ์ž˜๋ชป๋œ ํŠน์„ฑ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์†์„ฑ ๋‚ด ํŠน์„ฑ ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งฅ๋ฝ์—์„œ ํŠน์„ฑ(property)์ด๋ž€ ์†์„ฑ ๋‚ด์˜ ๊ตฌ์กฐํ™”๋œ ํ‚ค/๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <meta name="viewport content="width=device-width;minimum-scale=1">์—์„œ device-width์™€ 1์€ ํŠน์„ฑ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ INVALID_PROPERTY_VALUE_IN_ATTR_VALUE ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค:

<meta name=viewport content="width=device-width;minimum-scale=invalidfoo">

๊ฐ’์ด ์—†๋Š” ์†์„ฑ(์˜ˆ: amp-video ๊ตฌ์„ฑ์š”์†Œ์˜ autoplay, controls, loop ์†์„ฑ)์„ ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ HTML ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ true์™€ ๊ฐ™์ด ๊ธฐ๋ณธ๊ฐ’์ด์ง€๋งŒ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’(์˜ˆ: React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ <amp-video autoplay="true" ...>๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ)์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ์†์„ฑ ์ด๋ฆ„์„ ๊ฐ’์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. <amp-video autoplay="autoplay" ...>

URL ๋ˆ„๋ฝ

์ฝ”๋“œ MISSING_URL
ํ˜•์‹ "Missing URL for attribute '%1' in tag '%2'."
ํ•ด๊ฒฐ์ฑ… ์œ ํšจํ•œ URL์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” URL์„ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์—์„œ URL์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด href๋‚˜ src ์†์„ฑ์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ URL

์ฝ”๋“œ INVALID_URL_PROTOCOL
ํ˜•์‹ "Malformed URL '%3' for attribute '%1' in tag '%2'"
ํ•ด๊ฒฐ์ฑ… ์ž˜๋ชป๋œ URL์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์†์„ฑ์— URL์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‚˜ URL์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ URL ํ”„๋กœํ† ์ฝœ

์ฝ”๋“œ INVALID_URL_PROTOCOL
ํ˜•์‹ Invalid URL protocol '%3:' for attribute '%1' in tag '%2'.
ํ•ด๊ฒฐ์ฑ… ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœํ† ์ฝœ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `http`๋ฅผ `https`๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํŠน์ • ํ”„๋กœํ† ์ฝœ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•˜๋Š” href ๋˜๋Š” src๊ฐ€ ํฌํ•จ๋œ ํƒœ๊ทธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ํƒœ๊ทธ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์†์„ฑ์—์„œ ํ•„์ˆ˜ ํŠน์„ฑ ๋ˆ„๋ฝ

์ฝ”๋“œ MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE
ํ˜•์‹ "The property '%1' is missing from attribute '%2' in tag '%3'."
ํ•ด๊ฒฐ์ฑ… ๋ˆ„๋ฝ๋œ ํŠน์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„์ˆ˜ ํŠน์„ฑ์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  • content="...ie=..."
  • content="...width=..."
  • content="...minimum-scale=..."

์ด ์†์„ฑ์€ ๋‹ค์Œ์˜ ์˜ˆ์ƒ ํƒœ๊ทธ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค:

  • <meta http-equiv="X-UA-Compatible" content="ie=edge">
  • <meta name=viewport content="width=device-width;minimum-scale=1">

์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ ์†์„ฑ

์ฝ”๋“œ MUTUALLY_EXCLUSIVE_ATTRS
ํ˜•์‹ "Mutually exclusive attributes encountered in tag '%1' - pick one of %2."
ํ•ด๊ฒฐ์ฑ… ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํƒœ๊ทธ์— ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ํƒœ๊ทธ์—์„œ๋Š” ํ•˜๋‚˜์˜ ์†์„ฑ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค:

๋ชฉ๋ก์—์„œ ํ•„์ˆ˜ ์†์„ฑ ๋ˆ„๋ฝ

์ฝ”๋“œ MANDATORY_ONEOF_ATTR_MISSING
ํ˜•์‹ "The tag '%1' is missing a mandatory attribute - pick one of %2."
ํ•ด๊ฒฐ์ฑ… ์ œ๊ณต๋œ ์†์„ฑ ์ค‘์—์„œ ๋ˆ„๋ฝ๋œ ํ•„์ˆ˜ ์†์„ฑ์„ ์„ ํƒํ•˜์—ฌ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํƒœ๊ทธ์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์†์„ฑ ์ค‘ ํ•˜๋‚˜์˜ ํ•„์ˆ˜ ์†์„ฑ์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ํ•„์ˆ˜ ์†์„ฑ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

์ž˜๋ชป๋œ ์ƒ์œ„ ํƒœ๊ทธ

์ฝ”๋“œ WRONG_PARENT_TAG
ํ˜•์‹ "The parent tag of tag '%1' is '%2', but it can only be '%3'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ๋ฅผ ํ•„์š”ํ•œ ์ƒ์œ„ ํƒœ๊ทธ์˜ ์ง์ ‘ ํ•˜์œ„ ํƒœ๊ทธ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํŠน์ • ํƒœ๊ทธ๋Š” ๋จผ ์ƒ์œ„ ์š”์†Œ๊ฐ€ ์•„๋‹Œ ์ง์ ‘ ์ƒ์œ„ ํƒœ๊ทธ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ๋ชฉ๋ก์—์„œ ํŠน์ • ํƒœ๊ทธ์— ํ•„์š”ํ•œ ์ƒ์œ„ ํƒœ๊ทธ(ํƒœ๊ทธ, ์ƒ์œ„์ˆœ)๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • !doctype์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ root๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • html์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ !doctype์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • head์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ html์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • body์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ html์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • link์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ head๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • meta์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ head๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • style amp-custom์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ head๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • style์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ boilerplate(noscript)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • noscript์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ head๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • script์—๋Š” ์ƒ์œ„ ํƒœ๊ทธ head๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • source์—๋Š” ๋ฏธ๋””์–ด ํƒœ๊ทธ(amp-audio, amp-video ๋“ฑ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํƒœ๊ทธ ์ƒ์œ„ ์š”์†Œ

์ฝ”๋“œ DISALLOWED_TAG_ANCESTOR
ํ˜•์‹ "The tag '%1' may not appear as a descendant of tag '%2'."
ํ•ด๊ฒฐ์ฑ… ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ค‘์ฒฉ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œ(๋˜๋Š” ์ด๋™)ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํƒœ๊ทธ๊ฐ€ ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ํƒœ๊ทธ์˜ ํ•˜์œ„ ์š”์†Œ์ผ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ์˜ค๋ฅ˜์˜ ์œ ์ผํ•œ ์˜ˆ๋กœ template ํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํƒœ๊ทธ๋Š” ๋‹ค๋ฅธ template ํƒœ๊ทธ ์•„๋ž˜์— ์ค‘์ฒฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํƒœ๊ทธ ์ƒ์œ„ ์š”์†Œ

์ฝ”๋“œ MANDATORY_TAG_ANCESTOR
ํ˜•์‹ "The tag '%1' may only appear as a descendant of tag '%2'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํƒœ๊ทธ์˜ ํ•˜์œ„ ์š”์†Œ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํ•˜์œ„ ์š”์†Œ๋Š” AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์— mandatory_ancestor๋กœ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ ํƒœ๊ทธ์— mandatory_ancestor(ํƒœ๊ทธ, ์ƒ์œ„ ์š”์†Œ)๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  • img๋Š” noscript์˜ ํ•˜์œ„ ์š”์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • video๋Š” noscript์˜ ํ•˜์œ„ ์š”์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • audio๋Š” noscript์˜ ํ•˜์œ„ ์š”์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • noscript๋Š”body์˜ ํ•˜์œ„ ์š”์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํžŒํŠธ๊ฐ€ ์žˆ๋Š” ํ•„์ˆ˜ ํƒœ๊ทธ ์ƒ์œ„ ์š”์†Œ

์ฝ”๋“œ MANDATORY_TAG_ANCESTOR_WITH_HINT
ํ˜•์‹ "The tag '%1' may only appear as a descendant of tag '%2'. Did you mean '%3'?'
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ํƒœ๊ทธ๋ฅผ ํŠน์ • ํƒœ๊ทธ์˜ ํ•˜์œ„ ์š”์†Œ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜, ํžŒํŠธ ํƒœ๊ทธ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ์˜ ํƒœ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ AMP ๋ฌธ์„œ์— ์žˆ์ง€๋งŒ ํ•„์ˆ˜ ์ƒ์œ„ ํƒœ๊ทธ์— ์ œ๋Œ€๋กœ ์ค‘์ฒฉ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  • img๋Š” noscript ์ƒ์œ„ ํƒœ๊ทธ ๋‚ด์— ์œ„์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • video๋Š” noscript ์ƒ์œ„ ํƒœ๊ทธ ๋‚ด์— ์œ„์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • audio๋Š” noscript ์ƒ์œ„ ํƒœ๊ทธ ๋‚ด์— ์œ„์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • noscript๋Š” body ์ƒ์œ„ ํƒœ๊ทธ ๋‚ด์— ์œ„์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ณ ์œ  ํƒœ๊ทธ ์ค‘๋ณต

์ฝ”๋“œ DUPLICATE_UNIQUE_TAG
ํ˜•์‹ "The tag '%1' appears more than once in the document."
ํ•ด๊ฒฐ์ฑ… AMP ๋ฌธ์„œ์—์„œ ์ค‘๋ณต๋œ ํƒœ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํƒœ๊ทธ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •ํ™•ํžˆ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์ค‘๋ณต์ด ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ณ ์œ  ํƒœ๊ทธ๋ฅผ ๋‚˜์—ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • <doctype html>
  • <html amp>
  • <head>
  • <link rel=canonical href=...>
  • <link rel=amphtml href=...>
  • <meta charset="utf-8">
  • <meta viewport>
  • <style amp-custom>
  • <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
  • <body>
  • <script src="https://cdn.ampproject.org/v0.js">

์Šคํƒ€์ผ ๋ฐ ๋ ˆ์ด์•„์›ƒ ์˜ค๋ฅ˜

์Šคํƒ€์ผ๊ณผ ๋ ˆ์ด์•„์›ƒ ์˜ค๋ฅ˜๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์— AMP์—์„œ ์Šคํƒ€์ผ๋ง๊ณผ ๋ ˆ์ด์•„์›ƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. AMP ํŽ˜์ด์ง€๋Š” HTML ํŽ˜์ด์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— HTML ํŽ˜์ด์ง€์™€ ์Šคํƒ€์ผ๋ง์ด ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŽ˜์ด์ง€๊ฐ€ ๋นจ๋ฆฌ ๋กœ๋“œ๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉฐ AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐ AMP ํƒœ๊ทธ์—๋Š” AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์— ์ •์˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ supported_layouts ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ ˆ์ด์•„์›ƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ ์‚ฌ์ „ ์ •์˜๋œ ๋ ˆ์ด์•„์›ƒ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ€์ผ์‹œํŠธ๊ฐ€ ๋„ˆ๋ฌด ๊ธด ๊ฒฝ์šฐ

์ฝ”๋“œ STYLESHEET_TOO_LONG
ํ˜•์‹ ''style' ํƒœ๊ทธ์— ์ง€์ •๋œ ์ž‘์„ฑ์ž ์Šคํƒ€์ผ์‹œํŠธ๊ฐ€ ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค. %1๋ฐ”์ดํŠธ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋‚˜ ํ•œ๋„๋Š” %2๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.'
ํ•ด๊ฒฐ์ฑ… ์Šคํƒ€์ผ์‹œํŠธ ํฌ๊ธฐ๋ฅผ 75,000๋ฐ”์ดํŠธ ๋ฏธ๋งŒ์œผ๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ์—์„œ <style amp-custom> ๋‚ด์˜ ์Šคํƒ€์ผ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ–ˆ์„ ๋•Œ 50,000๋ฐ”์ดํŠธ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

CSS ๊ตฌ๋ฌธ ์˜ค๋ฅ˜

์ฝ”๋“œ CSS_SYNTAX
ํ˜•์‹ "CSS syntax error in tag '%1' - %2."
ํ•ด๊ฒฐ์ฑ… CSS ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์ง€์ •๋œ ํƒœ๊ทธ์— CSS ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์„ ์•Œ ์ˆ˜ ์—†๋‹ค๋ฉด csslint ๋“ฑ์˜ ์˜จ๋ผ์ธ CSS ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด CSS๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํŠน์ • ๊ทœ์น™์˜ CSS ๊ตฌ๋ฌธ ์˜ค๋ฅ˜

์ฝ”๋“œ CSS_SYNTAX_INVALID_AT_RULE
ํ˜•์‹ "CSS syntax error in tag '%1' - saw invalid at rule '%2'."
ํ•ด๊ฒฐ์ฑ… ํ•ด๋‹น CSS ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” AMP์—์„œ ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™๋งŒ์ด ํ—ˆ์šฉ๋˜๋Š” CSS ๋‚ด @ ๊ทœ์น™์„ ๋งํ•ฉ๋‹ˆ๋‹ค. AMP ์‚ฌ์–‘๋„ ์ฐธ์กฐํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด @import๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์œ ํšจ์„ฑ ์˜ค๋ฅ˜๋Š” ์ž˜๋ชป๋œ ๊ทœ์น™์ด ๋ฌด์—‡์ธ์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ๋ ค ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ทœ์น™์„ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์•”์‹œ๋œ ๋ ˆ์ด์•„์›ƒ์„ AMP ํƒœ๊ทธ๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š์Œ

์ฝ”๋“œ IMPLIED_LAYOUT_INVALID
ํ˜•์‹ "The implied layout '%1' is not supported by tag '%2'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์— ์˜ฌ๋ฐ”๋ฅธ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” AMP ํƒœ๊ทธ์— ํŠน์ • ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋„ˆ๋น„, ๋†’์ด, ํฌ๊ธฐ์— ์˜ํ•ด ์•”์‹œ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ์ด ์ง€์›๋˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์—์„œ ํƒœ๊ทธ์˜ supported_layout ๊ฐ’์„ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‹ค์ œ ๋ ˆ์ด์•„์›ƒ ๋™์ž‘์€ layout ์†์„ฑ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋ ˆ์ด์•„์›ƒ ์ œ์–ด ๋ฐฉ๋ฒ• ๋ฐ AMP HTML ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ฐธ๊ณ : ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  width ๋ฐ height ๊ฐ’์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ CONTAINER๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. CONTAINER๋Š” ์–ด๋– ํ•œ AMP ํƒœ๊ทธ์—์„œ๋„ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. CONTAINER๊ฐ€ ์•„๋‹Œ ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ width ๋˜๋Š” height ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค.

์•”์‹œ์  ๋ ˆ์ด์•„์›ƒ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ

์ฝ”๋“œ ATTR_DISALLOWED_BY_IMPLIED_LAYOUT
ํ˜•์‹ "The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์†์„ฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” AMP ํƒœ๊ทธ์— ํŠน์ • ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์•”์‹œ์  ๋ ˆ์ด์•„์›ƒ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ ์œ ํ˜•๋ณ„๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์€ AMP HTML ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ ์‚ฌ์–‘์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

AMP ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋ ˆ์ด์•„์›ƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ

์ฝ”๋“œ SPECIFIED_LAYOUT_INVALID
ํ˜•์‹ "The specified layout '%1' is not supported by tag '%2'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์—์„œ ์ง€์›ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ํƒœ๊ทธ์— ์ง€์ •๋œ ๋ ˆ์ด์•„์›ƒ์ด ์ง€์›๋˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์—์„œ ํƒœ๊ทธ์˜ supported_layout ๊ฐ’์„ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‹ค์ œ ๋ ˆ์ด์•„์›ƒ ๋™์ž‘์€ layout ์†์„ฑ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋ ˆ์ด์•„์›ƒ ์ œ์–ด ๋ฐฉ๋ฒ• ๋ฐ AMP HTML ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ง€์ •๋œ ๋ ˆ์ด์•„์›ƒ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ

์ฝ”๋“œ ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT
ํ˜•์‹ "The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."
ํ•ด๊ฒฐ์ฑ… ํƒœ๊ทธ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์†์„ฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” AMP ํƒœ๊ทธ์— ํŠน์ • ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ–ˆ๋Š”๋ฐ ๋ ˆ์ด์•„์›ƒ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ ์œ ํ˜•๋ณ„๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์€ AMP HTML ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ ์‚ฌ์–‘์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ ๊ฐ’์ด ์ž˜๋ชป๋จ

์ฝ”๋“œ ATTR_VALUE_REQUIRED_BY_LAYOUT
ํ˜•์‹ "Invalid value '%1' for attribute '%2' in tag '%3' - for layout '%4', set the attribute '%2' to value '%5'."
ํ•ด๊ฒฐ์ฑ… ์†์„ฑ์„ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์†์„ฑ ๊ฐ’์ด ์ง€์ •๋œ ๋ ˆ์ด์•„์›ƒ์— ๋งž์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋ ˆ์ด์•„์›ƒ์˜ ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ์ˆ™์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ์„ fixed-height์œผ๋กœ ์„ค์ •ํ•˜๊ณ  height์™€ width ์ˆ˜์น˜๋ฅผ ํฌํ•จํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. fixed-height ๋ ˆ์ด์•„์›ƒ์€ height ๊ฐ’์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ width ์†์„ฑ์€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ auto๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ์—์„œ ATTR_VALUE_REQUIRED_BY_LAYOUT์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋„ˆ๋น„ ๋ฐ ๋†’์ด ๋‹จ์œ„ ๋ถˆ์ผ์น˜

์ฝ”๋“œ INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT
ํ˜•์‹ "Inconsistent units for width and height in tag '%1' - width is specified in '%2' whereas height is specified in '%3'."
ํ•ด๊ฒฐ์ฑ… ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ์ผ๊ด€๋œ ๋‹จ์œ„๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

layout=fixed์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋„ˆ๋น„์™€ ๋†’์ด ์†์„ฑ์€ ๋™์ผํ•œ ๋‹จ์œ„๋กœ ํ‘œํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋‹จ์œ„๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด <amp-img src="" layout="responsive" width="42px" height="42rem">์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:

'ํƒœ๊ทธ 'amp-img ์˜ ๋„ˆ๋น„์™€ ๋†’์ด ๋‹จ์œ„๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ˆ๋น„๋Š” 'px'๋กœ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๋†’์ด๋Š” 'rem'์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.'

ํ…œํ”Œ๋ฆฟ ์˜ค๋ฅ˜

AMP ํƒœ๊ทธ ๋‚ด ๊ตฌ๋ฌธ์ด amp-mustache ๋“ฑ์˜ ํ…œํ”Œ๋ฆฟ์„ ํฌํ•จํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด AMP ํŽ˜์ด์ง€๋Š” ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ํŒŒ์ผ์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ์— ํ…œํ”Œ๋ฆฟ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์†Œ์Šค ํŒŒ์ผ์— ํ…œํ”Œ๋ฆฟ์„ ํฌํ•จํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. CSS ํ”„๋ฆฌํ”„๋กœ์„ธ์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์†์„ฑ์— ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ ํฌํ•จ

์ฝ”๋“œ TEMPLATE_IN_ATTR_NAME
ํ˜•์‹ "Mustache template syntax in attribute name '%1' in tag '%2'."
ํ•ด๊ฒฐ์ฑ… ์†์„ฑ์—์„œ Mustache ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๊ฐ€ ์†์„ฑ ๊ฐ’์—์„œ Mustache ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ์— ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ ํฌํ•จ

์ฝ”๋“œ UNESCAPED_TEMPLATE_IN_ATTR_VALUE
ํ˜•์‹ "The attribute '%1' in tag '%2' is set to '%3', which contains unescaped Mustache template syntax."
ํ•ด๊ฒฐ์ฑ… Mustache ํ…œํ”Œ๋ฆฟ์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๊ฐ€ ์†์„ฑ ๊ฐ’์—์„œ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ Mustache ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ์— ํ…œํ”Œ๋ฆฟ ๋ถ€๋ถ„ ํฌํ•จ

์ฝ”๋“œ TEMPLATE_PARTIAL_IN_ATTR_VALUE
ํ˜•์‹ "The attribute '%1' in tag '%2' is set to '%3', which contains a Mustache template partial."
ํ•ด๊ฒฐ์ฑ… Mustache ๋ถ€๋ถ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๊ฐ€ ์†์„ฑ ๊ฐ’์—์„œ Mustache ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ง€์› ์ค‘๋‹จ ์˜ค๋ฅ˜

์ง€์› ์ค‘๋‹จ๋œ ํƒœ๊ทธ

์ฝ”๋“œ DEPRECATED_TAG
ํ˜•์‹ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์•„์ง ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ง€์› ์ค‘๋‹จ๋œ ํƒœ๊ทธ ์—†์Œ).
ํ•ด๊ฒฐ์ฑ… ์ง€์› ์ค‘๋‹จ๋œ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ ๋Š” ์ด์ „์— ์œ ํšจํ–ˆ๋˜ AMP ํƒœ๊ทธ๊ฐ€ AMP ๋ฌธ์„œ์—์„œ ๋ฐœ๊ฒฌ๋˜์—ˆ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฝ๊ณ ์ผ ๋ฟ์ด๋ฉฐ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” AMP ๋ฌธ์„œ๋„ ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ง€์› ์ค‘๋‹จ๋œ ํƒœ๊ทธ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ๊ณ ๋Š” ํ–ฅํ›„์— ์ง€์› ์ค‘๋‹จ๋œ ํƒœ๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ง€์› ์ค‘๋‹จ๋œ ์†์„ฑ

์ฝ”๋“œ DEPRECATED_ATTR
ํ˜•์‹ "The attribute '%1' in tag '%2' is deprecated - use '%3' instead."
ํ•ด๊ฒฐ์ฑ… ์ง€์› ์ค‘๋‹จ๋œ ์†์„ฑ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ ๋Š” ์ด์ „์— ์œ ํšจํ–ˆ๋˜ AMP ์†์„ฑ์ด AMP ๋ฌธ์„œ์—์„œ ๋ฐœ๊ฒฌ๋˜์—ˆ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฝ๊ณ ์ผ ๋ฟ์ด๋ฉฐ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” AMP ๋ฌธ์„œ๋„ ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์‚ฌ์–‘์—์„œ deprecation์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ AMP ํƒœ๊ทธ๋ณ„๋กœ ์ง€์› ์ค‘๋‹จ๋œ ์†์„ฑ์„ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.