ํ”„๋ก ํŠธ ์ง€์‹ ์ตํžˆ๊ธฐ HTML - 4

2023-03-23
  • web
  • study
  • front
  • HTML
์กฐํšŒ์ˆ˜ ํšŒ

ํ…์ŠคํŠธ๋งŒ ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ๋Š” ๋‹จ์กฐ๋กญ๋‹ค. ๋ฌผ๋ก  ๊ทธ๊ฒƒ์กฐ์ฐจ๋„ ์ œ๋Œ€๋กœ ๋งŒ๋“ค๊ธฐ ์–ด๋ ต๊ธฐ์— motherfucking website์™€ ๊ฐ™์€ ๊ณณ๋„ ์ƒ๊ธฐ์ง€๋งŒ, ์ด๋ฏธ์ง€์™€ ๋น„๋””์˜ค ๋“ฑ์ด ํฌํ•จ๋œ ์‚ฌ์ดํŠธ๊ฐ€ ๋” ๋ฉ‹์žˆ์–ด ๋ณด์ธ๋‹ค๋Š” ๊ฑด ๋ถ€์ธํ•  ์ˆ˜ ์—†๋‹ค.

์ด๋ฒˆ์—๋Š” HTML์—์„œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด์™€ ์ž„๋ฒ ๋”ฉ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

1. ์ด๋ฏธ์ง€

HTML์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” imgํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋‚ด๋ถ€ ๋‚ด์šฉ์ด๋‚˜ ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์—†์ง€๋งŒ src ์†์„ฑ ํ•˜๋‚˜๋Š” ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

src ์†์„ฑ์€ ์‚ฝ์ž…ํ•  ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, ์ด๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ, ์ƒ๋Œ€๊ฒฝ๋กœ, ๋˜๋Š” URL๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ด๋ฆ„๋„ ์ฝ๊ณ  SEO์— ํฌํ•จ์‹œํ‚ค๋ฏ€๋กœ ํŒŒ์ผ ์ด๋ฆ„์—๋„ ์ฃผ์˜ํ•˜์ž.

<img src="assets/profile.jpg">

1.1. alt ์†์„ฑ

img ํƒœ๊ทธ์˜ alt ์†์„ฑ์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•ด์„œ ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋Œ€์ฒด ํ…์ŠคํŠธ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” path๋‚˜ ํŒŒ์ผ๋ช…์„ ์ž˜๋ชป ์ ๊ฑฐ๋‚˜ ๋กœ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ํ‘œ์‹œ๋œ๋‹ค.

๋˜ํ•œ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๋Š” alt ์†์„ฑ์„ ์ฝ์–ด์ฃผ๋ฏ€๋กœ, ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ ํ…์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ alt ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋„์›€์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์ƒ‰ ์—”์ง„์€ alt ์†์„ฑ์„ ์ฝ์–ด์„œ SEO์— ํฌํ•จ์‹œํ‚ค๋ฏ€๋กœ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”์—๋„ ๋„์›€์ด ๋œ๋‹ค.

Lynx์™€ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ…์ŠคํŠธ๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ์ด๋Ÿฐ ๋ธŒ๋ผ์šฐ์ €์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ alt ์†์„ฑ์ด ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ alt ์†์„ฑ์—๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ€์‹  ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๋ช…์„ ๋„ฃ์–ด์ฃผ์ž.

1.2. ๊ธฐํƒ€ ์†์„ฑ

width, height ์†์„ฑ์œผ๋กœ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ HTML ์†์„ฑ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” CSS๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ˜น์€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜.

title ์†์„ฑ์œผ๋กœ ์ด๋ฏธ์ง€ ์ œ๋ชฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด๋ฏธ์ง€์— ๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„ ์‹œ ์ด๋ฏธ์ง€ ์ œ๋ชฉ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

1.3. ์บก์…˜ ๋‹ฌ๊ธฐ

์ด๋ฏธ์ง€์— ์บก์…˜์„ ๋‹ฌ ๋•Œ, div ํƒœ๊ทธ๋กœ ๊ฐ์‹ผ ํ›„ divํƒœ๊ทธ ๋‚ด๋ถ€์— img ํƒœ๊ทธ์™€ p ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŠน์ • ์ด๋ฏธ์ง€์— ์บก์…˜์„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์˜๋ฏธ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ HTML5์˜ figure์™€ figcaption ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ํƒœ๊ทธ๋Š” ์ด๋ฏธ์ง€์— ์บก์…˜์„ ๋‹ค๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

<figure>
  <img src="assets/profile.jpg">
  <figcaption>๋‚ด ํ”„๋กœํ•„ ์‚ฌ์ง„</figcaption>
</figure>

์ด๋•Œ figure ํƒœ๊ทธ๋‚ด์˜ ์š”์†Œ๊ฐ€ ๊ผญ ์ด๋ฏธ์ง€์ผ ํ•„์š”๋Š” ์—†๋‹ค. ๋™์˜์ƒ์ด๋‚˜ ํ‘œ, ์ฝ”๋“œ ๋“ฑ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก  ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์„ ๋•Œ CSS์˜ background-image ์†์„ฑ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์–ด๋„ ์ด๋ฏธ์ง€์— ์–ด๋–ค ์˜๋ฏธ๋ฅผ ํŽ˜์ด์ง€ ์ž์ฒด์—์„œ ๋ถ€์—ฌํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด๋Ÿฐ ์‹œ๋งจํ‹ฑ์„ ์œ„ํ•ด์„œ img ํƒœ๊ทธ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

2. ๋น„๋””์˜ค์™€ ์˜ค๋””์˜ค

๋น„๋””์˜ค์™€ ์˜ค๋””์˜ค๋„ HTML ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

2.1. ๋น„๋””์˜ค ํƒœ๊ทธ

<video>ํƒœ๊ทธ๋ฅผ ์“ฐ๋ฉด ๋™์˜์ƒ์„ ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํƒœ๊ทธ๋Š” src ์†์„ฑ์„ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋Š” img ํƒœ๊ทธ์—์„œ์™€ ๊ฐ™์ด ๋„ฃ์„ ๋™์˜์ƒ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

controls ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„๋””์˜ค ๋˜๊ฐ๊ธฐ, ๋ณผ๋ฅจ ์กฐ์ ˆ, ํƒ์ƒ‰ ๋“ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด์˜ ๋ชจ๋“  ์ปจํŠธ๋กค ์š”์†Œ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

<video src="assets/video.mp4" controls></video>

controls ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  JS์˜ HTMLMediaElement API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค ์š”์†Œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

video ํƒœ๊ทธ ์•ˆ์— p ํƒœ๊ทธ ๋“ฑ์„ ๋„ฃ์–ด์„œ ๋น„๋””์˜ค๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€๋น„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋น„๋””์˜ค๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ผ์ข…์˜ fallback content๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๋น„๋””์˜ค๋กœ ๊ฐ€๋Š” ๋งํฌ๋ฅผ ๋„ฃ๋Š”๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2.2. ์—ฌ๋Ÿฌ ์†Œ์Šค ์ œ๊ณตํ•˜๊ธฐ

๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ์„œ ์ง€์›ํ•˜๋Š” ๋น„๋””์˜ค ํฌ๋งท์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•œ source์˜ ๋น„๋””์˜ค๊ฐ€ ์žฌ์ƒ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ํฌ๋งท์„ ์ฐพ์•„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. source ํƒœ๊ทธ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

<video controls>
  <source src="assets/video.mp4" type="video/mp4">
  <source src="assets/video.webm" type="video/webm">
  <source src="assets/video.ogv" type="video/ogg">
</video>

์ง€๊ธˆ๊นŒ์ง€๋Š” video ํƒœ๊ทธ์˜ src ์†์„ฑ์— ๋น„๋””์˜ค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” source ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” source ํƒœ๊ทธ๋ฅผ ํ›‘์œผ๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ์ฝ”๋ฑ์„ ๊ฐ€์ง„ ์ฒซ ๋น„๋””์˜ค๋ฅผ ์ฐพ์•„ ์žฌ์ƒํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ์— ์“ธ ์ˆ˜ ์žˆ๋Š” source ํƒœ๊ทธ๋Š” picture, audio, video ํƒœ๊ทธ์— ๋ชจ๋‘ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  source ํƒœ๊ทธ์—๋Š” type ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์˜ ๋ฏธ๋””์–ด ํƒ€์ž…(MIME ํƒ€์ž…)์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋น„๋””์˜ค ์ฝ”๋ฑ ํƒ€์ž…์„ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ type ์†์„ฑ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ์ฝ”๋ฑ์„ ํ™•์ธํ•œ ํ›„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค. ์ด๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— type ์†์„ฑ์„ ๋ช…์‹œํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

2.3. video ๊ธฐํƒ€ ์†์„ฑ

๊ทธ ์™ธ์—๋„ width, height ํƒœ๊ทธ๋„ ์žˆ๋‹ค. ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋””์˜ค์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ aspect ratio๋Š” ์œ ์ง€๋œ๋‹ค. ๋งŒ์•ฝ ratio๊ฐ€ ๋‹ค๋ฅธ ๋†’์ด/๋„ˆ๋น„๋ฅผ ์ง€์ •ํ•œ๋‹ค๋ฉด ๋น„๋””์˜ค๋Š” ๊ฐ€๋กœ๋กœ ๋Š˜์–ด๋‚˜์„œ ํ™”๋ฉด์„ ์ฑ„์šธ ๊ฒƒ์ด๊ณ  ์•ˆ ์ฑ„์›Œ์ง„ ๋ถ€๋ถ„์€ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ƒ‰์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.

autoplay, loop, muted ์†์„ฑ๋„ ์žˆ๋‹ค. autoplay๋Š” ๋น„๋””์˜ค๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์ƒํ•˜๊ณ , loop๋Š” ๋น„๋””์˜ค๋ฅผ ๋ฐ˜๋ณต ์žฌ์ƒํ•˜๊ณ , muted๋Š” ์Œ์†Œ๊ฑฐํ•œ๋‹ค.

poster ์†์„ฑ์€ ๋น„๋””์˜ค๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ๋ณด์—ฌ์ค„ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค. preload๋Š” ๋ฒ„ํผ๋ง ๊ด€๋ จ ์†์„ฑ์ด๋‹ค.

2.4. ์˜ค๋””์˜ค ํƒœ๊ทธ

์˜ค๋””์˜ค ํƒœ๋„ ์—ญ์‹œ ๋น„๋””์˜ค ํƒœ๊ทธ์™€ ๋น„์Šทํ•˜๋‹ค. <audio> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋””์˜ค ํŒŒ์ผ์„ ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

<audio controls>
  <source src="assets/audio.mp3" type="audio/mpeg">
  <source src="assets/audio.ogg" type="audio/ogg">
  <!-- ์—ฌ๊ธฐ์— fallback content๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค. -->
</audio>

์˜ค๋””์˜ค ํƒœ๊ทธ๋Š” ๋ณด์—ฌ์ค„ ์‹œ๊ฐ ์ปจํ…์ธ ๊ฐ€ ์—†์œผ๋ฏ€๋กœ width, height ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ฐ™์€ ์ด์œ ๋กœ poster ์†์„ฑ๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

2.5. ๋น„๋””์˜ค์— ์ž๋ง‰ ๋„ฃ๊ธฐ

๊ท€๊ฐ€ ์ž˜ ๋“ค๋ฆฌ์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์ด๋‚˜ ์‹œ๋„๋Ÿฌ์šด ํ™˜๊ฒฝ์— ์žˆ๋Š” ์‚ฌ๋žŒ, ์˜์ƒ์˜ ์–ธ์–ด๋ฅผ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ ๊ฐ™์€ ๊ฒฝ์šฐ ์ž๋ง‰์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ์‚ฌ๋žŒ์—๊ฒŒ ์ž๋ง‰์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. webVTTํŒŒ์ผ๊ณผ track ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

webVTT ํŒŒ์ผ์€ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ž๋ง‰ ํŒŒ์ผ์ด๋‹ค. ์—ฌ๋Ÿฌ ์ค„์˜ ์ž๋ง‰ ๋ฌธ์ž์—ด๊ณผ ํ•ด๋‹น ์ž๋ง‰๋งˆ๋‹ค ์ž๋ง‰์„ ํ‘œ์‹œํ•  ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋ ์‹œ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ง‰ ์œ„์น˜ ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

<video controls>
  <source src="assets/video.mp4" type="video/mp4">
  <source src="assets/video.webm" type="video/webm">
  <source src="assets/video.ogv" type="video/ogg">
  <track src="assets/subtitles.vtt" kind="subtitles" srclang="en" label="English">
</video>

track ํƒœ๊ทธ์˜ kind ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ž๋ง‰์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. subtitles, captions, descriptions, chapters, metadata ๋“ฑ์ด ์žˆ๋‹ค.

์ž๋ง‰์€ subtitles, ์ž๋ง‰์€ captions, ์„ค๋ช…์€ descriptions, ๋‹จ์› ๊ตฌ๋ถ„์€ chapters, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” metadata ๋“ฑ์ด๋‹ค.

์ด๋•Œ .vtt ํŒŒ์ผ์€ track ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜๋Š”๋ฐ ๋ชจ๋“  source ํƒœ๊ทธ๋ณด๋‹ค ๋’ค์— ์™€์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  track ํƒœ๊ทธ์— srclang ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ž๋ง‰์˜ ์–ธ์–ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ  label ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ์ž๋ง‰์˜ ์–ธ์–ด๊ฐ€ ์–ด๋–ค ๊ฒƒ์ผ์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๊ธฐํƒ€ ์ž„๋ฒ ๋”ฉ ๊ธฐ์ˆ 

audio, video ํƒœ๊ทธ ์™ธ์—๋„ iframe, embed, object ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ๋„ ํŽ˜์ด์ง€์— ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

3.1. ๊ฐ„๋žตํ•œ ์—ญ์‚ฌ

์˜ˆ์ „์—๋Š” ์›น์‚ฌ์ดํŠธ์˜ ์ž‘์€ ๋ถ€๋ถ„์„ frame์ด๋ผ ํ•˜๊ณ , ๋ฉ”์ธ์ด ๋˜๋Š” ๋ฌธ์„œ์ธ frameset์ด๋ผ๋Š” ๋ฌธ์„œ์— frame์„ ๋„ฃ์–ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฆ‰ ํŽ˜์ด์ง€๋ฅผ frame๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ณด์•˜๋˜ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  90๋…„๋Œ€ ํ›„๋ฐ˜ Flash์˜ ๋“ฑ์žฅ์œผ๋กœ ์˜์ƒ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ฝ˜ํ…์ธ ๋ฅผ ์›น์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์•ก์…˜์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด์„œ ๋™์˜์ƒ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ณ , ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ›จ์”ฌ ๋” ์ ์€ ์šฉ๋Ÿ‰์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ํ”Œ๋ž˜์‹œ๋Š” 2000๋…„๋Œ€๋ฅผ ํ’๋ฏธํ–ˆ๋‹ค. object, embed ์š”์†Œ ๋“ฑ์„ ์ด์šฉํ•ด์„œ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ณ„๋กœ ์“ฐ์ด์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ํ”Œ๋ž˜์‹œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋“ค๋กœ ์ธํ•ด ์ธ๊ธฐ๊ฐ€ ์‚ฌ๊ทธ๋ผ๋“ค๊ณ  HTML5๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ iframe, embed, object ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์›น ํŽ˜์ด์ง€์— ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

3.2. iframe

iframe ํƒœ๊ทธ๋Š” ๋‹ค๋ฅธ HTML ํŽ˜์ด์ง€๋ฅผ ํ˜„์žฌ ํŽ˜์ด์ง€ ์•ˆ์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. iframe ํƒœ๊ทธ์˜ src ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ ์›น ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ ํŠœ๋ธŒ์—์„œ ๊ณต์œ -ํผ๊ฐ€๊ธฐ๋ฅผ ์„ ํƒํ•˜๋ฉด ๊ทธ ๋™์˜์ƒ์— ํ•ด๋‹นํ•˜๋Š” iframe ํƒœ๊ทธ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

<iframe width="560" height="315" src="https://www.youtube.com/embed/b7Pt4hHGi2I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

์ด๋ ‡๊ฒŒ ์‚ฝ์ž…๋œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋Š” ๊ฐ์ž ์ž์‹ ์˜ History๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ˜„์žฌ ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฝ์ž…๋œ ํŽ˜์ด์ง€์˜ ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์˜ˆ ๋‹ค๋ฅธ ๋ฌธ์„œ๋กœ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ํŽ˜์ด์ง€์— iframe์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์ž์›์„ ๋” ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

iframe์—๋Š” width, height, src, allowfullscreen์†์„ฑ์ด ์ฃผ๋กœ ์“ฐ์ธ๋‹ค. width, height, src์†์„ฑ์€ ๋‹น์—ฐํžˆ ๊ฐ๊ฐ ํฌ๊ธฐ์™€ ์‚ฝ์ž…ํ•  ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

์ด๋•Œ src ์†์„ฑ์˜ ๊ฒฝ์šฐ, ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ดํ›„ JS๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋” ์ค„์—ฌ ์ค€๋‹ค.

allowfullscreen์†์„ฑ์€ Fullscreen API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iframe์— ์‚ฝ์ž…๋œ ํŽ˜์ด์ง€๊ฐ€ ์ „์ฒดํ™”๋ฉด์œผ๋กœ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

๋˜ํ•œ iframe ํƒœ๊ทธ ์‚ฌ์ด์— ์‚ฝ์ž…๋œ ๋‚ด์šฉ์€ iframe ํƒœ๊ทธ๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ fallback์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค.

3.3. iframe ๋ณด์•ˆ ๋ฌธ์ œ

๋‹ค์Œ๊ณผ ๊ฐ™์ด iframe ํƒœ๊ทธ๋กœ ๋‚ด ํŽ˜์ด์ง€์— ๋„ค์ด๋ฒ„ ํŽ˜์ด์ง€๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

<iframe
  src="https://www.naver.com/"
  width="100%"
  height="500"
  allowfullscreen
>
</iframe>

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„ค์ด๋ฒ„ ํŽ˜์ด์ง€๊ฐ€ ์ œ๋Œ€๋กœ ๋กœ๋”ฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

denied

์ด๋Š” iframe์ด ํ•ด์ปค๋“ค์˜ ๊ณต๊ฒฉ ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด์ปค๋“ค์€ iframe์„ ์ด์šฉํ•˜์—ฌ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ์•…์˜์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์œ ์ถœํ•˜๊ธฐ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๊ทธ๋ฆฌ๊ณ  ์œ ๋ช…ํ•œ ํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž„๋ฒ ๋“œํ•˜๊ณ  ์‹ถ์–ดํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉํ•˜๋ฉด ์„œ๋ฒ„๋น„๊ฐ€ ๋” ๋งŽ์ด ๋“ค ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฝ์ž…ํ•˜๊ณ , ์ €์ž‘๊ถŒ์— ์ฃผ์˜ํ•˜์ž.

๊ทธ ์™ธ์— ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์€ HTTPS ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์žˆ๊ณ  ์ข€๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ๋งŒํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

3.3.1. sandbox ํŠน์„ฑ ์‚ฌ์šฉํ•˜๊ธฐ

iframe์—๋Š” sandbox ํŠน์„ฑ์ด ์žˆ๋‹ค. ์ด๋Š” ์‚ฝ์ž…๋œ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ์ž‘์—…๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

sandbox ํŠน์„ฑ์ด ์—†๋Š” ์ฝ˜ํ…์ธ ๋Š” JS๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์ฐฝ์„ ๋„์šฐ๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•…์˜์  ๊ณต๊ฒฉ ๊ฐ€๋Šฅ์„ฑ์ด ๋Š˜์–ด๋‚œ๋‹ค.

sandbox ํŠน์„ฑ์€ ๋ฌธ์ž์—ด์ธ๋ฐ ์ด๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์ž‘์—…์„ ์ง€์ •ํ•œ๋‹ค. ๋งŒ์•ฝ sandbox=""๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ allow-modals๋ฅผ sandbox ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด iframe์œผ๋กœ ์‚ฝ์ž…ํ•œ ํŽ˜์ด์ง€์—์„œ ๋ชจ๋‹ฌ ์ฐฝ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด์™ธ์—๋„ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ iframe sandbox ์†์„ฑ์„ ํ†ตํ•ด ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ ์ฃผ์˜ํ•  ์ ์€ allow-scripts์™€ allow-same-origin ์˜ต์…˜์„ sandbox์— ๋™์‹œ์— ์ ์šฉํ•  ์‹œ iframe ์ฝ˜ํ…์ธ ๋Š” same origin policy๋ฅผ ์šฐํšŒํ•˜์—ฌ sandbox ํŠน์„ฑ์„ ํ•ด์ œํ•˜๋Š” JS๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋‘ ์˜ต์…˜์€ ๋™์‹œ์— ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

3.3.2. CSP ์ง€์‹œ์–ด ์„ค์ •

CSP๋Š” XSS ๊ณต๊ฒฉ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์œ„ํ˜‘์œผ๋กœ๋ถ€ํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ ๊ณ„์ธต์ด๋‹ค. ์ด๋Š” HTML ๋ฌธ์„œ ๋ณด์•ˆ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ HTTP ํ—ค๋”๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

iframe์˜ ๋ณด์•ˆ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” CSP ์„ค์ •์„ ํ†ตํ•ด X-Frame-Options ํ—ค๋”๋ฅผ ์ „์†กํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ํ—ค๋”๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ iframe์œผ๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

๋งŒ์•ฝ deny๋กœ ์„ค์ •ํ•  ์‹œ ๊ฐ™์€ ์‚ฌ์ดํŠธ ๋‚ด์—์„œ์˜ frame ์ ‘๊ทผ๋„ ๋ง‰๋Š”๋‹ค. sameorigin์œผ๋กœ ์„ค์ •ํ•  ์‹œ ๊ฐ™์€ ์‚ฌ์ดํŠธ ๋‚ด์—์„œ๋งŒ frame ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์ ์ ˆํ•œ X-Frame-Options ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๋ฉด iframe ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/

์ด๋Ÿฌํ•œ CSP ์„ค์ •์€ meta ์š”์†Œ๋ฅผ ํ†ตํ•ด์„œ๋„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํŠนํžˆ ์œ„์—์„œ ๋‹ค๋ฃฌ X-Frame-Options ํ—ค๋”์˜ ๊ฒฝ์šฐ meta ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ CSP ์ •์ฑ…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.

๋งŒ์•ฝ nginx๋ผ๋ฉด http, server, location ์„ค์ •์— ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋Š” ์‹์ด๋‹ค.

add_header X-Frame-Options sameorigin;

3.4. embed, object

iframe์€ ๋‹ค๋ฅธ HTMLํŽ˜์ด์ง€๋ฅผ ํŽ˜์ด์ง€ ๋‚ด์— ์‚ฝ์ž…ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ–ˆ๋‹ค. embed, object๋Š” PDF์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์ฝ˜ํ…์ธ ๋ฅผ ํŽ˜์ด์ง€์— ํฌํ•จํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. ๋‹จ ์ด ์š”์†Œ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋Š” ์•Š๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

<embed src="./dummy.pdf" type="application/pdf" width="100" height="200" />
<object data="./dummy.pdf" type="application/pdf" width="100" height="200">
  <p>๋Œ€์ฒด ํ…์ŠคํŠธ</p>
</object>

object ํƒœ๊ทธ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŽ˜์ด์ง€์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ๋” ๋งŽ์ด ์“ฐ์ธ๋‹ค. ๋˜ํ•œ embed๋Š” ๋Œ€์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ๋„ฃ์„ ๋ฐฉ๋ฒ•์ด ์—†์ง€๋งŒ object๋Š” ํƒœ๊ทธ ์‚ฌ์ด์— ๋Œ€์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋Œ€์ฒด ์ฝ˜ํ…์ธ ๋„ ์ง€์›ํ•œ๋‹ค.

๋‹จ embed ํƒœ๊ทธ๋งŒ ์ง€์›๋˜๋Š” ๋‚ก์€ ๋ธŒ๋ผ์šฐ์ €๋„ ์žˆ์œผ๋ฏ€๋กœ ๋งŒ์•ฝ ์ •๋ง ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€์‘ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‘ ํƒœ๊ทธ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

<object type="application/pdf"
    data="/media/examples/In-CC0.pdf"
    >
    <embed type="application/pdf"
    src="/media/examples/In-CC0.pdf">
</object>

4. ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ

์›น์—์„œ ์“ฐ์ด๋Š” 2๊ฐ€์ง€ ์ด๋ฏธ์ง€๋Š” ํ”ฝ์…€๋“ค์˜ ๊ฒฉ์ž ๊ตฌ์กฐ๋กœ ์ •์˜๋˜๋Š” ๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€์™€, ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๊ณ  ๋ Œ๋”๋ง๋ ์ง€๊ฐ€ ์ •์˜๋œ ๋ชจ์–‘๊ณผ ๊ฒฝ๋กœ ์ •์˜๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๋ฒกํ„ฐ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋‹ค.

๋ฒกํ„ฐ ์ด๋ฏธ์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ ๋˜‘๊ฐ™์ด ๋ณด์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”ฝ์…€๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค๋งŒ ์ €์žฅํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์šฉ๋Ÿ‰์ด ์ž‘๋‹ค.

4.1. SVG

SVG๋Š” Scalable Vector Graphics์˜ ์•ฝ์ž๋กœ 2์ฐจ์› ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ์„ XML๋กœ ์„œ์ˆ ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค.

ํ…์ŠคํŠธ๋ฅผ HTML๋กœ ๊ธฐ์ˆ ํ•˜๋“ฏ์ด ๊ทธ๋ž˜ํ”ฝ์„ SVG๋กœ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. <circle> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์›์„ ๊ทธ๋ฆฌ๊ณ  <rect> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๋“ฑ์ด๋‹ค. ์—ฌ๊ธฐ์—๋„ ์—ฌ๋Ÿฌ ํƒœ๊ทธ๋“ค์ด ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. SVG์— ๊ด€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋Š” ์—ฌ๊ธฐ์„œ ์–ป์ž.

<svg width="100%" height="100%">
  <rect width="100%" height="100%" fill="black" />
  <circle cx="150" cy="100" r="90" fill="red" />
</svg>

๊ฐ„๋‹จํ•œ SVG๋Š” ์œ„์™€ ๊ฐ™์ด ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฌ๋ ค๋ฉด SVG๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๊ฑด ๋งค์šฐ ์–ด๋ ต๋‹ค. ๊ทธ๋Ÿด ๋• Inkscape์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ SVG๋Š” ์‰ฝ๊ฒŒ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๊ณ  ๋งŒ๋“ค๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค. ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ์“ฐ๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

4.2. SVG๋ฅผ ํŽ˜์ด์ง€์— ๋„ฃ๊ธฐ

SVG๋ฅผ ํŽ˜์ด์ง€์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

4.2.1. img ํƒœ๊ทธ ์ด์šฉ

img ํƒœ๊ทธ์˜ src ์†์„ฑ์— svgํŒŒ์ผ์„ ๋„ฃ์Œ์œผ๋กœ์จ ํŽ˜์ด์ง€์— SVG๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ์ต์ˆ™ํ•œ ๋ฌธ๋ฒ•์ด๋ผ ์‰ฝ๊ณ  alt text ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ํ•˜์ดํผ๋งํฌ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ JS๋กœ ์ œ์–ดํ•  ์ˆ˜ ์—†๊ณ  CSS๋ฅผ ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋ฉด SVG ์ฝ”๋“œ์— ์ธ๋ผ์ธ CSS๋ฅผ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. SVG ํŒŒ์ผ์— ์™ธ๋ถ€ CSS ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฌด์‹œ๋œ๋‹ค. ๊ฐ™์€ ์ด์œ ๋กœ SVG์— ์˜์‚ฌ ํด๋ž˜์Šค CSS(:hover ๋“ฑ)๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๋ช‡๋ช‡ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ SVG๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋ฐ ์ด ๊ฒฝ์šฐ srcset ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋งŒ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋”ฐ๋ผ์„œ SVG๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” srcset ์†์„ฑ์˜ SVG ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ , ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” src ์†์„ฑ์˜ PNG ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.

<img src="image.png" srcset="image.svg" alt="SVG image" />

css์˜ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ๋„ svg๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, img ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ฐ™์ด JS๋กœ svg๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค.

4.2.2. inline SVG

SVG๋ฅผ ํŽ˜์ด์ง€์— ์ง์ ‘ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. svg ํŒŒ์ผ์„ ํ…์ŠคํŠธ ์—๋””ํ„ฐ๋กœ ์—ด์–ด์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•œ ๋‹ค์Œ HTML ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด HTTP ์š”์ฒญ์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์„œ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  svg ์š”์†Œ์— class, id๋“ฑ์„ ํ†ตํ•ด ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. inline SVG๋Š” CSS ์ƒํ˜ธ์ž‘์šฉ๊ณผ CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์„ svg์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ HTML ํŒŒ์ผ ๋‚ด์— SVG ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ , ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ svg ํŒŒ์ผ ์บ์‹ฑ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

4.2.3. iframe ํƒœ๊ทธ ์ด์šฉ

iframe ํƒœ๊ทธ์˜ src ์†์„ฑ์— svg ํŒŒ์ผ์„ ๋„ฃ์Œ์œผ๋กœ์จ ํŽ˜์ด์ง€์— SVG๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ SVG์™€ ์›นํŽ˜์ด์ง€๊ฐ€ ๊ฐ™์€ origin์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ SVG์— JS๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๊ณ  iframe์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” SVG ์ง€์›์ด ์žˆ์–ด๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ iframe ํƒœ๊ทธ๋ฅผ ์จ์„œ svg๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฑด ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค.

5. ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€

๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ์Šคํฌ๋ฆฐ์ด ๋“ฑ์žฅํ•จ์— ๋”ฐ๋ผ์„œ, ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์— ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ”ฝ์…€ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์กŒ๋‹ค.

srcset, sizes, pictureํƒœ๊ทธ ๋“ฑ์„ ๋‹ค๋ฃฐ ํ…๋ฐ, ์ด๋Š” ๋ชจ๋‘ ์ตœ์‹  ๋ฐ์Šคํฌํ†ฑ/๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋œ๋‹ค.(IE์ œ์™ธ)

๋ฌผ๋ก  CSS๋ฅผ ์ด์šฉํ•ด์„œ๋„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” HTML๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ ๋ณด์ž.

5.1. ํ•ด์ƒ๋„ ์ „ํ™˜

ํ™”๋ฉด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ํ•ด์ƒ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ํ™”๋ฉด์˜ ํ”ฝ์…€ ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•œ๋‹ค.

<img
  srcset="image-320w.jpg 320w, image-480w.jpg 480w, image-768w.jpg 768w"
  sizes="(max-width:320px) 280px,
(max-width:480px) 440px,
800px"
  src="image.jpg"
  alt="๊ธฐ๋ณธ ์ด๋ฏธ์ง€"
/>

srcset, sizes ์†์„ฑ์€ ์‰ผํ‘œ๋กœ ๊ฐ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ด ์ ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐ’๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…๋  ์ˆ˜ ์žˆ๋‹ค.

srcset์˜ ๊ฐ’๋“ค, image-320w.jpg 320w์™€ ๊ฐ™์€ ๊ฐ’์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช…๊ณผ ์ด๋ฏธ์ง€์˜ ๊ณ ์œ  ํ”ฝ์…€ ๋„ˆ๋น„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด๋ฏธ์ง€์˜ ์‹ค์ œ ์‚ฌ์ด์ฆˆ์ธ w๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„๊ฐ€ ์–ด๋Š ์ •๋„๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์šฉ๋„์ด๋‹ค.

sizes์˜ ๊ฐ’๋“ค, (max-width:480px) 440px์€ ๋ฏธ๋””์–ด ์กฐ๊ฑด๋ฌธ๊ณผ, ์ด ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ธ ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๊ฐ€ ์ฑ„์šธ ์ตœ์ ์˜ ๋„ˆ๋น„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์•ž์˜ ๊ฐ’์€ ์ตœ๋Œ€ 480px์˜ ํ™”๋ฉด์ผ ๋•Œ ์ด๋ฏธ์ง€๊ฐ€ 440px๋ฅผ ์ฑ„์šฐ๋„๋ก ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ sizes์— ๋„ฃ์„ ์ด๋ฏธ์ง€ ๋„ˆ๋น„๋Š” px, em์œผ๋กœ ๋œ ์ ˆ๋Œ“๊ฐ’์ด๋‚˜ ๋ทฐํฌํŠธ ์ƒ๋Œ“๊ฐ’ vw๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. %๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ด ์†์„ฑ๋“ค์ด ์žˆ์„ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๋Š”, ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๊ธฐ๊ธฐ ๋„ˆ๋น„๋ฅผ ํ™•์ธํ•œ ํ›„ ์ฐธ์ด ๋˜๋Š” ๋ฏธ๋””์–ด ์กฐ๊ฑด๋ฌธ์„ ํ™•์ธํ•˜๊ณ , ๊ทธ ์กฐ๊ฑด๋ฌธ์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„(size์— ์žˆ๋Š” ๊ฒƒ)๋ฅผ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋„ˆ๋น„์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด๋ฏธ์ง€๋ฅผ srcset์—์„œ ์ฐพ์•„์„œ ๋กœ๋“œํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ง€์›๋œ๋‹ค. ๋‚ก์€ ๋ธŒ๋ผ์šฐ์ €๋Š” src์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด๋‹ค.

5.2. ์•„ํŠธ ๋””๋ ‰์…˜ ๋ฌธ์ œ

์•„ํŠธ ๋””๋ ‰์…˜ ๋ฌธ์ œ๋Š” ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€์˜ ํ•ต์‹ฌ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์ง„์„ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด picture ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. picture์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ source๋ฅผ ๊ฐ์‹ธ๋„๋ก ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

<picture>
  <source media="(max-width:768px)" srcset="img-480w.jpg">
  <source media="(max-width:1080px)" srcset="img-720w.jpg">
  <img src="img.jpg" alt="์‹œ๋ฒ” ์ด๋ฏธ์ง€">
</picture>

source ํƒœ๊ทธ์—๋Š” ๋ฏธ๋””์–ด ์กฐ๊ฑด๋ฌธ์ด ์žˆ์–ด์„œ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค. source ํƒœ๊ทธ์˜ media ์กฐ๊ฑด๋ฌธ์„ ๋งŒ์กฑํ•  ์‹œ ํ•ด๋‹น source์˜ srcset ๊ฒฝ๋กœ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์— img ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ picture ํƒœ๊ทธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ ํ˜น์€ ์ฐธ์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฏธ๋””์–ด ์กฐ๊ฑด๋ฌธ์ด ์—†์„ ๋•Œ ๋ณด์—ฌ์ค„ ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ source๋Š” type์†์„ฑ ๋‚ด์— MIME ํƒ€์ž…์„ ๋ช…์‹œํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์ „์—, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

5.2.1. ์žฅ์ 

๋ฌผ๋ก  CSS๋‚˜ JS๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ํŒŒ์„œ๋Š” CSS, JS๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ HTML์˜ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•œ๋‹ค. ์ด๋Š” ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ CSS๋‚˜ JS๋กœ ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด, ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ์‹œ์ ์— CSS, JS๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฏธ๋ฆฌ ๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , CSS, JS๊ฐ€ ๋กœ๋“œ๋˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์ฆ‰ HTML์„ ์ด์šฉํ•ด์•ผ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

5.3. ์ •๋ฆฌ

๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด picture ํƒœ๊ทธ๋ฅผ ์“ฐ์ž.

ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๋•Œ ๋” ์ž‘์€ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์šฉ๋Ÿ‰์„ ์ ˆ์•ฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด svg ์ด๋ฏธ์ง€๋ฅผ ์“ฐ๊ฑฐ๋‚˜ img ํƒœ๊ทธ์˜ srcset+sizes ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž.

6. ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ ํ…Œ์ŠคํŠธ

MDN์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€์— ๋ฏธ๋””์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ•œ๋ฒˆ ํ•ด๋ณด์ž.

๋จผ์ € github์—์„œ ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ํŒŒ์ผ์„ ๋ฐ›๋Š”๋‹ค. index.html์„ ๋‹ค์šด๋ฐ›์€ ํ›„ pattern.png๋ฅผ ๊ฐ™์€ ํด๋”์— ๋„ฃ๋Š”๋‹ค. originals ํด๋”์˜ ์ด๋ฏธ์ง€๋„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.

index.html์— ์žˆ๋Š” CSS๋Š” ์ผ๋‹จ ์‹ ๊ฒฝ์“ฐ์ง€ ๋ง์ž. ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” index.html์˜ body ํƒœ๊ทธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<body>
  <header>
    <h1>Mozilla</h1>
    <!-- insert <img> element, link to the small
        version of the Firefox logo -->
  </header>

  <main>
    <article>
      <!-- insert iframe from youtube -->

      <h2>Rocking the free web</h2>

      <p>
        Mozilla are a global community of technologists, thinkers, and
        builders, working together to keep the Internet alive and accessible,
        so people worldwide can be informed contributors and creators of the
        Web. We believe this act of human collaboration across an open
        platform is essential to individual growth and our collective future.
      </p>

      <p>
        Click on the images below to find more information about the cool
        stuff Mozilla does.
        <a href="https://www.flickr.com/photos/mathiasappel/21675551065/"
          >Red panda picture</a
        >
        by Mathias Appel.
      </p>
    </article>

    <div class="further-info">
      <!-- insert images with srcsets and sizes -->
      <a href="https://www.mozilla.org/en-US/firefox/new/">
        <img />
      </a>
      <a href="https://www.mozilla.org/">
        <img />
      </a>
      <a href="https://addons.mozilla.org/">
        <img />
      </a>
      <a href="https://developer.mozilla.org/en-US/">
        <img />
      </a>
      <div class="clearfix"></div>
    </div>

    <div class="red-panda">
      <!-- insert picture element -->
    </div>
  </main>
</body>

์ด์ œ ์ฃผ์„์— ์จ ์žˆ๋Š” ๋Œ€๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ํ•ด๋ณด์ž.

ํ—ค๋”์— ์ž‘์€ ํŒŒ์ด์–ดํญ์Šค ๋กœ๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š”๋‹ค.

<header>
  <h1>Mozilla</h1>
  <!-- insert <img> element, link to the small
      version of the Firefox logo -->
  <img
    src="./firefox_logo-only_RGB.png"
    alt="small version of the Firefox logo"
  />
</header>

๊ทธ ๋‹ค์Œ main์˜ article์— ์œ ํŠœ๋ธŒ ์˜์ƒ์„ iframe์œผ๋กœ ์ž„๋ฒ ๋“œํ•œ๋‹ค. ์˜์ƒ์— ๋“ค์–ด๊ฐ€์„œ ๊ณต์œ  ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ํผ๊ฐ€๊ธฐ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋‚˜์˜ค๋Š” iframe ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ๋œ๋‹ค.

iframe

๋˜ํ•œ ์œ ํŠœ๋ธŒ ์˜์ƒ์˜ ๋„ˆ๋น„๊ฐ€ 400px์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์‹œํ‚ค๋ฏ€๋กœ iframe width๋ฅผ 400์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

<!-- insert iframe from youtube -->
<iframe
  width="400"
  height="315"
  src="https://www.youtube.com/embed/ojcNcvb1olg"
  title="YouTube video player"
  frameborder="0"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
  allowfullscreen
></iframe>

๊ทธ ๋‹ค์Œ ๋งํฌ์— ๋“ค์–ด๊ฐˆ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. img ํƒœ๊ทธ๋Š” ์ด๋ฏธ ์„ ์–ธ๋˜์–ด ์žˆ๊ณ  ์—ฌ๊ธฐ์— src, alt, srcset, sizes ์†์„ฑ์„ ์„ค์ •ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

ํ™”๋ฉด์ด 500px ์ดํ•˜์ผ ๋•Œ๋Š” 120px ๋„ˆ๋น„์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ ์ด์ƒ์ผ ๋• 400px ๋„ˆ๋น„์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํฌ ์ด๋ฏธ์ง€๋“ค์„ ์„ธํŒ…ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋•Œ ์ด๋ฏธ์ง€์˜ ์‹ค์ œ ํฌ๊ธฐ์™€ srcset์— ํ‘œ๊ธฐ๋œ ํฌ๊ธฐ๋ฅผ ๋งž์ถฐ ์ฃผ์–ด์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์ง„์˜ ํฌ๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

<img
  srcset="./firefox_logo-only_RGB.png 1200w"
  sizes="(max-width:500px) 120px, 400px"
  src="./firefox_logo-only_RGB.png"
/>

์ด์ œ picture ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ ˆ๋“œ ํŒฌ๋” ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด๋ณด์ž. ๋ทฐํฌํŠธ๊ฐ€ 600px ์ดํ•˜์ด๋ฉด ์ž‘์€ ํŒฌ๋” ์ด๋ฏธ์ง€๋ฅผ, ๊ทธ ์ด์ƒ์ด๋ฉด ํฐ ํŒฌ๋” ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค. red-panda-small.jpg๋Š” ์ ์ ˆํžˆ ๊ธฐ์กด ์ด๋ฏธ์ง€๋ฅผ ์ž˜๋ผ์„œ ๋งŒ๋“ ๋‹ค.

<div class="red-panda">
  <!-- insert picture element -->
  <picture>
    <source media="(max-width:600px)" srcset="./red-panda-small.jpg" />
    <img src="./red-panda.jpg" alt="Red panda" />
  </picture>
</div>

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ™”๋ฉด ๋„ˆ๋น„์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๋Œ€๋กœ ํ•˜๋ฉด MDN์˜ ํ‰๊ฐ€ ํ•ญ๋ชฉ๋“ค์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ 

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track

https://medium.com/harrythegreat/%ED%94%8C%EB%9E%98%EC%8B%9C%EC%9D%98-%EB%AA%B0%EB%9D%BD%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9B%B9%EC%9D%98-%EC%97%AD%EC%82%AC-ce6e387b60f

https://kkamagistory.tistory.com/808

embed์™€ object https://stackoverflow.com/questions/1244788/embed-vs-object

SVG์— ๊ด€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Getting_Started

Profile picture

๊น€์„ฑํ˜„(Kim Sung Hyun)

์„œ๊ฐ•๋Œ€ํ•™๊ต์—์„œ ๊ธฐ๊ณ„๊ณตํ•™๊ณผ ์ปดํ“จํ„ฐ๊ณตํ•™์„ ๋ณต์ˆ˜์ „๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ”ํžˆ `๋งˆ๋…€`๋ผ๋Š” ๋‹‰๋„ค์ž„์„ ์”๋‹ˆ๋‹ค. ์–ด๋–ค ๋Œ€๋‹จํ•œ ๋œป์„ ํ’ˆ๊ณ  ์‚ฌ๋Š” ์‚ฌ๋žŒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ์ € ๋ฉ‹์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋‚ด๋Š” ๋น›์„ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋‹ˆ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๊ณ , ์•ž์œผ๋กœ๋„ ๊ทธ๋ ‡๊ฒŒ ์‚ด ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ์ด๊ณณ์— ์ฐพ์•„์˜ค์‹  ๋‹น์‹ ๊ณผ๋„ ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ์–ด ์˜๊ด‘์ž…๋‹ˆ๋‹ค.