๐Ÿ“ฑ ์›น ํ‘œ์ค€ ๋ฏธ๋‹ˆ์•ฑ์˜ ์–ด๋ ค์›€

๋‹น๊ทผ์—์„œ R&D ์—”์ง€๋‹ˆ์–ด ์ธํ„ด์œผ๋กœ ์žฌ์งํ•˜๋ฉด์„œ ์ผํ•œ ์›น ํ‘œ์ค€ ๋ฏธ๋‹ˆ์•ฑ์˜ ๊ธฐ์ˆ ์ ์ธ ๋ฐฐ๊ฒฝ๊ณผ ํ˜„ ์ง„์ฒ™๋„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋‹น๊ทผ๋ฏธ๋‹ˆ ์ฝ˜์†”์„ ํ†ตํ•ด ์›น ํ‘œ์ค€ ๋ฏธ๋‹ˆ์•ฑ์„ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„์ง์€ ์˜คํ”ˆ ์˜ˆ์ •! ๋ˆ„๊ตฌ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์จ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋“ค์–ด๊ฐ€์„œ Waitlist์— ์ด๋ฆ„์„ ์˜ฌ๋ ค๋‘์ž.

๐Ÿ“ฑ ๋ฏธ๋‹ˆ์•ฑ

๋ฏธ๋‹ˆ์•ฑ์€ ์Šˆํผ์•ฑ ์œ„์—์„œ ๊ตฌ๋™๋˜๋Š” ์ œ3์‚ฌ ์„œ๋น„์Šค๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

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

์ด๊ฒŒ ํ˜„์žฌ๋ž‘ ๋ฌด์—‡์ด ๋‹ค๋ฅด๋ƒ๊ณ ? ์›น์„ ๋งŒ๋“œ๋Š” ๊ฒฝํ—˜(๊ฐ„๋‹จํ•œ JS ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ)์œผ๋กœ ์ˆœ์‹๊ฐ„์— ์•ฑ(๋„๋‹ฌ๋ฅ  ์ตœ๊ณ , ๋ฆฌํ…์…˜ ์ตœ๊ณ )์œผ๋กœ ๋Ÿฐ์นญํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์‹œ์— ์Šˆํผ์•ฑ์˜ ํ†ตํ•ฉ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธํ•˜๊ณ , ์•ฑ ๋‚ด์—์„œ ๊ฒฐ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค (๋ถˆํŽธํ•œ ํšŒ์›๊ฐ€์ž…, ๊ฐœ์ธ ์ •๋ณด ์ž…๋ ฅ ์—†์Œ). ์ฆ‰,

  1. ์ง์ ‘ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์‰ฝ๊ณ ,
  2. ์ง์ ‘ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋Ÿฐ์นญํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…ธ์ถœ๋˜๊ณ ,
  3. ์ง์ ‘ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
  4. ์ง์ ‘ ์„œ๋น„์Šค๋ฅผ ๋Ÿฐ์นญํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์••๋„์ ์ธ ๋„๋‹ฌ๋ฅ ๊ณผ ๋ฆฌํ…์…˜๊ณผ ๊ฑฐ๋ž˜ ๋น„์œจ์„ ๋ณด์žฅํ•œ๋‹ค.

์ค‘ํ™”๊ถŒ์—์„œ๋Š” ์ด๋ฏธ BAT (๋ฐ”์ด๋‘, ์•Œ๋ฆฌ๋ฐ”๋ฐ”, ํ…์„ผํŠธ) 3์‚ฌ๊ฐ€ ๋ฏธ๋‹ˆ์•ฑ์œผ๋กœ ์‹œ์žฅ์„ ์žฅ์•…ํ•˜์˜€์œผ๋ฉฐ ๊ทธ ์ค‘ 1์œ„์ธ WeChat์˜ ๋ฏธ๋‹ˆ์•ฑ์€ ์ผ๊ฐ„ ์‚ฌ์šฉ์ž๊ฐ€ 4์–ต๋ช…์ด ๋„˜๊ณ , ์›”๊ฐ„ ์‚ฌ์šฉ์ž๋Š” 9์–ต๋ช…์„ ์ƒํšŒํ•œ๋‹ค. ๋˜ํ•œ Apple๊ณผ Google์ด ์ค‘ํ™”๊ถŒ์—์„œ ์•ฑ์Šคํ† ์–ด, ํ”Œ๋ ˆ์ด์Šคํ† ์–ด๋ฅผ ์ด์šฉํ•œ ํ”Œ๋žซํผ ํŒŒ์›Œ๋ฅผ ์ง€๋‹ˆ์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ๋ฏธ๋‹ˆ์•ฑ์ด๋‹ค. ์ค‘ํ™”๊ถŒ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์•ฑ์Šคํ† ์–ด์™€ ํ”Œ๋ ˆ์ด์Šคํ† ์–ด๋Š” ๋งˆ์น˜ ๊ณผ๊ฑฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์— ๋‚ด์žฅ๋œ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ์™€ ๊ฐ™๋‹ค. ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ์˜ ์œ ์ผํ•œ ์šฉ๋„๊ฐ€ Chrome์„ ์ฐพ๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋“ฏ, ์ค‘ํ™”๊ถŒ ์•ฑ์Šคํ† ์–ด์™€ ํ”Œ๋ ˆ์ด์Šคํ† ์–ด์˜ ์‚ฌ์‹ค์ƒ ์œ ์ผํ•œ ์šฉ๋„๋Š” WeChat์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.

์ด๋Š” ๊ตญ์ œ์ ์œผ๋กœ๋„ ์ƒˆ๋กœ์šด ํ˜„์ƒ์ด ์•„๋‹ˆ๋‹ค. Snap์€ Snap Mini๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ์ค‘์ด๊ณ , Line์€ Line Mini App์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค. ๋‹น๊ทผ๋„ ๋ฏธ๋‹ˆ์•ฑ์„ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ฏธ๋‹ˆ์•ฑ์ด ๋ฌด์—‡์ธ์ง€, ๊ทธ ํŒŒ๊ธ‰๋ ฅ์ด ๋ฌด์—‡์ธ์ง€๋Š” Google์˜ ๋ฏธ๋‹ˆ์•ฑ ๋ฌธ์„œ๋ฅผ ์ „๋ถ€ ๋ฒˆ์—ญํ•ด๋‘์—ˆ๋‹ค. (PR ๋Œ€๊ธฐ ์ค‘) ์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐํ•˜๊ธฐ์—๋Š” ๋‚ด์šฉ์ด ๊ณผํ•˜๊ฒŒ ๊ธธ์–ด์งˆํ…Œ๋‹ˆ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

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

๐Ÿ”ฅ ๋งŽ์€ ๋ฏธ๋‹ˆ์•ฑ์„ ์œ„ํ•ด

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

์ด๋ฅผ ์œ„ํ•ด ํ‘œ์ค€ ๋ฏธ๋‹ˆ์•ฑ์€ ์›น ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋–ค ์›น์•ฑ์ผ์ง€๋ผ๋„ ์•ฝ๊ฐ„์˜ ์ˆ˜์ •์„ ํ†ตํ•ด ๋ฏธ๋‹ˆ์•ฑ์œผ๋กœ๋‚˜ ์›น์•ฑ์œผ๋กœ๋‚˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

๐Ÿ˜ป ์˜ˆ์˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด

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

์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํƒ€๋ฒ…์Šค ์›น, ์•ฑ, ๋ฏธ๋‹ˆ์•ฑ์—์„œ ์œ„์น˜ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž. ์–ด๋–ค ๊ถŒํ•œ ์š”๊ตฌ ์ฐฝ์„ ์Šน์ธํ•˜๊ณ  ์–ด๋–ค ๊ถŒํ•œ ์š”๊ตฌ ์ฐฝ์„ ๊ฑฐ์ ˆํ•  ๊ฒƒ ๊ฐ™์€๊ฐ€?

์Šคํƒ€๋ฒ…์Šค ์›น์•ฑ ์Šคํƒ€๋ฒ…์Šค ๋ฏธ๋‹ˆ์•ฑ ์Šคํƒ€๋ฒ…์Šค ์•ฑ

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

๐Ÿ“จ ์˜ˆ์œ ๊ถŒํ•œ ์š”๊ตฌ ์ฐฝ์„ ์œ„ํ•ด

์•ž์„œ ์ด์•ผ๊ธฐํ•œ ์˜ˆ์‹œ๋ฅผ ์ด์–ด๋ณด์ž๋ฉด ์œ„์น˜ ์ •๋ณด ๊ถŒํ•œ ์š”๊ตฌ ์ฐฝ์€ Geolocation API๊ฐ€ ๋ถˆ๋ฆด ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ๋ณ„๊ฑฐ ์—†๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ”๋กœ ๋‚˜์˜จ๋‹ค.

navigator.geolocation.getCurrentPosition()

๋ฐฐ๊ฒฝ 1๊ณผ ๋ฐฐ๊ฒฝ 2์— ๊ทผ๊ฑฐํ•ด, ์œ„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์„ ์‹œ (์›น ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ์œ„์น˜ ์ •๋ณด๋ฅผ ์š”์ฒญ ์‹œ) ์‚ฌ์šฉ์ž๋ฅผ ์„ค๋“ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๊ฒฝ ์ •๋ณด์™€ ๋””์ž์ธ์„ ๊ฐ–์ถ˜ ๊ถŒํ•œ ์š”๊ตฌ์ฐฝ์ด ๋‚˜ํƒ€๋‚˜์•ผ ํ•œ๋‹ค.

๐ŸŒ ํ•˜์ง€๋งŒ ๊ทธ๊ฑด ๋ธŒ๋ผ์šฐ์ €์˜ ์ผ์ธ๋ฐ?

์ €๋ ‡๊ฒŒ ์•Œ๋ฆผ์ฐฝ์„ ๋„์šฐ๋Š” ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์˜์—ญ์ด๋‹ค. ๋•Œ๋ฌธ์—, ์›น๋ทฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ (iOS์˜ ๊ฒฝ์šฐ WKWebView) ๋ฏธ๋‹ˆ์•ฑ์„ ๊ตฌ๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ €๋ ‡๊ฒŒ ์œ„์น˜ ๊ถŒํ•œ ์š”๊ตฌ ์ฐฝ์ด ๊ทธ๋Œ€๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๋‹น๊ทผ์— ๊ตฌํ˜„๋œ ๋‹น๊ทผ๋ฏธ๋‹ˆ์—๋„ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ๊นŒ? ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ?

์˜คํžˆ๋ ค ์•Œ ์ˆ˜ ์—†๋Š” URL์ด ๋‚˜ํƒ€๋‚˜์„œ ๊ฑฐ๋ถ€๊ฐ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽญ ์–ด์ฐจํ”ผ ๋ˆ„๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๋ชจ๋ฅธ๋‹ค

99.99%์˜ ์›น์•ฑ์˜ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ๊ณณ์— getCurrentPosition()ํ•  ๋ฟ์ด์ง€ ๊ทธ๊ฒƒ์ด ์ง„์งœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š”๊ฑด์ง€๋Š” ๊ด€์‹ฌ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์งœ navigator๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์–ด๋–จ๊นŒ?

const navigator = {
  geolocation: {
    getCurrentPosition(success, error) {
      // do some random stuff...
    },
  },
}

JavaScript๋Š” navigator์˜ ์ง„์œ„๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ธฐ์— ์›ํ•˜๋Š” ๋™์ž‘์„ ์‚ฌ์ด์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ Shim์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‹ฌ(shim)์€ API ํ˜ธ์ถœ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ฐ€๋กœ์ฑ„๊ณ  ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ž‘์—… ์ž์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ž‘์—…์„ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. (In computer programming, a shim is a library that transparently intercepts API calls and changes the arguments passed, handles the operation itself, or redirects the operation elsewhere.) โ€” Shim (computing)

๊ณ ์–‘์ด๊ฐ€ ์œ„์น˜ ๊ถŒํ•œ์„ ๋‹ฌ๋ผ๊ณ  ์š”๊ตฌํ•˜๋Š” ๋ฐ๋ชจ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

๊ธฐ๋ณธ ๋™์ž‘ ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝํ•œ ๋™์ž‘

์ฆ‰, ์ด๋ฅผ ์กฐ๊ธˆ ๋” ๊ณ ๋„ํ™”ํ•ด์„œ ์•„์˜ˆ document, ์ฆ‰ DOM ์ž์ฒด๋ฅผ JavaScript๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•˜๋ฉด ๋ฏธ๋‹ˆ์•ฑ์Šค๋Ÿฌ์šด ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ—ฟ ์ผ๊ด€์ ์ธ ๊ฒฝํ—˜์„ ์œ„ํ•ด

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

โšก๏ธ ๋น ๋ฅธ ๊ฒฝํ—˜์„ ์œ„ํ•ด

์„œ๋กœ ๋‹ค๋ฅธ ๋ฏธ๋‹ˆ์•ฑ์„ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ์•ฑ์„ ์—ด๊ณ  ๋‹ซ๊ธฐ ์œ„ํ•ด ์•ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ prefetch ํ•ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์„ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๊ธฐ์—, iframe ์•ˆ์— ๋ฏธ๋‹ˆ์•ฑ์„ ๋‹ด์•„๋‘๊ณ  ์™ธ๋ถ€์—์„œ๋Š” ์Šˆํผ์•ฑ์˜ ์›น๋ทฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  prefetchํ•˜๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ iframe ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์™ธ๋ถ€๋กœ ๊ณต๊ฒฉ ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ ๋“ฑ์„ ๋ง‰๊ธฐ ์œ„ํ•ด crossOriginIsolated์™€ Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy ํ—ค๋” ์„ค์ •์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค.

๐Ÿฅถ ๊ฒฐ๋น™ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜์…จ๋‚˜?

์–ผ์–ด๋ถ™์€ ๋ฏธ๋‹ˆ์•ฑ์„ ๊ฐ•์ œ์ข…๋ฃŒํ•˜๋Š” ์Šˆํผ์•ฑ

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋˜๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. iframe์€ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰, ๋ฏธ๋‹ˆ์•ฑ์ด ๋ฉˆ์ถ”๋ฉด ์Šˆํผ์•ฑ์˜ ์ข…๋ฃŒ ๋ฒ„ํŠผ ๋˜ํ•œ ๋จนํ†ต์ด ๋œ๋‹ค.

๐Ÿ•ธ ์›น์—์„œ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

JavaScript์€ Single-Threadedํ•˜์ง€ ์•Š๋‚˜?

๋ฐ˜์€ ๋งž๊ณ  ๋ฐ˜์€ ํ‹€๋ฆฌ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ์•ˆ์˜ JavaScript์€ Single-Threadedํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ Web Worker๋ผ๋Š” ๋ณ„๋„์˜ ์žฅ์น˜๋ฅผ ํ†ตํ•ด Multi-Thread ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Web Worker์—์„œ iframe์„ ๊ตฌ๋™ํ•œ๋‹ค๋ฉด ๋ฏธ๋‹ˆ์•ฑ์ด ๋ฉˆ์ถ”์–ด๋„ ์Šˆํผ์•ฑ์€ ๋ฉˆ์ถ”์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

๐Ÿง‘โ€๐Ÿ”ง Worker ์•ˆ์—๋Š” DOM API๊ฐ€ ์—†๋‹ค

Web Worker ์•ˆ์—์„œ๋Š” DOM API๋ฅผ ์ ‘๊ทผํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. DOM API๋ผ๋Š” ๊ฒƒ๋„ ๊ฒฐ๊ตญ ๋ง ๊ทธ๋Œ€๋กœ JavaScript ๊ธฐ๋ฐ˜์˜ Object Model์ด๊ธฐ ๋•Œ๋ฌธ์— DOM API์™€ ๋˜‘๊ฐ™์ด ์ƒ๊ธด ๊ฐ€์งœ DOM์„ Worker ์•ˆ์— ๋‚ด๋ ค์ฃผ๊ณ , ๊ทธ ๊ฐ€์งœ DOM์— ์กฐ์ž‘๋œ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์ง„์งœ DOM์— ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ด ์‚ฌ์ด์—์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๊ฒŒ ์ ํ•ฉํ•œ ์ž‘์—…์ธ์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์›์ฒœ์ ์œผ๋กœ ์–ด๋ทฐ์ง•์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘ป ๋ฏธ์…˜ ์ž„ํŒŒ์„œ๋ธ”์„ ์ฐ๋Š”๋‹ค

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

๋‹คํ–‰ํžˆ๋„ ๋น„์Šทํ•œ ์—ฐ๊ตฌ๊ฐ€ ์„ ํ–‰๋˜์–ด ์žˆ๋‹ค. Google ์‚ฌ์—์„œ AMP์— ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ WorkerDOM์ด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ๊ณ , BuilderIO ์‚ฌ์—์„œ ์จ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋ฅผ Worker์— ๋ถ„๋ฆฌํ•  ๋ชฉ์ ์œผ๋กœ Partytown์ด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋‘˜ ๋‹ค ์™„์ „ํ•œ ๊ตฌํ˜„์ฒด๋Š” ์•„๋‹ˆ๋‹ค. WorkerDOM์€ Spectre ๋ณด์•ˆ ์‚ฌ๊ณ ๊ฐ€ ํ•œ์ฐฝ์ผ ๋•Œ ์ œ์ž‘๋˜์—ˆ๊ธฐ์— SharedArrayBuffer์™€ Atomics๋ฅผ ํ™œ์šฉํ•œ ๋™๊ธฐ์  ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. Partytown์€ Event Prevent Default๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋ณธ์งˆ์ ์œผ๋กœ, ๋ฏธ์…˜ ์ž„ํŒŒ์„œ๋ธ” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€์šด๋ฐ์—์„œ ์ ์ ˆํ•˜๊ฒŒ ์จ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ’ฝ ๋™๊ธฐ์  ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค

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

๐Ÿค ๋™๊ธฐ์ ์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋˜์ง€!

๊ธฐ๋ณธ์ ์œผ๋กœ JavaScript๋Š” ์‚ฌ์šฉ์ž ๋ฐ˜์‘์ด ํ•„์ˆ˜์ ์ธ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฏ€๋กœ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์›น ๊ฐœ๋ฐœ์ž๋“ค์„ ๋–จ๊ฒŒ ๋งŒ๋“œ๋Š” ๋…ธ๋‹ต ์‚ผํ˜•์ œ(Callbacks, Promise, Async/Await)๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€. ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” JavaScript๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๋œป์€, ๋‚ด๊ฐ€ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๊ทธ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ณ„์‚ฐ๋˜๋Š” ๋™์•ˆ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์ •์ง€๋œ ์ฑ„๋กœ ๊ฐ€๋งŒํžˆ ์žˆ๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๋™๊ธฐ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  1. Synchronous XMLHttpRequest
    • ๋™๊ธฐ์ ์ธ XMLHttpRequest๋ฅผ ๊ฐ€์งœ๋กœ ํ•˜๋‚˜ ๋ณด๋‚ด๋‘๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ JavaScript ์—ฐ์‚ฐ์„ ์ •์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Deprecated๋œ ๋ฐฉ๋ฒ•์ด๊ณ  ์•ฝ๊ฐ„์˜ ํŽธ๋ฒ•์— ๊ฐ€๊นŒ์šด ๋‚ด์šฉ์ด๋‹ค. Synchronous and asynchronous requests - Web APIs | MDN
  2. SharedArrayBuffer and Atomics
    • SharedArrayBuffer๋Š” Web Worker์™€ Main Thread ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค. Atomics๋Š” ์ด๋Ÿฐ ์—ฐ์‚ฐ์„ Thread-Safeํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ SharedArrayBuffer์— ์ ‘๊ทผํ•˜๋Š” ๊ตํ†ต ์ •๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์‹œ์—, Atomics๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ๋™๊ธฐ์ ์œผ๋กœ ์ •์ง€์‹œํ‚ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฏธ๋‹ˆ์•ฑ์˜ ๊ฒฝ์šฐ์—๋Š” Web Worker๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ SharedArrayBuffer์™€ Atomics๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

โœ‚๏ธ ์˜คํ”„๋ผ์ธ์—์„  ์ ‘์†์ด ์–ด๋ ต๋‹ค

๊ธฐ์กด์˜ ์›น ํ™˜๊ฒฝ์—์„œ๋Š” ์˜คํ”„๋ผ์ธ ํ™˜๊ฒฝ์—์„œ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ„์‚ฐ๊ธฐ ๋ฏธ๋‹ˆ์•ฑ์ด ์กด์žฌํ•˜๋ฉด, ๋„คํŠธ์›Œํฌ ์—†์ด๋„ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„์™€๋„ ํฌ๊ฒŒ ์—ฐ๊ด€๋œ๋‹ค. Progressive Web App์„ ํ™œ์šฉํ•˜์—ฌ ์˜คํ”„๋ผ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, PWA ๋˜ํ•œ ์ดˆ๊ธฐ์— ์ˆ˜๋งŽ์€ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ์›นํŽ˜์ด์ง€๋ฅผ ์ €์žฅํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์—์„œ ์—ฌ์ „ํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๐Ÿ“ฆ ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ๋ณด๋‚ธ๋‹ค

์ถœ์ฒ˜: web.dev/web-bundles

์ด ๋˜ํ•œ ํ•˜๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค. Google์—์„œ CBOR ํ˜•์‹์— ๊ธฐ๋ฐ˜ํ•œ WebBundle์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์›น๋ฒˆ๋“ค์€ ์—ฌ๋Ÿฌ HTML, CSS, JS, ์ด๋ฏธ์ง€ ๋“ฑ์„ ํ•˜๋‚˜์˜ ์••์ถ•๋œ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์ด๋ฏธ Chrome์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๊ณ , Google์—์„œ ์‹คํ—˜์ ์œผ๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ ์—ฐ๊ตฌํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋ฌผ๋ก  Google์˜ ๋ณธ ๋ชฉ์ ์€ ์ด ๋ฌถ์Œ ๋ฐฐ์†ก์„ ํ†ตํ•ด URL ๊ธฐ๋ฐ˜์˜ ๊ด‘๊ณ  ์ฐจ๋‹จ ๊ธฐ์ˆ ์„ ๋ฌด๋ ฅํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด์ง€๋งŒ. ๊ด€๋ จ ๊ธ€ํƒ€๋ž˜

๐Ÿฆ  ์•…์„ฑ ์ฝ”๋“œ๋กœ ๋ฐ”๋€Œ๋ฉด?

GitHub์—์„œ ๋ฉ€์ฉกํ•ด๋ณด์ด๋Š” ์ฝ”๋“œ๋„ NPM์—์„œ๋Š” ๊ณต๊ฒฉ ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ์ฑ„๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ๋กœ ์›”๊ฐ„ 4์ฒœ๋งŒ๋ฒˆ ์ด์ƒ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” UAParser.js ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ NPM ์ €์žฅ์†Œ๊ฐ€ ํ•ดํ‚น๋˜์–ด ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž…๋˜์–ด ๋ฐฐํฌ๋œ ์  ์žˆ๋‹ค. ์‚ฌ๊ณ  ๊ธฐ๋ก

์ด๋ ‡๊ฒŒ ์ˆ˜๋งŽ์€ ๊ธฐ์—…๋“ค์ด ์‚ฌ์šฉํ•  ์ •๋„๋กœ ๋ฏฟ์Œ์ง์Šค๋Ÿฌ์›Œ ๋ณด์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋ฐฉ์‹ฌํ•˜๋ฉด ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  ์Šˆํผ์•ฑ์˜ ์ž…์žฅ์—์„œ๋Š” ๋ฏธ๋‹ˆ์•ฑ ์ œ์ž‘์‚ฌ์˜ ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ๋ฐ›์•„์„œ ๊ฒ€์ˆ˜๋ฅผ ํ•˜๊ณ  ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์น˜์ง€ ๋ชปํ•˜๋„๋ก ์Šค์Šค๋กœ ํ˜ธ์ŠคํŒ…ํ•ด์•ผ ํ•œ๋‹ค.

๊ทผ๋ฐ ์ด๊ฑด ์ด๋ฏธ ๊ฐœ๋ฐœ์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์–ด ๋ณ„๋„๋กœ ๋ถ™์ผ๋งŒํ•œ ๋ง์ด ์—†๋‹ค.

๐Ÿ˜Š ๊ฒฐ๋ก 

์œ„ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ๋‹ค ํ•ด๊ฒฐํ•˜๋ฉด ์ œ๋Œ€๋กœ ๋œ ๋ฏธ๋‹ˆ์•ฑ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ด์ œ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๊ฐ€ ๋ชจ๋‘ ์ƒ๋‹นํ•˜๋‹ค. ํŠนํžˆ ๋‚˜๋Š” ์ธํ„ด ๊ธฐ๊ฐ„ ๋™์•ˆ 2๋ฒˆ๊ณผ 3๋ฒˆ ๋ฌธ์ œ์— ์ง‘์ค‘ํ–ˆ์ง€๋งŒ ์›Œ๋‚™ ๊นŠ์€ ์˜์—ญ์œผ๋กœ ํŒŒ๊ณ ๋“ค๋‹ค ๋ณด๋‹ˆ ๊ด€๋ จ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋„ ์ด๋ฏธ ๋ณธ ์‚ฌ์ดํŠธ ๋ช‡ ๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๋“ฑ ์–ด๋ ค์›€์ด ๋งŽ์•˜๋‹ค.

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