๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘จ‍๐Ÿ’ป web.dev51

TRIPLE ์›น ์ผ์ •ํŒ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ํšŒ๊ณ ๋ก ์ž‘๋…„์— ์›น ์ผ์ •ํŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋ฐ˜์‘ํ˜• UI์™€ ์Šคํฌ๋กค UX์™€ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ์ด์Šˆ๋“ค์ด ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋•Œ ๋‹น์‹œ๋ฅผ ํšŒ๊ณ ํ•ด๋ณด๋ฉด์„œ ๊ฐ๊ฐ์˜ ๋ฌธ์ œ ์ƒํ™ฉ๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ์›น ์ผ์ •ํŒ ๊ธฐ๋Šฅ๊ณผ ์ง€์› ๋ฒ”์œ„ ํŠธ๋ฆฌํ”Œ ์›น ์ผ์ •ํŒ์€ PC์™€ ๋ชจ๋ฐ”์ผ(ํƒœ๋ธ”๋ฆฟ ํฌํ•จ) ํ™˜๊ฒฝ์„ ํƒ€๊นƒ์œผ๋กœ ํ•œ ์›น ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌํ”Œ ์•ฑ์—์„œ ์ƒ์„ฑํ•œ ์ผ์ •์„ ํŠธ๋ฆฌํ”Œ ์œ ์ €๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ํŠธ๋ฆฌํ”Œ ์•ฑ์—์„œ ์ผ์ •ํŒ ๋งํฌ๋Š” ์ด 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ผ์ • ๋งํฌ ๋ณต์‚ฌํ•˜๊ธฐ ์นด์นด์˜คํ†ก์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ ๊ทธ ์™ธ ๋ฉ”์‹ ์ € ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ ๋งํฌ๋ฅผ ๋ณดํ†ต ์นด์นด์˜คํ†ก์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์นด์นด์˜คํ†ก ์ธ์•ฑ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋น„๋กฏํ•˜์—ฌ ์ „๋‹ฌ๋ฐ›์€ ๋งํฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €(safari, chrome, whale,.. 2024. 3. 11.
Server Sent Events ์ ์šฉํ•ด๋ณด๊ธฐ ๐Ÿ“Œ SSE vs Web Socket ์ž‘๋…„์— ์„œ์šธ์ฝ˜ ํ–‰์‚ฌ๋ฅผ ์œ„ํ•œ ์ฑ—๋ด‡ ์„œ๋น„์Šค ๋งŒ๋“ค๋ฉด์„œ Server Sent Events ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ์ง€ ์ง์ ‘ ์ ์šฉํ•ด ๋ณธ ์ ์€ ์—†์—ˆ๋Š”๋ฐ, ๊ฐ„๋‹จํžˆ ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์ธ์ง€ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  Server Sent Events ์™€ Web Socket๊ณผ ์–ด๋–ค ์ฐจ์ด์ ์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฑ—๋ด‡ ์„œ๋น„์Šค๋Š” ํŠน์„ฑ์ƒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•˜๊ณ  UTF-8 ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— Server Sent Events ๋กœ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. EventSource ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ ๋‚ด์šฉ์€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ๊ธฐ์กด EventSource์˜ ํ•œ๊ณ„์  1๏ธโƒฃ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์˜ ์–ด๋ ค์›€.. 2024. 3. 10.
์ •๊ทœํ‘œํ˜„์‹๊ณผ ํ•จ๊ป˜ URL ๋œฏ์–ด๋ณด๊ธฐ โ›”๏ธ ๋‹ค์Œ์—์„œ ์ •์˜ํ•˜๋Š” ์ •๊ทœ์‹์ด ๋ชจ๋“  URL ํ˜•์‹์— ๋Œ€์‘๋˜์ง€๋Š” ์•Š๋Š” ๊ฒƒ์— ์œ ์˜ํ•ด์ฃผ์„ธ์š”. โ›”๏ธ ipv4, ipv6 ํ˜•์‹์˜ ip address ํ˜•์‹์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. URL(Uniform Resource Locator) ์€ ์›น ์ƒ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณ ์œ ํ•œ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. HTML ํŽ˜์ด์ง€, CSS ๋ฐ ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ๋“ฑ ๊ทธ ์–ด๋–ค ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ํ…์ŠคํŠธ ๋‚ด์—์„œ URL ํ˜•์‹์˜ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ์ด ํ•„์š”ํ•ด์„œ URL ๊ทœ๊ฒฉ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ RFC ๋ฌธ์„œ ์ฐธ์กฐ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ์ฐธ๊ณ ํ•œ RFC ๋ฌธ์„œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. RFC 952 - https://datatracker.ietf.org/doc/html/rfc952 RFC 1034 - https://datatracker.ietf.org/d.. 2024. 3. 1.
Chrome ๊ฐœ๋ฐœ์ž๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ์œ„์น˜์ •๋ณด ์„ค์ •ํ•˜๊ธฐ geolocation ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ์ž ์œ„์น˜์ •๋ณด๋ฅผ ๋ชจํ‚น ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. chrome devtool ์—์„œ๋Š” ์ด๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๋Š”๋ฐ, ๋‹ค์Œ 2 ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Google Map ์„œ๋น„์Šค์—์„œ ํŠน์ • ์œ„์น˜์˜ ์œ„๊ฒฝ๋„๊ฐ’ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• Chrome devtool์—์„œ ์œ„๊ฒฝ๋„๊ฐ’ ์ง€์ •ํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ• 1๏ธโƒฃ Google Map ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํŠน์ • ์ขŒํ‘œ์˜ ์œ„๊ฒฝ๋„๊ฐ’ ์กฐํšŒํ•˜๊ธฐ Google Map ์„œ๋น„์Šค์— ์ ‘์†ํ•ด์„œ ์›ํ•˜๋Š” ์ขŒํ‘œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํšŒ์ƒ‰ ๋งˆ์ปค๋กœ ํฌ์ปค์‹ฑ ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ํšŒ์ƒ‰ ๋งˆ์ปค๋ฅผ ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ์œ„๊ฒฝ๋„ ๊ฐ’์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. 2๏ธโƒฃ Chrome devtool Sensor ์‚ฌ์šฉํ•˜๊ธฐ custom location ์ถ”๊ฐ€ํ•˜๊ธฐ ๋จผ์ € ์‚ฌ์šฉ์ž ์ •์˜ ์œ„์น˜์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”.. 2024. 3. 1.
storybook middleware proxy ๋กœ CORS ์šฐํšŒํ•˜๊ธฐ fetch ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šคํ† ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ CORS ์ด์Šˆ ํ•ด๊ฒฐ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ๋ถ์€ ๋นŒ๋“œ ์‹œ webpack ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , dev server ์‹คํ–‰ ์‹œ middleware ์Šคํƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ storybook middleware ์ถ”๊ฐ€ํ•˜๊ธฐ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ fetch ์š”์ฒญ์ด ์žˆ๊ณ , /api ์— ๋Œ€ํ•œ ํ”„๋ฝ์‹œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. fetch('/api/blahblah') ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. $ npm i -D http-proxy-middleware middleware.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. target๊ณผ origin์„ ์„ค์ •ํ•ด์„œ ์š”์ฒญ์„ ํ”„๋ก์‹ฑํ•˜๋Š” ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. // .storybook/middleware.js const { createProxyMi.. 2024. 3. 1.
์ •๊ทœ์‹์œผ๋กœ camel-case ํŒŒ์‹ฑํ•˜๊ธฐ ๐Ÿ“Œ camelCase๋ฅผ ๋‹จ์–ด ๋‹จ์œ„๋กœ ํŒŒ์‹ฑ ํ•˜๊ธฐ ์ถ•์•ฝ ํ‘œํ˜„(ex. CSS )๋„ ์ง€์›ํ•˜๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด camelCase ํ‚ค์›Œ๋“œ๋ฅผ ๋‹จ์–ด ๋‹จ์œ„๋กœ ํŒŒ์‹ฑ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. searchSeoulPOIItems → search seoul poi items searchSeoulPoiItems → search seoul poi items CSSProperties → css properties searchNIMBUS2000BroomStick → search nimbus2000 broom stick ์ •๊ทœ์‹์˜ lookbehind ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, safari๋Š” 16.4๋ถ€ํ„ฐ ์ง€์›ํ•ด์„œ ํฌ๋กœ์Šค๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ lookbehind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•ด๊ฒฐํ•ด .. 2024. 2. 24.