Troika: [troika-three-text] IOS Safari ๋กœ๋”ฉ ๋ฌธ์ œ

์— ๋งŒ๋“  2020๋…„ 11์›” 21์ผ  ยท  47์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: protectwise/troika

์—ฌ๋ณด์„ธ์š”!

๋จผ์ € ์ด ํŒจํ‚ค์ง€๊ฐ€ ๊ณผ๊ฑฐ์˜ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ณด๋‹ค ํ›จ์”ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์› ๋‹ค๋Š” ์ ์„ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ์˜ฌ๋ ค์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ ๋˜๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋ฉด?

ํ…์ŠคํŠธ๋กœ "welcome"์ด ์žˆ๋Š” ํฐ ๊ธ€๊ผด์€ .otf ํŒŒ์ผ(restgold.otf)์ž…๋‹ˆ๋‹ค.
ํ…์ŠคํŠธ๊ฐ€ .ttf ํŒŒ์ผ(Raleway-Medium.ttf)์ด๋ฏ€๋กœ "Hi my name is..."๊ฐ€ ์žˆ๋Š” ์ž‘์€ ํ…์ŠคํŠธ
ํฐํŠธ ํŒŒ์ผ์ด ํ•„์š”ํ•˜์‹œ๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”!

์žฅ์น˜: ์•„์ดํฐ7
IOS: 14.1
๋ธŒ๋ผ์šฐ์ €: ์‚ฌํŒŒ๋ฆฌ

ํŒจํ‚ค์ง€ ์„ธ๋ถ€ ์ •๋ณด:
"3": "^0.122.0",
"troika-three-text": "^0.35.0",
"troika-three-utils": "^0.35.0",

IMG_1509
IMG_1510
IMG_1511
IMG_1512

๋ชจ๋“  47 ๋Œ“๊ธ€

์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! iOS Safari์—์„œ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•œ ๊ฒƒ์€ ๋‹น์‹ ์ด ์ฒ˜์Œ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด์ „์—๋Š” ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์‚ฌ์ดํŠธ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์šฐ์—ฐํžˆ drei ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ง์ ‘?

์•ˆ๋…•ํ•˜์„ธ์š” @lojjic ์ด ํŒจํ‚ค์ง€๋ฅผ three.js์™€ ํ•จ๊ป˜ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ 3๊ฐœ์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด์œ ๋Š” ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” createDerivedMaterial ํ•จ์ˆ˜๋„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ™•์ธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

iPhone 8์—์„œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋””๋ฒ„๊น…์„ ์‹œ์ž‘ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์ง€๋งŒ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

@atlmtw @lojjic ์—ฌ๋Ÿฌ ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์‚ฌํŒŒ๋ฆฌ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์ „์ฒด ์›น ์‚ฌ์ดํŠธ์—์„œ ๊ณ ์œ ํ•œ ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

+1
์žฅ๋ฉด๋‹น ์—ฌ๋Ÿฌ ๊ธ€๊ผด = ์ผ๋ถ€ ๊ธ€๊ผด์€ iphone X, iphone SE์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ง€๊ธˆ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „๊ณผ ๋™์ผํ•œ iPhone 8์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ์ด์ƒ designdalena.com์—์„œ ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์‚ฌ์ดํŠธ๊ฐ€ ๋” ์ด์ƒ troika-three-text๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์‹คํŒจํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

https://uqgxq.csb.app/

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํ…Œ์ŠคํŠธ/๋””๋ฒ„๊ทธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋”˜๊ฐ€์—์„œ ์ด๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @lojjic

ํ™•์ธ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŠธ๋กœ์ด์นด๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ—˜์„ ์ฆ๊ธด๋‹ค.

@atlmtw ํ™•์ธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ œ์–ด์— ์‚ฌ์ดํŠธ์˜ ์ด์ „ ๋ฒ„์ „์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋‹น์‹ ์˜ ๊ฒƒ์€ ๋ฏฟ์„๋งŒํ•œ ์žฌํ˜„์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @lojjic
์ด๊ฒƒ์— ํ–‰์šด์ด ์žˆ์Šต๋‹ˆ๊นŒ? iPhone(iPad ๋ฐ macOS์—์„œ ์ž‘๋™)์—์„œ >1 ๊ธ€๊ผด์ด ์‚ฌ์šฉ๋  ๋•Œ๋„ ์ด๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ๋„ ์ด๊ฒƒ์€ ํ•ญ์ƒ ๋ณต์ œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ 1-2/10๋ฒˆ๋งŒ ๋ฐœ์ƒํ•˜๋ฉฐ ์ฒซ ๋ฒˆ์งธ ๋กœ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ธ€๊ผด ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Btw, ์ผ์„ ์‚ฌ๋ž‘ํ•˜์‹ญ์‹œ์˜ค :100:

@amitrajput1992 ์•„๋‹ˆ์š”, ์—ฌ์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ํ•˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@lojjic
์ด๊ฒƒ์„ ์‹œ๋„?
๋ฐ์Šคํฌํƒ‘์—์„œ ์—ด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์ƒ์œผ๋กœ ์ธ์‡„๋œ 6๊ฐœ์˜ ๋‹ค๋ฅธ ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋‚˜์™€ ํ•จ๊ป˜ ๋ช‡ ๋Œ€์˜ ์žฅ์น˜์—์„œ ์ด ๋งํฌ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๊ณ  BrowserStack์—์„œ ๋ช‡ ๋Œ€๋Š” ๋ชจ๋‘ ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ๋ช‡ ๋ฒˆ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ์ž‘๋™ํ•˜๋Š”๋ฐ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ BrowserStack์—์„œ ๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„์ดํฐ 8 + ์‚ฌํŒŒ๋ฆฌ v13์— ์žˆ์Šต๋‹ˆ๋‹ค
Screenshot from 2021-06-10 19-01-09

์ด๊ฒƒ์€ ๋‚ด iPhone 11 + Safari 14์—์„œ
E81012E6-0B7F-44CE-8E52-03729D73BD28

์›น ์ž‘์—…์ž์—์„œ ๊ธ€๊ผด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์‚ฌํŒŒ๋ฆฌ๊ฐ€ ์›น ์ž‘์—…์ž์—๊ฒŒ ๊ณ ํ†ต์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@amitrajput1992 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ/๋˜๋Š” ์ตœ์†Œํ™”๋œ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‚ฌํŒŒ๋ฆฌ๊ฐ€ ์›น ์ž‘์—…์ž์—๊ฒŒ ๊ณ ํ†ต์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๋Š” ๊ฒƒ์„ ๋“ค์—ˆ๊ณ  ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ™•์‹คํžˆ ๊ทธ๋Ÿด๋“ฏํ•œ ๋ฒ”์ธ์ด์ง€๋งŒ Safari์—์„œ ์ž‘์—…์ž์˜ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@lojjic
๊ทธ ์ข‹์€ ์†Œ๋ฆฌ. ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋„์›€์ด ๋œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ํ•œํŽธ, ๋‚˜๋Š” ๋””๋ฒ„๊น…์„ ๊ณ„์†ํ•˜๊ณ  ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๋Š” ๊ฒƒ์„ ๋“ค์—ˆ๊ณ  ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ™•์‹คํžˆ ๊ทธ๋Ÿด๋“ฏํ•œ ๋ฒ”์ธ์ด์ง€๋งŒ Safari์—์„œ ์ž‘์—…์ž์˜ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ ์ •ํ™•ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์–ด๋””์—์„œ๋‚˜ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋กํ•˜์ง€ ์•Š์Œ). ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์ œ๊ฐ€ ๋งŒ์ง€์ž‘๊ฑฐ๋ฆฌ๋Š” ๋™์•ˆ ์•Œ์•„์ฐจ๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. react360์€ ์›น ์ž‘์—…์ž ๋‚ด๋ถ€์—์„œ ์ „์ฒด ๋ฐ˜์‘ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ์ด์ „ react-vr(์ง€๊ธˆ์€ ํ๊ธฐ๋จ)์ด์—ˆ๊ณ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ ธ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—์„œ ๋‚ด ํด๋ฆญ ์ˆ˜์‹ ๊ธฐ๋กœ ์ „ํŒŒํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ 300ms์—์„œ 500ms ์‚ฌ์ด์˜ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ํด๋ฆญ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ข…์ข… ๋ช‡ ๋ฒˆ์˜ ํด๋ฆญ๋„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” 3๊ฐœ์˜ gif ๋ Œ๋”๋Ÿฌ์ธ repo๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜์Œ์—๋Š” ์˜คํ”„์Šคํฌ๋ฆฐ ์บ”๋ฒ„์Šค๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋”์ฐํ–ˆ๊ณ  ์—ฐ์† ํ”„๋ ˆ์ž„์—์„œ ํ…์Šค์ฒ˜๊ฐ€ ํ˜ผํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉด ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

ํ•ญ์ƒ ๋‚˜ํƒ€๋‚˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ฐ€๋” ๋‚˜ํƒ€๋‚˜๋Š” ์ด๋Ÿฌํ•œ ์•„ํ‹ฐํŒฉํŠธ์— ๋จผ์ € ์ง‘์ค‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Image from iOS

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

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

๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(์–ด์ฉŒ๋ฉด XHR์ด ๋ถ€๋ถ„์ ์ธ arraybuffer ์‘๋‹ต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?). ๊ทธ๋Ÿฌ๋‚˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ ˆ์ด ๋ฒ„ํผ ์†์ƒ์ด ์—ฌ๊ธฐ์—์„œ ๋ฒ”์ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ† ๋ก ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋กœ๋“œ๋งต์— ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ๋„์›€์ด๋œ๋‹ค๋ฉด ์•„๋ž˜ ๋ฒ„์ „์—์„œ drei๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ troika๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
@react-3/์„ฌ์œ : 6.2.3
@react-three/drei: 6.0.1
ํŠธ๋กœ์ด์นด: 0.42.0
3: 0.129.0

๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ๋ช‡ ์ดˆ ๋™์•ˆ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๊ฝค ํ˜•ํŽธ์—†๋Š” ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ตœํ›„์˜ ์ˆ˜๋‹จ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์ ์–ด๋„ iOS์—์„œ๋Š” ์ด์ œ ๋ชจ๋“  ๋‹ค๋ฅธ ํ…์ŠคํŠธ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๋‹จ์ผ ๊ธ€๊ผด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...? ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฐ€๋” ๊ทธ ๋‹จ์ผ ๊ธ€๊ผด๋กœ ์™œ๊ณก๋œ SDF๋ฅผ ๋ด…๋‹ˆ๋‹ค. ์ด๋Š” ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ ๊ธ€๊ผด๋กœ ์ธํ•ด ์•…ํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋‹จ์ผ ๊ธ€๊ผด์—์„œ๋„ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค.facepalm:

ํ  ์‹ค์ œ๋กœ Safari devtools์— ์—ฐ๊ฒฐ๋  ๋•Œ ์ƒˆ ๋‹จ์ผ ๊ธ€๊ผด์—์„œ๋งŒ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๊ฝค ์ผ๊ด€๋˜๊ฒŒ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ์–ด๋–ค ๋‹จ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์–ด๋Š ์ชฝ์ด๋“ , Safari์˜ USB ์—ฐ๊ฒฐ devtools๊ฐ€ ๊ด€๋ จ ์ฝ”๋“œ์—์„œ ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. @amitrajput1992 ํ…Œ์ŠคํŠธ ์•ฑ์„ ๋กœ์ปฌ์—์„œ ๋นŒ๋“œ/์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ํŒŒ์ผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ๋””๋ฒ„๊ทธํ•  ํŠธ๋กœ์ด์นด ์ฝ”๋“œ๋ฅผ ๊ต์ฒดํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@lojjic ์›๋ž˜ ์•ฑ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ํ”„๋กœ๋•์…˜ ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋กœ ์Šคํ† ๋ฆฌ๋ถ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ๋ Œ๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณง ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ณด๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@lojjic
๋‚ด ํ”„๋กœ๋•์…˜ ์•ฑ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋กœ ๊ธฐ๋ณธ ์žฌํ˜„์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/amitrajput1992/r3f-experiments
๋‚ด iPhone 11 ๋ฐ BrowserStack์—์„œ ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๊ธฐ์— ์Šคํ† ๋ฆฌ๋ถ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://amitrajput1992.github.io/r3f-experiments

@amitrajput1992 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์Šคํ† ๋ฆฌ๋ถ์—์„œ ๊ธ€๊ผด์„ ์ œ๊ณตํ•˜์—ฌ gmetri ์‚ฌ์ดํŠธ์—์„œ ๊ธ€๊ผด์„ ๋กœ๋“œํ•˜๋Š” CORS ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ... ๊ทธ๋Ÿฌ๋ฉด ๋‚ด Safari devtools๋Š” ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” _crashes_ ์ „์ฒด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿคฆ๐Ÿคฆ๐Ÿคฆ๐Ÿคฆ๐Ÿคฆ๐Ÿคฆ ๊ทธ๋ž˜์„œ ๋‚˜๋Š” console.log ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ณผ ์ˆ˜์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋Š” ์ •๋ง๋กœ ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‘?

์ขŒ์ ˆ๊ฐ; ๋‚ด์ผ์€ ์ข€ ๋” ์ƒ์พŒํ•œ ๋งˆ์Œ์œผ๋กœ ๋Œ์•„์˜ค๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

@lojjic๋‹˜ , ์ง€๊ธˆ์€ mac ์‹œ์Šคํ…œ์ด ์—†์ง€๋งŒ ๋กœ์ปฌ ํฌ์›Œ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์Šคํƒ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น ์ž‘์—…์ž์™€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋‚ด๋ถ€์— ๊ธฐ๋ก๋œ sdf ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ํ†ต์‹  ๊ฐ„์˜ ์ง๋ ฌํ™”-์—ญ์ง๋ ฌํ™” ํ”„๋กœ์„ธ์Šค ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์™„์ „ํžˆ ํ™•์‹คํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณ„์†ํ•ด์„œ ๋””๋ฒ„๊น…ํ•  ๊ฒƒ์ด๋‹ค.
safari dev-tools๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 100๋ถ„ ํ‰๊ฐ€ํŒ์„ ์ œ๊ณตํ•˜์—ฌ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ฝ”๋“œ์—์„œ ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Œ

๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ ์ค„๊ณผ console.log ํ›„์— ์›น ์ž‘์—…์ž๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋˜์ง€๋ผ๋Š” ๋ฉ์ฒญํ•œ ์ œ์•ˆ.

๋‚ด iPhone 6/11์˜ ์‚ฌ์ง„:

์ฝ”๋“œ์˜ ๊ฐ ์ค„๊ณผ console.log ํ›„์— ์›น ์ž‘์—…์ž๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋˜์ง€๋ผ๋Š” ๋ฉ์ฒญํ•œ ์ œ์•ˆ

์ „ํ˜€ ๋ฉ์ฒญํ•œ ์ œ์•ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค! ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜์ง€๋งŒ Safari์˜ devtools๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์ฆ‰์‹œ ์ถฉ๋Œํ•˜๋ฏ€๋กœ console.log ์ถœ๋ ฅ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. :(

์—ฐ๊ฒฐ๋œ iPhone์—์„œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ URL์„ ์—ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ํฌํŠธ ํฌ์›Œ๋”ฉ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์—ฐ๊ฒฐ๋œ iPhone์—์„œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ URL์„ ์—ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ํฌํŠธ ํฌ์›Œ๋”ฉ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋กœ์ปฌ ๋„คํŠธ์›Œํฌ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด iPhone์—์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ https://localhost.run์„ ํ†ตํ•ด ํŒŒ์ดํ•‘์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ Safari devtools๋ฅผ ์—ด์ž ๋งˆ์ž ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ž์ฒด๋Š” ์ž˜ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค(๋•Œ๋กœ๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์ง€๋งŒ).

๋ช‡ ๊ฐ€์ง€ ๋ธ”๋กœ๊ทธ์—์„œ ์ด๊ฒƒ์ด 2๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ํœด๋Œ€ํฐ ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ 100%์ผ ๋•Œ
  2. ์ผ€์ด๋ธ” ์—ฐ๊ฒฐ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋””๋ฒ„๊น…ํ•  ๋•Œ

์ด๊ฒƒ์€ ์œ ์‚ฌํ•œ ๋ผ์ธ์—์„œ ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. https://developer.apple.com/forums/thread/92290

๊ทธ๋Ÿฌ๋‚˜ Safari์˜ devtools๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์ฆ‰์‹œ ์ถฉ๋Œํ•˜๋ฏ€๋กœ console.log ์ถœ๋ ฅ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. :(

๊ธฐ๋ณธ console.log ๊ธฐ๋Šฅ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

console.log = (msg) => document.getElementById("my_ios_console").innerHTML += msg;

ํ•˜์ง€๋งŒ html ํŽ˜์ด์ง€ ๋˜๋Š” JS ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น div๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<div id="my_ios_console" style="position: absolute; top:0; left: 0; background: white"></div>

์ด๊ฒƒ์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@munrocket ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‘ ์•ˆ๋…•,

์ด ์Šค๋ ˆ๋“œ์—์„œ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋””๋ฒ„๊น…์— ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ๊ทผ Xcode 13 ๋ฒ„์ „(๋ฒ ํƒ€) ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ๋‚ด 3D ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ๋ฅผ ์ž˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ์ด์ „ ๋ฒ„์ „๊ณผ ๊ณ„์† ์ถฉ๋Œํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

@lojjic ์ด๊ฒƒ์— ํ–‰์šด์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์— ํ–‰์šด์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ๋ถˆํ–‰ํžˆ๋„ ์ตœ๊ทผ์— ์ด์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์›น ์ž‘์—…์ž๋ฅผ ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ™•์ธ์„ ์œ„ํ•ด

์—ฌ๋Ÿฌ๋ถ„, ์•ˆ๋…•ํ•˜์„ธ์š”,

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

๋” ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ์•„๋ž˜ ์ •๋ณด์™€ ์กฐ์ •์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ถŒ์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๊ณต์œ ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ •๋ณด๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ. ์˜ˆ, ํ† ๋ก ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ iOS Safari์˜ WebWorker์˜ ํŠน์ • ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Firefox(win10), Chrome(win10), Opera(win10), Safari(macOS big sur) ๋“ฑ์—์„œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ธ€๊ผด์ด 100% ์ œ๋Œ€๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Safari(iOS)๋Š” ์—ฌ๋Ÿฌ WebWorker ๊ฐ„์— ์ผ์ข…์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ์™„์ „ํžˆ ์‚ฌ์‹ค์ธ์ง€ ๋˜๋Š” ์–ด๋–ค ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ด ์„œ๋กœ ๊ฐ„์„ญํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค).

์ดˆ. ์ด ์ฃผ์žฅ๋œ ๊ฒฝ์Ÿ ์กฐ๊ฑด(๋˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ด๋“  ๊ฐ„์—)์€ ๋กœ๋“œ๋˜๋Š” ๊ธ€๊ผด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฒ„ํผ๊ฐ€ Troika์˜ Typr ์ข…์†์„ฑ์—์„œ readShort ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ๋•Œ ๋ช‡ ๊ฐœ์˜ NaN ๊ฐ’์„ ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ Typr์— ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„. ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์†Œ์ˆ˜์˜ NaN ๊ฐ’์€ ํ˜ธ์ถœ ์Šคํƒ์„ ๊ณ„๋‹จ์‹์œผ๋กœ ์Œ“์•„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋ง์น˜๊ณ  ๋งˆ์นจ๋‚ด ๋ฌธ์ž ๋ชจ์–‘์ด ์™„์ „ํžˆ ์ž˜๋ชป ํ‘œ์‹œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ œ์‚ผ. ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ์œ„์น˜( Typr/bin.s ์˜ readShort ๊ธฐ๋Šฅ)๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„๋‚ธ ํ›„, ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

        readShort : function(buff, p)
    {
        //if(p>=buff.length) throw "error";
        var a = Typr._bin.t.uint8;
        a[1] = buff[p]; a[0] = buff[p+1];
        return Typr._bin.t.int16[0];
    },

๋‚ด๊ฐ€ ๋‹จ์ˆœํžˆ console.log(Typr._bin.t.int16[0])๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ ˆ๋Œ€ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ช‡ ๊ฐœ์˜ NaN์„ ์ธ์‡„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ธ์‡„ ์ž‘์—…์„ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ์ˆ˜์ฒœ ๋ฒˆ). ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์ƒ๋Œ€๋กœ ์ด ํ•จ์ˆ˜ ๋‚ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๋ฉด(๋””๋ฒ„๊ฑฐ ํ‚ค์›Œ๋“œ ๋˜๋Š” ์ค‘๋‹จ์ ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฝ˜์†”์— ์•ก์„ธ์Šคํ•  ์ˆ˜๋„ ์žˆ์Œ) ๊ฐ’์ด ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์ •๋˜๊ณ  NaN์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ฒฝํ•ฉ ์กฐ๊ฑด์„ ๋ฏฟ๊ฒŒ ๋จ). ์ฆ‰, ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋„ค ๋ฒˆ์งธ์ด์ž ๋งˆ์ง€๋ง‰์œผ๋กœ. ์ด๊ฒƒ์€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ค์ œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋Œ€ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. readShort ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ NaN์ด ์‚ฌ๋ผ์ง„๋‹ค๊ณ  ์œ„์—์„œ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์˜ ๋…์ฐฝ์ ์ธ ํ•ด์ปค ์‚ฌ๊ณ ๋ฐฉ์‹์€ readShort์˜ return ๋ฌธ ์•ž์— ์ด ์Šค๋‹ˆํŽซ์„ ํฌํ•จํ•˜๋Š” ๊ธฐ๋ฐœํ•œ ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

if (Number.isNaN(Typr._bin.t.int16[0])) {
    console.log()
}

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

๊ฒฐ๋ก ์ ์œผ๋กœ. ์—ฌ๊ธฐ๊ฐ€ ๋‚ด๊ฐ€ ์žˆ๋Š” ๊ณณ์ด๋‹ค. ๋”์ฐํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํšจ๊ณผ๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ์ „ํžˆ ์ด์— ๋Œ€ํ•œ ์‹ค์ œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Troika์— ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ๋ฌธ์ œ๋Š” ํ•ญ์ƒ Typr์— ์žˆ์—ˆ๊ฑฐ๋‚˜ iOS์˜ WebWorker ๊ตฌํ˜„์— ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ). ์–ด์จŒ๋“  ์ด ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์กฐ์‚ฌ์— ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ๋ฉฐ ์šฐ๋ฆฌ ๋ชจ๋‘ ์ด ์ •๋ณด๋ฅผ ๋๊นŒ์ง€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ ํ˜ธ์ถœ ์Šคํƒ:
Typr/bin.js - readShort
Typr/glyf.js - _parseGlyf
Typr/Typr.U.js - _drawGlyf
Typr/Typr.U.js - glyphToPath
Troika/FontParser_Typr.js - (์ต๋ช…) forEachGlyph
Troika/FontParser_Typr.js - wrapFontObj
Troika/FontParser_Typr.js - ๊ตฌ๋ฌธ ๋ถ„์„
...๊ทผ๋กœ์ž ๋ฌผ๊ฑด

๊ทธ๋ฆฌ๊ณ  @lojjic , MacOS Safari๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ USB๋ฅผ ํ†ตํ•œ iOS Safari ๋””๋ฒ„๊น… ๋ฌธ์ œ ํ•ด๊ฒฐ:
MacOS Safari DevTools๊ฐ€ ๋ฌดํ•œ ๋กœ๋“œ๋ฅผ ์ฃผ์žฅํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๊ฐ€ ์ถฉ๋Œํ–ˆ๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๋Š” ๋“ฑ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋‚˜ ํœด๋Œ€์ „ํ™”์— ์—ฐ๊ฒฐ์„ ๋Š์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜๋Š” DevTools๋ฅผ ๋ช‡ ๋ฒˆ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด์–ด๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช…ํžˆ ์ „ํ™”์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ด๋Ÿฐ ์ผ์ด ๋ช‡ ๋ฒˆ(๊ณ ํ†ต) ๋‚˜๊ณ  ๊ทธ๋ ‡๊ฒŒ(MacOS Big Sur์™€ iOS 15.0.1 ์—ฐ๊ฒฐ) ํ•ด๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ง์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

OMG @malulleybovo ํœด๊ฐ€์—์„œ ๋Œ์•„์™€์„œ ๋‹น์‹ ์˜ ๋ฐœ๊ฒฌ์„ ๋ณด์•˜๊ณ  ์™€์šฐ ์ •๋ง ๋†€๋ผ์šด ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜ƒ ์ด๋ ‡๊ฒŒ ์ฐพ์•„์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

readShort๊ฐ€ NaN์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•„๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ๋งˆ์นจ๋‚ด ์ด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š” _๊ฑฐ๋Œ€ํ•œ_ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์•„์‹œ๋‹ค์‹œํ”ผ ์ €๋Š” ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์™„์ „ํžˆ ๊ฐ‡ํ˜€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋˜ iOS ๊ธฐ๊ธฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ์€ ๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์งˆ๋ฌธ์€ Typr._bin.t.int16[0] ์ฝ๊ธฐ๊ฐ€ NaN์„ ์ƒ์„ฑํ•˜๋Š” _์™œ_ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฒ„ํผ ์ค‘ ํ•˜๋‚˜(๊ธ€๊ผด์˜ buff ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ Typr._bin.t.buff )์—์„œ ์ž˜๋ชป๋œ ๊ฐ’์„ ์–ป๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, buff/uint8/int16 ๊ฐ’์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์•„๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์‹œ์ ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋Œ€์กฐ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ๊ธฐ์— console.log()๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๋˜๋Š” ์ฝ˜์†”์— ์•ก์„ธ์Šคํ•˜๋ฉด JIT ๋ชจ๋“œ์—์„œ ๋น ์ ธ ๋‚˜์˜ฌ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ง€๋˜๊ณ  ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@lojjic ์ด์ง ์„ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ์ง€๊ธˆ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ข€ ๋” ํŒŒ๊ณ  ๋“ค์—ˆ๊ณ  ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ํฅ๋ฏธ๋กญ๊ณ  ์ด์ƒํ•œ ์†Œ์‹์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด์ „์— ๊ณต์œ ํ•œ readShort ์ฝ”๋“œ ์กฐ๊ฐ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋ฐฐ์—ด ๊ฐ’(๊ณต์œ  ๋ฐฐ์—ด ๋ฒ„ํผ ์‚ฌ์šฉ)์„ ์—ฟ๋ณด๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๊ฒฝ๋ ฅ์—์„œ ๋ณธ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ๊ธฐ์ดํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

        readShort : function(buff, p)
    {
        //if(p>=buff.length) throw "error";
        var a = Typr._bin.t.uint8;
        a[1] = buff[p]; a[0] = buff[p+1];
        /***** Right here, I peeked at Typr._bin.t.int16, Typr._bin.t.int8, and Typr._bin.t.uint8 ******/
        return Typr._bin.t.int16[0];
    },

๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ readShort์—์„œ NaN์ด ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ์—ฟ๋ณด๋Š” ๋™์•ˆ, buff[p]=255 ๋ฐ buff[p+1]=6(๋‘˜ ๋‹ค ์œ ํšจํ•œ uint8 ๊ฐ’)์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๋‚˜๋Š” Typr._bin.t.uint8์˜ ๊ฐ’์„ ์—ฟ๋ณด์•˜๊ณ  ์˜ˆ์ƒํ•œ ๋Œ€๋กœ [6, 255, 0, ...]๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Typr._bin.t.int16์„ ์‚ดํŽด๋ณด๊ณ  [-250, 0, ...] ๋Œ€์‹  ์ž˜๋ชป๋œ [NaN, 0, ...]์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Typr._bin.t.int8์„ ๋ดค๋Š”๋ฐ... ์—ญ์‹œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค... [6, -1, 0, ...]์ด ์•„๋‹ˆ๋ผ [6, NaN, 0, ...]์ด์—ˆ์Šต๋‹ˆ๋‹ค. .

Typr glyf ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์œ ํ˜•(Uint8Array, Int8Array, Int16Array ๋“ฑ)์˜ ์—ฌ๋Ÿฌ ๋ฐฐ์—ด์—์„œ ํ•˜๋‚˜์˜ ๊ณต์œ  ArrayBuffer๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐœ์ƒ์€ iOS Safari(๋งŒ ํ•ด๋‹น)์—์„œ ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ตœ๊ทผ ๊ธฐ๋ก์—์„œ iOS Safari์˜ ArrayBuffer์™€ ๊ด€๋ จ๋œ ํ•ด๊ฒฐ๋œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ณด๊ณ ์„œ๋Š” ์ด๊ฒƒ์„ ๋” ๋ฏฟ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค... ํ•œ ๋ฒˆ ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ ๋‘ ๋ฒˆ ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฐธ์กฐ: (https://bugs.webkit ์ฐธ์กฐ). .org/show_bug.cgi?id=194268)[https://bugs.webkit.org/show_bug.cgi?id=194268]).

์ด ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋œ ์ €๋Š” (uint8,uint8) to int16 ๋ณ€ํ™˜์˜ ๋Œ€์ฒด ๊ตฌํ˜„์„ ์‹œ๋„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

        readShort : function(buff, p)
    {
        var a = buff[p + 1] + (buff[p] << 8);
        if (a > 0b0111111111111111) {
            a = (~a) + 1;
        }
        a = (a < 0 ? -1 : 1) * (a & 0b1111111111111111);
        return a;
    },

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๊ผด์ด ์žˆ๋Š” ๋ชจ๋“  ํ…์ŠคํŠธ๋Š” ์ด์ œ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(devtools์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•„๋„ - ์ด ๋ฉด์ฑ… ์กฐํ•ญ์„ ์ดํ•ดํ•˜๋ ค๋ฉด console.log์— ๋Œ€ํ•œ ์ด์ „ ์„ค๋ช… ์ฐธ์กฐ). ์ด ๋Œ€์ฒด ์†”๋ฃจ์…˜์€ iOS Safari์˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(iOS 15.0.2์—์„œ ํ…Œ์ŠคํŠธ๋จ) , Chrome v95.0.4638.54(win10), Firefox v93.0(win10), Opera v80.0.4170.63(win10)๊ณผ ๊ฐ™์ด ์ด์ „์— ํ…Œ์ŠคํŠธํ–ˆ๋˜ ์ด์ „ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. MacOS ์‚ฌํŒŒ๋ฆฌ(MacOS Big Sur v11.3.1).

*๋ˆ„๊ตฐ๊ฐ€ ์œ„์˜ ๋‚ด ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ž์œ ๋กญ๊ฒŒ ํ•ด์ฃผ์„ธ์š”~

๊ฒฐ๊ตญ ์ด ๋ฌธ์ œ๋Š” ํŠธ๋กœ์ด์นด ๋กœ ์ธํ•œ ๊ฒƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋กœ์ด์นด๋Š” ์‚ฌ์‹ค ๋” ๊นŠ์€ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ Typr๋กœ ์˜ฎ๊ธฐ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€... ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ด๊ฒƒ์ด ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์ธ์ง€ ๋…ผ์Ÿํ•ด ๋ด…์‹œ๋‹ค. ;)

@malulleybovo ๋Š” ์ƒ์„ ๋ฐ›์„ ์ž๊ฒฉ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค! ๐Ÿฅณ

๋ฒ”์œ„๋ฅผ ์ขํžˆ๊ณ  ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋Š” ๋Œ€์ฒด ๊ตฌํ˜„์„ ์ƒ๊ฐํ•ด ๋‚ด๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ž…๋‹ˆ๋‹ค! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ท€ํ•˜์˜ readShort ์†”๋ฃจ์…˜์„ troika์˜ ๋กœ์ปฌ ์žฌ์ •์˜ ๋ฐ/๋˜๋Š” Typr์˜ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ํ†ตํ•ฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์„ ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ readFoo ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๋Œ€์ฒด ๊ตฌํ˜„๋„ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ typed-arrays-sharing-a-buffer ํŒจํ„ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์œ„ํ—˜ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ƒ๊ฐํ•˜๋ฉด ์ฐธ ์‹ ๊ธฐํ•œ ํŒจํ„ด์ด๋‹ค. DataView ๋Š” ๋‹จ์œ„์™€ JS ์ˆซ์ž ๋˜๋Š” ์—”๋””์•ˆ ๋ถˆ์ผ์น˜ ์‚ฌ์ด์˜ ์ด์ƒํ•œ ๊ฐ’ ๋ณ€ํ™˜ ์—†์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ๋‹ค์–‘ํ•œ ์ˆซ์ž ํ˜•์‹์„ ์ฝ๋Š” ๋ชฉ์ ์œผ๋กœ ์ •ํ™•ํžˆ ์˜๋„๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... ๊ทธ๊ฒƒ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๋Ÿฐ ๊ฒƒ? https://gist.github.com/lojjic/94d7b5f5f374598fe0e9761be45ebb2b

@lojjic ์นญ์ฐฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋‹ˆ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์ด ์œ ๋งํ•ด ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ณ  ์ถ”์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ด์ „์— ๋‚˜์—ดํ•œ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ)!
DataView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ €์—๊ฒŒ ๋ฌป๋Š”๋‹ค๋ฉด JS์—์„œ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข‹์€๋ฐ.

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

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

Typr์˜ readFixed, readF2dot14, readUshorts, readUint64, readASCII, readUnicode, readUTF8, readBytes ๋ฐ bin.js์˜ readASCIIArray๋Š” ํ˜•์‹ํ™”๋œ ๋ฐฐ์—ด์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ ์˜ ๊ธฐ๋Šฅ๋งŒ Typr ๋‚ด์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ๊ณผ ํ•จ๊ป˜ Typr์˜ ๊ณต์œ  ArrayBuffer ๋ฐ ํ˜•์‹ํ™”๋œ ๋ฐฐ์—ด์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋‹น์‹ ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์ด ์œ ๋งํ•ด ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ณ  ์ถ”์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ด์ „์— ๋‚˜์—ดํ•œ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ)!
DataView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ €์—๊ฒŒ ๋ฌป๋Š”๋‹ค๋ฉด JS์—์„œ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข‹์€๋ฐ.

๋†€๋ผ์šด!!! ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฑฐ์˜ ๋ฏฟ์„ ์ˆ˜ ์—†๋‹ค. ๐ŸŽ‰ ๐Ÿฅณ

๋‹ค๋ฅธ ๊ธฐ๋Šฅ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ธฐ๋ณธ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ถˆ์พŒํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ†ตํ•ฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ troika-three-text ๋ฆด๋ฆฌ์Šค์— ํฌํ•จํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งค์šฐ ์ž์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋‹จ ์•ผ์ƒ์—์„œ ์กฐ๊ธˆ ๋‚˜์˜ค๋ฉด Typr์— ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ์ œ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์€ ๋น„์Šทํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์กฐ๊ธˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์Šน๋ฆฌ! ๐Ÿ˜„

๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋„ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. Typr์ด Uint8Array๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ JS ๋ฐฐ์—ด๋กœ buff ๋ฅผ ์ „๋‹ฌํ•˜๋Š” CFF ๊ธ€๊ผด์˜ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด _view ๋„์šฐ๋ฏธ๋ฅผ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

DataView ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋œ troika-three-test ๋ฒ„์ „ 0.43.1-alpha.0 ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ Typr ๊ด€๋ จ ์ปค๋ฐ‹ ์˜ ๊ฐœ์ธ ํฌํฌ ์‚ฌ์šฉ)

(@amitrajput1992? @strangerintheq? @atlmtw?) ๋Šฅ๋ ฅ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ด ๋ฒ„์ „์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜์—ฌ ํŠน์ • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Browserstack์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋นŒ๋ฆด iPhone์„ ์ฐพ์•„ ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@lojjic ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ๋‹ค์‹œ ์—ฐ๋ฝ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@amitrajput1992 ์•ˆ๋…•ํ•˜์„ธ์š”, ์•„์ง ์•ŒํŒŒ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ๋‚˜์š”? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฆด๋ฆฌ์Šคํ•˜๊ณ  ์ถ”๊ฐ€ ๊ฒ€์ฆ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. :)

@lojjic ์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐฉ๊ธˆ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!!

์—ฌ๊ธฐ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค: https://amitrajput1992.github.io/r3f-experiments/?path=/story/testers --text-tester

์ด ๋ถˆ์พŒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ 0.44.0 ๋ฒ„์ „์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋””์–ด ํ•ด๊ฒฐ๋˜์–ด์„œ ๋„ˆ๋ฌด ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๋„์›€์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ @malulleybovo ๊ฐ€ ์ œ๊ฐ€ ํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์„ ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์•„์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿฅณ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰