AMP

Validate AMP pages

๋™์˜์ƒ์„ ์‹œ์ฒญํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ต์…˜์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

AMP์˜ ์ฃผ์š” ๊ฐ•์ ์€ ํŽ˜์ด์ง€ ์†๋„๋ฅผ ํ–ฅ์ƒํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ–ฅ์ƒ๋œ ํŽ˜์ด์ง€ ์†๋„์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Twitter, Instagram ๋˜๋Š” Google Search์™€ ๊ฐ™์€ ํƒ€์‚ฌ์—์„œ๋„ ๋ถ€๋‹ด ์—†์ด ๋”์šฑ ํฅ๋ฏธ๋กญ๊ฒŒ ์‚ฌ์šฉ์ž์—๊ฒŒ AMP ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํŽ˜์ด์ง€๊ฐ€ ์œ ํšจํ•œ AMP์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

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

AMP ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AMP ๋ฌธ์„œ๊ฐ€ ํƒ€์‚ฌ ํ”Œ๋žซํผ์—์„œ ๊ฒ€์ƒ‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ์ฝ˜์†”

AMP ๊ฒ€์‚ฌ๊ธฐ๋Š” AMP JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋ฏ€๋กœ ๋ชจ๋“  AMP ํŽ˜์ด์ง€์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ AMP ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. URL์— "#development=[1,actions,amp,amp4ads,amp4email]"๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด http://localhost:8000/released.amp.html#development=1๋Š” AMP ํ˜•์‹์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ธฐ์กด์˜ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ http://localhost:8000/released.amp.html#development=amp4email URL์€ ์ด๋ฉ”์ผ์šฉ AMP ์‚ฌ์–‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. Chrome DevTools ์ฝ˜์†”์„ ์—ด๊ณ  ์œ ํšจ์„ฑ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ฝ˜์†”์˜ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์›น ์ธํ„ฐํŽ˜์ด์Šค

AMP ๊ฒ€์‚ฌ๊ธฐ๋Š” validator.ampproject.org์—์„œ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํŽ˜์ด์ง€์˜ HTML ์†Œ์Šค์™€ ํ•จ๊ป˜ ์ธ๋ผ์ธ์œผ๋กœ ํ‘œ์‹œ๋œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋Œ€ํ™”ํ˜• ํŽธ์ง‘๊ธฐ์ด๋ฉฐ ๋Œ€ํ™”ํ˜• ์œ ํšจ์„ฑ ์žฌ๊ฒ€์‚ฌ ์‹œ HTML ์†Œ์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ

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

AMP ํŽ˜์ด์ง€ ๋‚ด์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์•„์ด์ฝ˜์ด ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
AMP ํŽ˜์ด์ง€ ๋‚ด์— ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์•„์ด์ฝ˜์ด ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฒฝ๊ณ ์˜ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
AMP๋Š” ์•„๋‹ˆ์ง€๋งŒ AMP ๋ฒ„์ „์ด ์žˆ๋Š” ํŽ˜์ด์ง€์ธ ๊ฒฝ์šฐ ๋งํฌ ์•„์ด์ฝ˜๊ณผ ํ•จ๊ป˜ ์•„์ด์ฝ˜์ด ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ํด๋ฆญํ•˜๋ฉด AMP ๋ฒ„์ „์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

AMP ๊ฒ€์‚ฌ๊ธฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์€ Chrome ๋ฐ Opera์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI์šฉ NPM ํŒจํ‚ค์ง€

amphtml-validator ๋˜๋Š” gulp-amphtml-validator(Gulp ํ”Œ๋Ÿฌ๊ทธ์ธ) ๋“ฑ์˜ AMP ๊ฒ€์‚ฌ๊ธฐ NPM ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AMP ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ผ๋ถ€๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AMP ๊ฒ€์‚ฌ๊ธฐ NPM ํŒจํ‚ค์ง€๋กœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์˜ AMP ํŽ˜์ด์ง€์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์˜ˆ์•ฝ๋œ ์ž‘์—…์— ์‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ : AMP HTML ํŒŒ์ผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์ด ์˜ˆ์—์„œ๋Š” amphtml-validator NPM ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AMP HTML ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ƒํƒœ๋Š” ์ฝ˜์†”๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

'use strict';
var amphtmlValidator = require('amphtml-validator');
var fs = require('fs');

amphtmlValidator.getInstance().then(function (validator) {
  var input = fs.readFileSync('index.html', 'utf8');
  var result = validator.validateString(input);
  (result.status === 'PASS' ? console.log : console.error)(result.status);
  for (var ii = 0; ii < result.errors.length; ii++) {
    var error = result.errors[ii];
    var msg =
      'line ' + error.line + ', col ' + error.col + ': ' + error.message;
    if (error.specUrl !== null) {
      msg += ' (see ' + error.specUrl + ')';
    }
    (error.severity === 'ERROR' ? console.error : console.warn)(msg);
  }
});
์˜ˆ: Gulp ์ž‘์—…์„ ํ™œ์šฉํ•œ AMP HTML ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์ด ์˜ˆ์—์„œ๋Š” ๋ชจ๋“  AMP HTML ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” Gulp ์ž‘์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. AMP ์œ ํšจ์„ฑ ํ‰๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๋ฉฐ ์˜ค๋ฅ˜ ์ฝ”๋“œ (1)์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

const gulp = require('gulp');
const gulpAmpValidator = require('gulp-amphtml-validator');

const paths = {
  src: 'src/*.html',
};

gulp.task('amphtml:validate', () => {
  return gulp
    .src(paths.src)
    .pipe(gulpAmpValidator.validate())
    .pipe(gulpAmpValidator.format())
    .pipe(gulpAmpValidator.failAfterError());
});

gulp.task('default', ['amphtml:validate'], function () {});

๋ช…๋ น์ค„ ๋„๊ตฌ

AMP HTML ๊ฒ€์‚ฌ๊ธฐ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AMP HTML ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ:

  1. ์‹œ์Šคํ…œ์— ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž 'npm'์ด ํฌํ•จ๋œ Node.js๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. npm install -g amphtml-validator ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ AMP HTML ๊ฒ€์‚ฌ๊ธฐ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์‹ค์ œ AMP HTML ํŽ˜์ด์ง€์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ amphtml-validator https://amp.dev/
https://amp.dev/: PASS

๋‹น์—ฐํžˆ ์ด ํŽ˜์ด์ง€๋Š” ์œ ํšจํ•œ AMP HTML์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€์ธ several_errors.html์—์„œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. amphtml-validator ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŽ˜์ด์ง€์˜ URL ๋˜๋Š” ๋กœ์ปฌ ํŒŒ์ผ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. several_errors.html์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ amphtml-validator several_errors.html
several_errors.html:23:2 The attribute 'charset' may not appear in tag 'meta name= and content='.
several_errors.html:26:2 The tag 'script' is disallowed except in specific forms.
several_errors.html:32:2 The mandatory attribute 'height' is missing in tag 'amp-img'. (see /ko/documentation/components/amp-img/)
several_errors.html:34:2 The attribute 'width' in tag 'amp-ad' is set to the invalid value '100%'. (see /ko/documentation/components/amp-ad/)
...

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์€ ํŒŒ์ผ ์ด๋ฆ„, ํ–‰, ์—ด, ๋ฉ”์‹œ์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ข…์ข… AMP HTML ์ฐธ์กฐ ๋งํฌ๊ฐ€ ๋’ค์— ์ด์–ด์ง‘๋‹ˆ๋‹ค. Emacs(์ปดํŒŒ์ผ ๋ช…๋ น์–ด์™€ ํŽธ์ง‘ ๋ชจ๋“œ๊ฐ€ ์žˆ์Œ)๋ฅผ ํฌํ•จํ•œ ์ผ๋ถ€ ํŽธ์ง‘๊ธฐ๋Š” ์ด ํ˜•์‹์„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›๋ณธ ํŒŒ์ผ์—์„œ ์˜ค๋ฅ˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋‚˜๋งŒ์˜ AMP ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋จผ์ € minimum_valid_amp.html๋กœ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.

$ amphtml-validator minimum_valid_amp.html
minimum_valid_amp.html: PASS

๋ช…๋ น์ค„ ๋„๊ตฌ๋Š” ์ƒ‰์ƒ ์‚ฌ์šฉ ํ•ด์ œ, JSON ์ถœ๋ ฅ ์ธ์‡„, ํŠน์ • ๋ฒ„์ „์˜ ๊ฒ€์‚ฌ๊ธฐ Javascript ์‹คํ–‰(๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒŒ์‹œ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•จ) ๋“ฑ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

$ amphtml-validator --help

Usage: index [options] <fileOrUrlOrMinus...>

Validates the files or urls provided as arguments. If "-" is
specified, reads from stdin instead.

Options:

    -h, --help                  output usage information
    -V, --version               output the version number
    --validator_js <fileOrUrl>  The Validator Javascript.
      Latest published version by default, or
      dist/validator_minified.js (built with build.py)
      for development.
    --format <color|text|json>  How to format the output.
      "color" displays errors/warnings/success in
              red/orange/green.
      "text"  avoids color (e.g., useful in terminals not
              supporting color).
      "json"  emits json corresponding to the ValidationResult
              message in validator.proto.

ํŽ˜์ด์ง€๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

AMP ๊ฒ€์‚ฌ๊ธฐ์˜ ์šฉ๋„๋Š” ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ํŽธ์˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Twitter ๋˜๋Š” Google๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๋‚ด AMP ํŽ˜์ด์ง€๋ฅผ ํ”Œ๋žซํผ์˜ ์ฝ˜ํ…์ธ  ๋˜๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด ์„œ๋ฒ„์— ์ง์ ‘ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ๋Œ€์‹  ํŽ˜์ด์ง€๋ฅผ ์บ์‹œํ•˜๊ณ  ์ „ ์„ธ๊ณ„์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๋ฅผ ํ•œ์ธต ๋” ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฌด๋ฃŒ ์„œ๋น„์Šค์ธ Google AMP ์บ์‹œ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

AMP ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์„œ๋น„์Šค์—์„œ ํŽ˜์ด์ง€์˜ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•œ ๊ฒฝ์šฐ ํƒ€์‚ฌ ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ฐฐํฌํ•˜์ง€ ๋ชปํ•˜๋ฉฐ Google AMP ์บ์‹œ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์บ์‹œ์˜ ์†๋„์ƒ์˜ ์žฅ์ ์„ ์žƒ๊ฒŒ ๋  ๋ฟ ์•„๋‹ˆ๋ผ ํŽ˜์ด์ง€๊ฐ€ ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจ์„ฑ ์˜ค๋ฅ˜๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋‚˜์š”?

๋Œ€๋ถ€๋ถ„์˜ ์œ ํšจ์„ฑ ์˜ค๋ฅ˜๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ HTML ํƒœ๊ทธ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

<img src="cat.png">

์ด AMP ์œ ํšจ์„ฑ ์˜ค๋ฅ˜์˜ ์›์ธ์€ ์•„๋ž˜์˜ ์—ฌ๋Ÿฌ ๋„๊ตฌ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ์ฝ˜์†” {amp-img0}{/amp-img0}

  • ์›น ์ธํ„ฐํŽ˜์ด์Šค

  • ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ

๊ฐ ๋„๊ตฌ๋Š” ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. HTML ๋ฌธ์„œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜(ํ–‰๊ณผ ์—ด): ์ผ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” ์ด ์œ„์น˜๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ฐ•์กฐ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฌธ์ œ๋Š” ํ–‰ 11, ์—ด 2์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํ…์ŠคํŠธ ํ–‰: ์ด ๊ฒฝ์šฐ ํ…์ŠคํŠธ๋Š” <amp-img> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ <img> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  3. ์˜ค๋ฅ˜ ๊ด€๋ จ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ: ์ด ๊ฒฝ์šฐ <amp-img> ํƒœ๊ทธ์— ๋Œ€ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์˜ค๋ฅ˜๋Š” ๋ฌธ์„œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์–‘์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋‹ค์‹œ ์ฝ์œผ๋ฉด <amp-img> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ <img> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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