์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ ํ•™๊ต: ๋ฏผ์Šคํฌ ๋ฐ ๋ชจ์Šคํฌ๋ฐ”์˜ ์ƒˆ๋กœ์šด ์„ธํŠธ์— ๋Œ€ํ•œ ์ž‘์—… ๋ถ„์„

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

์ œ ์ด๋ฆ„์€ Yulia Seredich์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Sergei Kazakov์™€ ํ•จ๊ป˜ ์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ผ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‘˜ ๋‹ค Yandex ๋ฏผ์Šคํฌ ์‚ฌ๋ฌด์†Œ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ์ž์ด์ž ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ SRI๋ฅผ ์กธ์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ ํ•™๊ต: ๋ฏผ์Šคํฌ ๋ฐ ๋ชจ์Šคํฌ๋ฐ”์˜ ์ƒˆ๋กœ์šด ์„ธํŠธ์— ๋Œ€ํ•œ ์ž‘์—… ๋ถ„์„

๋ชจ์Šคํฌ๋ฐ” ๋“ฑ๋ก ๊ฐœ์‹œ๋ฅผ ๊ณ„๊ธฐ๋กœ ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ ๋ฏผ์Šคํฌ์˜ ์ด์ „ ํ•™๊ต์— ๋Œ€ํ•œ ์ž…๋ฌธ ๊ณผ์ œ ๋ถ„์„์„ ์ถœํŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

SRI ๊ณผ์ œ์˜ ๋‚ด์—ญ์„ ์ถ”์ ํ•˜๋ฉด ํ•ด๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๊ฐ ์ž‘์—…์„ ๋ถ„์„ํ•˜๋ฉด์„œ ์˜ฌ๋ฐ”๋ฅธ ์ ˆ์ฐจ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ž‘์—… 1: ํฌํŠธํด๋ฆฌ์˜ค

์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ๋ ˆ์ด์•„์›ƒ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š” Yandex.Collections ๋””์ž์ด๋„ˆ Alexey Cherenkevich์™€ ๊ทธ์˜ ์„œ๋น„์Šค ๋™๋ฃŒ์ธ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ์ž Sergey Samsonov๊ฐ€ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ฑด

ํฌํŠธํด๋ฆฌ์˜ค ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ์„ธ์š”: ์ž์‹ ๊ณผ ํ•™์—…, ํ•™๊ต์— ๋Œ€ํ•œ ๊ธฐ๋Œ€์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”. ์‚ฌ์ดํŠธ๋Š” ์ œ์•ˆ๋œ ๋ ˆ์ด์•„์›ƒ๊ณผ ์ตœ๋Œ€ํ•œ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ ˆ์ด์•„์›ƒ ๋งํฌ: 1000px, 600px, 320px, ์‚ฌ์–‘). ์šฐ๋ฆฌ๋Š” ๋ ˆ์ด์•„์›ƒ์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฏ€๋กœ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ™•์ธํ•  ๋•Œ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

  • ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ, ์ƒ‰์ƒ ์ •ํ™•์„ฑ, ๊ธ€๊ผด ์Šคํƒ€์ผ, ๊ธ€๊ผด ํฌ๊ธฐ;
  • ์˜๋ฏธ๋ก ์  ๋ ˆ์ด์•„์›ƒ;
  • ๋‹ค์–‘ํ•œ ์ƒํƒœ์˜ ์š”์†Œ ์กด์žฌ: ์ปค์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋ฒ„ํŠผ๊ณผ ๋งํฌ ํ‘œ์‹œ, ํ™œ์„ฑ ์ž…๋ ฅ ํ•„๋“œ ๊ฐ•์กฐ ํ‘œ์‹œ ๋“ฑ
  • ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ํ˜ธํ™˜์„ฑ(์ธ๊ธฐ ๋ธŒ๋ผ์šฐ์ €์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋จ)

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ตœ์‹  CSS ์†”๋ฃจ์…˜ ์‚ฌ์šฉ: flexbox, ๊ทธ๋ฆฌ๋“œ ๋“ฑ
  • ์ ์‘ํ˜• ๋ ˆ์ด์•„์›ƒ
  • ์ „์ฒ˜๋ฆฌ๊ธฐ ๋ฐ/๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ ์‚ฌ์šฉ, ์กฐ๋ฆฝ, ์ถ•์†Œ, ์ถœ๋ ฅ ์ฝ”๋“œ ์ตœ์ ํ™”
  • HTML ์–‘์‹ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์–‘์‹ํ™”๋œ ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฒ„ํŠผ.

์ž‘์—…์ด ์ƒ๋‹นํžˆ ๋ฐฉ๋Œ€ํ•˜๋ฏ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์€ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ ์ˆ˜๊ฐ€ ์•ฝ๊ฐ„ ๋‚ฎ์•„์ง€์ง€๋งŒ ์—ฌ์ „ํžˆ ์ง€์‹์„ ์ž…์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ๊ท€ํ•˜์˜ ํฌํŠธํด๋ฆฌ์˜ค์™€ GitHub์˜ ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ๋งํฌ๋ฅผ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.

๊ณผ์ œ์—์„œ ์ œ์•ˆํ•œ ๋ ˆ์ด์•„์›ƒ์€ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํ†ฑ์˜ ํ™”๋ฉด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ ์‚ฌ์–‘์—๋„ ๋งž์ถฐ์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ž‘์—… ํ™•์ธ ๊ฒฐ๊ณผ์— ์ตœ๋Œ€ํ•œ ๊ฐ๊ด€์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒˆ ํ™•์ธ์—๋Š” ๋งŽ์€ ๊ธฐ์ค€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ค€

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

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

์ ์‘ํ˜• ๋ ˆ์ด์•„์›ƒ - ์ด๊ฒƒ์€ ์„ธ ๊ฐ€์ง€ ํ•ด์ƒ๋„์—์„œ ๋ ˆ์ด์•„์›ƒ์˜ ๋ชจ๋“  ๊ฒƒ์ด ํ”ฝ์…€ ๋‹จ์œ„๊ฐ€ ๋˜๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ์ง€ ๋ ˆ์ด์•„์›ƒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ์ƒํƒœ์—์„œ๋„ ๋ ˆ์ด์•„์›ƒ์ด ๋ฌด๋„ˆ์ ธ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ๋Œ€ ๋„ˆ๋น„๋ฅผ ์ œํ•œํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ 1920ํ”ฝ์…€๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ ธ๊ณ , ์ผ๋ถ€๋Š” ๋ฐฐ๊ฒฝ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์ „๋ฐ˜์ ์œผ๋กœ ํ›„๋ณด์ž๋“ค์€ ์ด ์ž‘์—…์— ์ž˜ ๋Œ€์ฒ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜๋ฏธ๋ก ์  ๋ ˆ์ด์•„์›ƒ. ๋งํฌ๊ฐ€ , ๋ฒ„ํŠผ โ€“ ์œผ๋กœ ๋””์ž์ธ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  โ€œ๊ทธ๋“ค์€ ์„ธ์ƒ์— ๋ช‡ ๋ฒˆ์ด๋‚˜ ๋งํ–ˆ์Šต๋‹ˆ๊นŒ?โ€ ๋‹คํ–‰ํžˆ๋„ ๋Œ€๋ถ€๋ถ„์˜ ์ง€์›์ž๋“ค์ด ์ด ์š”๊ตฌ ์‚ฌํ•ญ๋„ ์ถฉ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. SRI์˜ ๊ธฐ๋Œ€์— ๋ชจ๋‘๊ฐ€ ์ˆจ๊ฒจ์ง„ ๋ชฉ๋ก์„ ์ธ์‹ํ•˜์ง€๋Š” ๋ชปํ•˜์—ฌ div ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ๊ทธ๋‹ค์ง€ ๋‚˜์˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ถ€๋ถ„๊ณผ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ๋“ฑ ์ž์‹ ์ด ์•Œ๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์˜๋ฏธ ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•œ ํ›„๋ณด์ž๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชฉ๋ก ๋Œ€์‹  - ๋ฐ . ๊ฒฐ๊ตญ ์˜๋ฏธ๋ก ์€ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ๊ณผ ๊ฐ ๋ธ”๋ก์˜ ๋ชฉ์ (๋Œ€๋ถ€๋ถ„์€ ์—ฌ๊ธฐ์—์„œ ๊ด€๋ฆฌํ•จ), ์ „์ฒ˜๋ฆฌ๊ธฐ ๋ฐ/๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ(๋ช‡๋ช‡์€ ์—ฌ๊ธฐ์—์„œ ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ)์˜ ์‚ฌ์šฉ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์š”์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ less ๋ฐ scss๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๋Š” ์Šฌ๋ผ์ด๋”. ๊ณผ์ œ์—์„œ JS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ผ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์ด ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šฌ๋ผ์ด๋”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  . ๋ชจ๋“  ๋งˆ๋ฒ•์€ ์„ ํƒ๊ธฐ ์ˆ˜์ค€ #button-N:checked ~ .slider-inner .slider-slides์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ์ฒดํฌ๋ฐ•์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ฒดํฌ๋œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ์— ํ•„์š”ํ•œ ๋ฒˆ์—ญ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ๋ณ€ํ™˜: ๋ฒˆ์—ญ(-33%). ์Šฌ๋ผ์ด๋”์˜ ๊ตฌํ˜„์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก. ์—ฌ๊ธฐ์— ๋ชจ๋“  ๊ฒƒ์ด ๋‚ด๋ ค์กŒ์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ์„ ํƒ๊ธฐ: .accordion-item input:checked ~ .accordion-item__content. ๊ตฌํ˜„๋œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—.

:hover, :active ๋ฐ :focu* ์ƒํƒœ์˜ ๊ฐ€์šฉ์„ฑ. ๋งค์šฐ ์ค‘์š”ํ•œ ์ ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ ์ค‘ ํŽธ์•ˆํ•จ์€ ์ด์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ•ญ์ƒ ์ž์‹ ์˜ ํ–‰๋™์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์€ ์„ค๋ฌธ์ง€์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "์ „ํ™”ํ•˜๊ธฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ์ ์œผ๋กœ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด(์š”์ฒญ์ด ์ „์†ก๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ) ์ด ๋ฒ„ํŠผ์„ ๊ณ„์†ํ•ด์„œ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ด๋Š” ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ XNUMX๊ฐœ์˜ ์š”์ฒญ์ด ์ „์†ก๋˜๊ณ  XNUMX๋ฒˆ์˜ ํšŒ์‹ ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—๋Š” ๋งˆ์šฐ์Šค๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ์žŠ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฒ„๊ฐ€ ์—†์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜๋ฏธ๋ก ์— ๋Œ€ํ•œ ์š”์ ์„ ์ถฉ์กฑํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์€ ๋˜ ํ•˜๋‚˜์˜ ์š”์ ์ž…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์ด ๋Œ€ํ™”ํ˜• ์š”์†Œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ปจํŠธ๋กค ์œ„๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ์ปค์„œ๊ฐ€ ํ‘œ์ค€์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. hover์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ ์ž‘์„ฑํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋งค์šฐ ์–ด์ˆ˜์„ ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์ปค์„œ๋ฅผ ๊ณผ์†Œํ‰๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”: ํฌ์ธํ„ฐ.

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

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

์–‘์‹ ๊ฒ€์ฆ. ํ•„์š”ํ•œ ๊ฒƒ์€ ์–‘์‹์˜ ๊ฐ ์ž…๋ ฅ์— ํ•„์ˆ˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ํ•ญ๋ชฉ์„ ์ด๋ฉ”์ผ๋กœ ์ธ์ฆํ•ด์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

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

๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ํ˜ธํ™˜์„ฑ. ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ์ตœ์‹  ๋ฒ„์ „์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €(IE๊ฐ€ ์—†๊ณ  ์ฐธ๊ฐ€์ž๋“ค์€ ์šด์ด ์ข‹์•˜์Œ)์™€ iPhone์˜ Safari ๋ฐ Android์˜ Chrome์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ JS๋‚˜ Bootstrap์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ์ˆ˜๊ฐ€ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ „์ฒด ์ž‘์—…์˜ ๋ชฉ์ ์„ ๋ฌด๋„ˆ๋œจ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Bootstrap ์ฐธ๊ฐ€์ž๋Š” ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ฐ›์•˜์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜๋ฏธ ๋ฐ ๊ตฌํ˜„ ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋„ ๋งŽ์€ ์ ์ˆ˜๋ฅผ ์žƒ์—ˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท ์–ด๋”˜๊ฐ€์— ์‚ฌ์ดํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•œ ์‚ฌ๋žŒ๋“ค์€ ํŠน๋ณ„ํ•œ ์ด์ ์„ ์–ป์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋ฆฌ๋ทฐ์–ด๋“ค์€ ์ €์žฅ์†Œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์ปดํ“จํ„ฐ์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋งค์šฐ ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์€ ์นด๋ฅด๋งˆ์— ํ”Œ๋Ÿฌ์Šค ์—ญํ• ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ์ฃผ๋กœ ํ•™์ƒ์—๊ฒŒ ๋งค์šฐ ์œ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜๋ฝํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์€ ์ด์ œ ์ค€๋น„๋œ ์ด๋ ฅ์„œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‘๋‹ต์— ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์ฒจ๋ถ€ํ•˜๊ฑฐ๋‚˜ gh-ํŽ˜์ด์ง€์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—… 2: ์šด์†ก ๊ฒฝ๋กœ

์ด ์ž‘์—…์˜ ์ž‘์„ฑ์ž๋Š” ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค ๊ทธ๋ฃน Denis Balyko์˜ ์ฑ…์ž„์ž์ž…๋‹ˆ๋‹ค.

์กฐ๊ฑด

๋ณ„ ์ง€๋„๊ฐ€ ์žˆ๋‚˜์š”? ๊ฐ ๋ณ„์˜ ์ด๋ฆ„์€ ๋ฌผ๋ก , ํ•ด๋‹น ๋ณ„์—์„œ ๋‹ค๋ฅธ ๋ณ„๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋„ ๊ด‘์ดˆ ๋‹จ์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์ทจํ•ด์•ผ ํ•˜๋Š” ์†”๋ฃจ์…˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ ๋ณ„์˜ ์ด๋ฆ„์ด๊ณ  ๊ฐ’์ด ๋ณ„๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ(์šฐ์ฃผ์—์„œ์˜ ์ผ๋ฐฉํ–ฅ ๊ตํ†ต)์ธ ๊ฐ์ฒด์™€ ๋ณ„์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ฒฝ๋กœ์˜ ์‹œ์ž‘์ ๊ณผ ๋์  - ๊ฐ๊ฐ ์‹œ์ž‘๊ณผ ๋. ์ด ํ•จ์ˆ˜๋Š” ์‹œ์ž‘ ๋ณ„์—์„œ ๋ ๋ณ„๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์™€ ๋”ฐ๋ผ์•ผ ํ•  ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„œ๋ช…:

const solution = function(graph, start, finish)  {
    // ะ’ะฐัˆะต ั€ะตัˆะตะฝะธะต
} 

์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ:

const graph = {
  start: { A: 50, B: 20 },
  A: { C: 40, D: 20 },
  B: { A: 90, D: 90 },
  C: { D: 160, finish: 50 },
  D: { finish: 20 },
  finish: {}
};
const start = 'start';
const finish = 'finish'; 

์˜ˆ์ œ ์ถœ๋ ฅ:

{
    distance: 90,
    path: ['start', 'A', 'D', 'finish']
} 

์ฐธ๊ณ : ์†”๋ฃจ์…˜ ์Šค์ผˆ๋ ˆํ†ค์€ src/ ํด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์„ Solution.js์— ๋„ฃ์œผ์„ธ์š”.

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

๊ธฐ์ค€

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

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

์†”๋ฃจ์…˜์˜ ๋ช…ํ™•์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์€ ๋ณ„๋„๋กœ ๊ณ ๋ ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ธ๊ณ„์˜ ๋ชจ๋“  ์ปจํผ๋Ÿฐ์Šค์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ง์—… ์ค‘ 80%๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ํ•™์ƒ๋“ค๋„ ํ๋ ˆ์ดํ„ฐ์™€ ์„œ๋กœ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๊ธฐ์ค€์€ ์ƒ๋‹นํ•œ ๋น„์ค‘์„ ์ฐจ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ธ€์ž ์ด์ƒ์˜ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ž‘ํ’ˆ๋„ ์žˆ์œผ๋‹ˆ ๊ทธ๋Ÿฌ์ง€ ๋งˆ์„ธ์š”. Stella Chang์˜ ์˜๊ฒฌ๊ณผ ๋™์ผํ•œ ์˜๊ฒฌ์„ ์ œ์™ธํ•˜๋ฉด ์ฐธ๊ฐ€์ž๋“ค์˜ ์˜๊ฒฌ์€ ๋งค์šฐ ๊ณ ๋ฌด์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ธฐ์ค€์€ ์ž๋™ ํ…Œ์ŠคํŠธ์˜ ์กด์žฌ์ž…๋‹ˆ๋‹ค. ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค๋งŒ์ด ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์นด๋ฅด๋งˆ์— ํฐ ํ”Œ๋Ÿฌ์Šค๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜:

const solution = function(graph, START, FINISH)  {
    // ะ’ัั‘ ะฝะต ะฑะตัะฟะปะฐั‚ะฝะพ ะฒ ัั‚ะพะผ ะผะธั€ะต
    const costs = Object.assign({[FINISH]: Infinity}, graph[START]);

    // ะŸะตั€ะฒะฐั ะฒะพะปะฝะฐ ั€ะพะดะธั‚ะตะปัŒัะบะธั… ะฝะพะด
    const parents = { [FINISH]: null };
    Object.keys(graph[START]).reduce((acc, child) => (acc[child] = START) && acc, parents)

    const visited = [];
    let node;

    // ะ˜ั‰ะตะผ ยซะดะตัˆั‘ะฒะพะณะพยป ั€ะพะดะธั‚ะตะปั, ะพั‚ะผะตั‡ะฐะตะผ ะฟั€ะพะนะดะตะฝะฝั‹ะต
    do {
        node = lowestCostNode(costs, visited);
        let children = graph[node];
        for (let n in children) {
            let newCost = costs[node] + children[n];

            // ะ•ั‰ั‘ ะฝะต ะพั†ะตะฝะตะฝะฐ ะธะปะธ ะฝะฐัˆั‘ะปัั ะฑะพะปะตะต ะดะตัˆั‘ะฒั‹ะน ะฟะตั€ะตั…ะพะด
            if (!costs[n] || costs[n] > newCost) {
                costs[n] = newCost;
                parents[n] = node;
            }
        }
        visited.push(node);
    } while (node)

    return {
        distance: costs[FINISH],
        path: optimalPath(parents)
    };

    // ะ’ะพะทะฒั€ะฐั‚ ะฝะฐะทะฐะด ะฟะพ ัะฐะผั‹ะผ ยซะดะตัˆั‘ะฒั‹ะผยป ั€ะพะดะธั‚ะตะปัะผ
    function optimalPath(parents) {
        let optimalPath = [FINISH];
        let parent = parents[FINISH];
        while (parent && parent !== START) {
            optimalPath.push(parent);
            parent = parents[parent];
        }
        optimalPath.push(START);
        return optimalPath.reverse();
    }

    // ะœะธะฝะธะผะฐะปัŒะฝะฐั ัั‚ะพะธะผะพัั‚ัŒ ะธะท ั‚ะตะบัƒั‰ะตะน ะฝะพะดั‹ ัั€ะตะดะธ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั…
    function lowestCostNode(costs, visited) {
        return Object.keys(costs).reduce((lowest, node) => {
            if (lowest === null || costs[node] < costs[lowest]) {
                if (!visited.includes(node)) {
                    lowest = node;
                }
            }

            return lowest;
        }, null);
    };
};

์ž‘์—… 3: ์ด๋ฒคํŠธ ์บ˜๋ฆฐ๋”

์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ์ž Sergey Kazakov์™€ Alexander Podskrebkin์ด ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ฑด

์ผ์ •์„ ํ‘œ์‹œํ•  ๋ฏธ๋‹ˆ ๋‹ฌ๋ ฅ์„ ์ž‘์„ฑํ•ด ๋ณด์„ธ์š”. ์›ํ•˜๋Š” ์ผ์ •์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2019๋…„ ํ”„๋ก ํŠธ์—”๋“œ ์ปจํผ๋Ÿฐ์Šค ์ผ์ •์ž…๋‹ˆ๋‹ค.

๋‹ฌ๋ ฅ์€ ๋ชฉ๋ก์ฒ˜๋Ÿผ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋””์ž์ธ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ์•Œ๋ฆผ์„ 3์ผ, 7์ผ, 14์ผ ์ „์— ๋ฏธ๋ฆฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์—์„œ ์ฒ˜์Œ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„์—๋Š” ์บ˜๋ฆฐ๋”๊ฐ€ ์—ด๋ฆฌ๊ณ  ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ ์šฉํ•œ ์ž๋ฃŒ

ํ”„๋ก ํŠธ์—”๋“œ ์ปจํผ๋Ÿฐ์Šค ์ผ์ •:
confs.tech/javascript?topics=javascript%2Bcss%2Bux

์„œ๋น„์Šค ์ž‘์—…์ž:
๊ฐœ๋ฐœ์ž.mozilla.org/ru/docs/Web/API/Service_Worker_API/Using_Service_Workers
๊ฐœ๋ฐœ์ž.google.com/web/fundamentals/primers/service-workers

์•Œ๋ฆผ API:
๊ฐœ๋ฐœ์ž.mozilla.org/ru/docs/Web/API/Notifications_API

์„ธ ๋ฒˆ์งธ ์ž‘์—…์€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ์— ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์†”๋ฃจ์…˜์ด ๋„ˆ๋ฌด ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ›„๋ณด์ž๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ธฐ์ˆ ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€, ์ฆ‰ ๊ทธ๊ฐ€ ์—ฐ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€, ์ž์‹ ์˜ ์†”๋ฃจ์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ค€

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

์†Œ์Šค์—์„œ ์ด๋ฒคํŠธ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ. ์ด๋Š” ๋ ˆ์ด์•„์›ƒ ์ž‘์—…์ด ์•„๋‹ˆ๋ฏ€๋กœ ํฌํ•จ๋œ ์ด๋ฒคํŠธ ๋ชฉ๋ก์€ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ํšŒ์˜๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์ผ์ •์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํšŒ์˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ , ๋ฐ›์€ JSON์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๋ Œ๋”๋งํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ (fetch ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ๋žŒ์ด ๊ฐ€์ ธ์˜ค๊ธฐ์šฉ ํด๋ฆฌํ•„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ถ”๊ฐ€ ์ •๋ณด์— ์ž์‹ ์˜ ์„ ํƒ์„ ํ‘œ์‹œํ•œ ๊ฒฝ์šฐ ์ด๋Š” ํ”Œ๋Ÿฌ์Šค๋กœ ๊ฐ„์ฃผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์—†๋Š” ์„œ๋น„์Šค ์›Œ์ปค ๋“ฑ๋ก ์ฒซ ๋ฒˆ์งธ ๋‹ค์šด๋กœ๋“œ ํ›„์—๋Š” ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ทธ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ถ€ํŒ… ์‹œ ์ผ์ • ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ์›Œ์ปค. ์„œ๋น„์Šค ์ž‘์—…์ž, ํ•ด๋‹น ๊ธฐ๋Šฅ ๋ฐ ์ž‘์—… ๋ฐฉ๋ฒ•(์บ์‹œ ์ž‘์—… ์ „๋žต, ์˜คํ”„๋ผ์ธ ์ž‘์—…)์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” 3, 7, 14์ผ ํ›„์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์•Œ๋ฆผ API๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ ์ž„๋ฌด๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ด์—ˆ์–ด. ์šฐ๋ฆฌ๋Š” ํ‘ธ์‹œํ•  ์‹œ์ ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ • ๊ตฌํ˜„์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—… ์˜ต์…˜์ด ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: localStorage์— ์ €์žฅ, IndexDB ๋˜๋Š” ์„œ๋น„์Šค ์›Œ์ปค์— ์˜ํ•œ ์ •๊ธฐ์ ์ธ ํด๋ง. ํ‘ธ์‹œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ ์˜ˆ), ํ•˜์ง€๋งŒ ์˜คํ”„๋ผ์ธ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋‹ซํžŒ ํ›„ ํ‘ธ์‹œ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ์—ด๋ฆฌ๋Š” ๊ฒƒ๋„ ๋˜‘๊ฐ™์ด ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋‹ซํžˆ๋Š” ๋™์‹œ์— ์•Œ๋ฆผ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†”๋ฃจ์…˜์ด ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋ฆฌ๋ทฐ์–ด์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  3 ์ผ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋„๋ก ์ง€๊ธˆ ๋‹น์žฅ ์ถ”์ง„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๊ฒƒ์€ ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค.

๋ฐ”ํƒ• ํ™”๋ฉด์— ์•„์ด์ฝ˜์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ (PWA). ํŒŒ์ผ์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค manifest.json ์˜ฌ๋ฐ”๋ฅธ ์•„์ด์ฝ˜์œผ๋กœ. ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ์ด ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ(๋˜๋Š” CreateReactApp์—์„œ ์ƒ์„ฑ๋œ ์ฑ„๋กœ ๋‘์—ˆ์Œ) ์˜ฌ๋ฐ”๋ฅธ ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด โ€œ๋‹ค๋ฅธ ์•„์ด์ฝ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹คโ€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์Šคํƒ€์ผ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ. ๋‘ ๋ฒˆ์งธ ์ž‘์—…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹จ์ผ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค(๋น„๋ก ์šฐ๋ฆฌ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋”๋ผ๋„). ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ๋ฆฐํ„ฐ๋ฅผ ๋ง์ณค์Šต๋‹ˆ๋‹ค. ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ์˜ค๋ฅ˜. ์ฝ˜์†”์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  ์ฐธ๊ฐ€์ž๊ฐ€ ์ด์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ ์ˆ˜๊ฐ€ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

์ฐธ๊ฐ€์ž๋“ค์˜ ๊ฒฐ์ •์—์„œ ์žฌ๋ฏธ์žˆ๋Š” ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • ํ•œ ์„ค๋ฌธ์ง€์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. โ€œํ”„๋กœ๊ทธ๋ž˜๋จธ ์นœ๊ตฌ๊ฐ€ ์ œ๊ฐ€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ์—๊ฒŒ ๋ฐฉ๋ฒ•๊ณผ ์ด์œ ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ํผ๋ถ€์—ˆ๊ณ  ๊ทธ๋Š” ๋‚˜์—๊ฒŒ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋งˆ์Œ์— ๋“ค์—ˆ์–ด์š”. ๋” ์•Œ๊ณ  ์‹ถ์–ด์š”.โ€ ์šฐ๋ฆฌ๋Š” ์ด ์ง€์›์„œ๋ฅผ ์˜จ ๋งˆ์Œ์„ ๋‹คํ•ด ์‘์›ํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์•ˆํƒ€๊น๊ฒŒ๋„ ํ›„๋ณด์ž์˜ ์นœ๊ตฌ๋Š” ์ง€์›์„œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐ ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ํ•œ ํ›„๋ณด์ž๋Š” RAR ์•„์นด์ด๋ธŒ๊ฐ€ ์žˆ๋Š” GitHub์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚
  • ๋˜ ๋‹ค๋ฅธ ํ›„๋ณด์ž๋Š” Solution.js ํŒŒ์ผ ์ฒซ ์ค„์˜ ๋Œ“๊ธ€์—์„œ ์ž์‹ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณต์‚ฌํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์†”์งํ•˜๊ฒŒ ์ธ์ •ํ–ˆ๋‹ค.

76๋ช…์˜ ํ›„๋ณด์ž๋กœ๋ถ€ํ„ฐ ์ง€์›์„œ๋ฅผ ๋ฐ›์•„ 23๋ช…์„ ์„ ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฏผ์Šคํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ์Šคํฌ๋ฐ”, ์ƒํŠธํŽ˜ํ…Œ๋ฅด๋ถ€๋ฅดํฌ, ์‹ฌ์ง€์–ด ํƒ€ํƒ€๋ฅด์Šคํƒ„์—์„œ๋„ ์„ค๋ฌธ์ง€๋ฅผ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ํ˜„์žฌ ์ง์—…์œผ๋กœ ์ธํ•ด ์šฐ๋ฆฌ๋ฅผ ๋†€๋ผ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•œ ๋ช…์€ ๋ฒ•์˜ํ•™ ์ „๋ฌธ๊ฐ€์ด๊ณ  ๋‹ค๋ฅธ ํ•œ ๋ช…์€ ์˜๊ณผ๋Œ€ํ•™์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ์ž‘์—… ์™„๋ฃŒ ์„ฑ๊ณต๋ฅ ์˜ ํฅ๋ฏธ๋กœ์šด ๋ถ„ํฌ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ฐ€์ž๋“ค์€ ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์„ ํ‰๊ท  60%, ๋‘ ๋ฒˆ์งธ ์ž‘์—…์„ 50%, ์„ธ ๋ฒˆ์งธ ์ž‘์—…์ด ๊ฐ€์žฅ ์–ด๋ ค์›Œ ํ‰๊ท  40% ์ •๋„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

80๋…„ ์ „ SRI ์ž…ํ•™ ๊ณผ์ œ๋ฅผ ๋ณด๊ณ  ์ ˆ๋Œ€ ํ’€์ง€ ๋ชปํ•  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚ฉ๋‹ˆ๋‹ค. ์ด ์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•‰์•„์„œ ์กฐ๊ฑด์„์ฃผ์˜ ๊นŠ๊ฒŒ ์ฝ๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด์— ์†”๋ฃจ์…˜์˜ ๊ฑฐ์˜ XNUMX%๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„ธ ๋ฒˆ์งธ ์ž‘์—…(๊ฐ€์žฅ ์–ด๋ ค์šด ์ž‘์—…)์˜ ์กฐ๊ฑด์—์„œ๋Š” MDN์˜ ์„œ๋น„์Šค ์›Œ์ปค ๋ฐ ์•Œ๋ฆผ API์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•œ ํ•™์ƒ๋“ค์€ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ์™„์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€