์•„์ดํฐ ์ฒœ์ง€์ธ ํ‚ค๋ณด๋“œ ์ด์Šˆ (แ„‹แ†ž, แ„‹แ†ข ๋Œ€์‘)
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2024. 4. 11. 11:21

์•„์ดํฐ ์ฒœ์ง€์ธ ํ‚ค๋ณด๋“œ์—์„œ "์œ ์š”" ๋ผ๋Š” ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, "์œต" -> "์œ แ„‹แ†ž" -> "์œ แ„‹แ†ข" ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ์ด ๋˜๋Š”๋ฐ ํ•œ๊ธ€๋งŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋„ฃ์–ด๋‘์—ˆ๋˜ regex ๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ๊ธ€์ž๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฌ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. [๊ธฐ์กด Regex] return target.replace(/[^๊ฐ€-ํžฃใ†แ†žแ†ขใ„ฑ-ใ…Žใ…-ใ…ฃa-zA-Z\s]/g, ''); ํ•œ๊ธ€, ์˜์–ด๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ regex ์ž…๋‹ˆ๋‹ค. [์ด์Šˆ ์›์ธ] ์ข…์„ฑ ์ž์Œ๊ณผ ใ†แ†žแ†ข ๊ฐ™์€ ์ฒจ์ž๊ฐ€ ํ•ฉ์ณ์ง€๋ฉด์„œ ์ƒˆ๋กœ์šด ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. [๋ณ€๊ฒฝ๋œ Regex] /** * ์•„์ดํฐ ์ฒœ์ง€์ธ์„ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. * \u11A8-\u11C2 ์ข…์„ฑ ์ž์Œ * \u1182 ์ข…์„ฑ แ†ข */ return target.replace(/[^[\u11A8-\u11C2]\u1182๊ฐ€-ํžฃใ„ฑ-ใ…Žใ…..

์›น๊ฐœ๋ฐœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ฑ๊ฐœ๋ฐœ ์Š์–ด๋ณด๊ธฐ :: ๋‘˜ ๋‹ค ํ•ด๋ณธ ๊ฐœ๋ฐœ์ž ๐Ÿ˜Ž
์›น (WEB)/๊ณต๋ถ€ 2024. 3. 24. 14:52

์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ ์ƒ๊ฐํ•ด๋ณด์•˜๋Š”๋ฐ, 2023๋…„ ๊ฐ€์„ โ€œ์˜ค๋Š˜์˜๊ฐ€๋“ โ€ ์ด๋ผ๋Š” ํ”„๋กœ๋•ํŠธ๋ฅผ ๋Ÿฐ์นญ ํ•ด ๋ณธ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ฑ ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๋ฉด์„œ ๋Š๋‚€ ์›น ๊ฐœ๋ฐœ๊ณผ์˜ ์ฐจ์ด์ ์„ ์ฃผ๋กœ ๋‹ค๋ฃจ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋ฐ”์ผ ํผ์ŠคํŠธ๊ฐ€ ๋œ ํ˜„์‹œ์ ์—์„œ ์•ฑ์„ ์›น๋ทฐ / ๋„ค์ดํ‹ฐ๋ธŒ / ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ์ž์˜ ์žฅ๋‹จ์ ์„ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. https://yozm.wishket.com/magazine/detail/1969/ ์ด ๋ธ”๋กœ๊ทธ์—์„œ ๊ธ€์„ ๋ณด๊ณ  ๋งˆ์ง€๋ง‰ ๋„ํ‘œ์˜ ๊ธ€์— ํ˜นํ•ด์„œ ๊ธ€์„ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "2023๋…„ 2์›” ๊ธฐ์ค€ ์ „ ์„ธ๊ณ„ ์›น ์‚ฌ์ดํŠธ ํŠธ๋ž˜ํ”ฝ์˜ 60.06% ๊ฐ€ ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค." ์•ฑ ๊ฐœ๋ฐœ์€ ์›น ๊ฐœ๋ฐœ๊ณผ ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ? ํฌ๊ฒŒ โ€œ๋ฐฐํฌโ€์™€ โ€œ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌโ€ ๊ทธ๋ฆฌ๊ณ  โ€œUI ๊ณ„์ธต๊ตฌ์กฐโ€ ์„ธ๊ฐ€์ง€ ์ธก..

[Next.js] Redirect ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• 5๊ฐ€์ง€
์›น (WEB) 2024. 1. 6. 17:54

Next.js์—์„œ ๋Œ€์‘์ด ๋˜์–ด ์žˆ์ง€ ์•Š์€ `/` path๋กœ ์ง„์ž…ํ–ˆ์„ ๋•Œ default `/home` page๋กœ redirect ํ•˜๋Š” ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. Redirect ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ Next.js์—์„œ์˜ redirect ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ redirect ์‹œ์— ์„œ๋ฒ„์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด์ž. 300๋ฒˆ ๋Œ€์˜ ์ƒํƒœ์ฝ”๋“œ๋Š” ๋ชจ๋‘ Redirection ์„ ์˜๋ฏธํ•˜๋ฉฐ, 300 ~ 308 ๊นŒ์ง€ ์žˆ๋‹ค. 301 (Moved Permanently) : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”์†Œ๋“œ๋ฅผ GET ์œผ๋กœ ๋ฐ”๊พธ๋ฉฐ, redirect ์ฒ˜๋ฆฌ๊ฐ€ ์บ์‹ฑ๋œ๋‹ค. 302 (Found - Moved Temporarily) : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”์†Œ๋“œ๋ฅผ GET ์œผ๋กœ ๋ฐ”๊พธ๋ฉฐ, redirect ์ฒ˜๋ฆฌ๊ฐ€ ์ผ์‹œ์ ์ด๊ณ  ์บ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค. 304 (Not..

Font Glyph
์›น (WEB)/๊ณต๋ถ€ 2023. 9. 16. 22:56

๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ์—์„œ ์ง€์—ฐ ์‹œ๊ฐ„ ์—†์ด ์›นํฐํŠธ ์„œ๋น™ํ•˜๊ธฐ ๊ธ€์„ ๋ณด๋‹ค๊ฐ€ Glyph๋ผ๋Š” ๊ฐœ๋…์ด ๋‚˜์™€์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. Glyph(๊ธ€๋ผํ”„)๋ž€? Glyph๋Š” ๊ธ€์ž์˜ ์ตœ์†Œ ํ‘œํ˜„์ด๋ฉฐ, ๋œป๊ณผ ์†Œ๋ฆฌ๋ฅผ ์ง€๋‹ˆ์ง€ ์•Š์€ ๋„ํ˜• ๊ธฐํ˜ธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โ€œ๊ฐ€โ€ ๋ผ๋Š” ๊ธ€์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด ๊ธ€์ž๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•  ๊ฒƒ์ธ์ง€๊ฐ€ Glyph์ด๋‹ค. ํ—ท๊ฐˆ๋ฆฌ๋Š” ์šฉ์–ด ์ •๋ฆฌ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋งˆ์ฃผ์น˜๋Š” ๊ธ€์ž์˜ ๋ชจ์–‘๊ณผ ๊ด€๋ จ๋œ ์šฉ์–ด๋“ค์—๋Š” Character, Font, Glyph (feat. Unicode)๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ฐจ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ •์˜ํ•ด๋ณด์ž. ์š”์•ฝํ•˜์ž๋ฉด, Character๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๊ธ€์ž์ด๊ณ , Glyph๋Š” ํ•˜๋‚˜์˜ Character์— ๋Œ€์‘๋˜๋Š” ํ‘œํ˜„์ด๋‹ค. Glyph๋“ค์ด ๋ชจ์—ฌ Font๋ฅผ ๋งŒ๋“ ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Unicode๋Š” Character ํ•˜๋‚˜ ๋‹น ๋ถ€์—ฌ๋˜๋Š” c..

๋ฐ”์˜๊ฒŒ ๋‹ฌ๋ฆฌ๋‹ค๊ฐ€ ์ž ๊น์˜ ํ‹ˆ์ด ๋‚˜ ์จ๋ณด๋Š” ํšŒ๊ณ 
๋„์ ์ด๋Š” ๊ธ€/๊ฐœ๋ฐœ์ž๋กœ์„œ ๋„์ ์ด๋Š” ๊ธ€ 2023. 8. 20. 20:43

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

FE ๊ด€์ ์—์„œ grpc ์ฐ๋จนํ•˜๊ธฐ (feat. REST api ์™€์˜ ๋น„๊ต)
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 5. 12. 15:35

๐Ÿ’ก gRPC์™€ Rest api์˜ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•˜๊ณ  ์žฅ๋‹จ์ ์„ ํŒŒ์•…ํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์กฐ์‚ฌํ•˜๋‹ค๊ฐ€ ํŠน์ • ํˆด๋“ค๋งŒ gRPC๋ฅผ ์ง€์›ํ•˜๊ณ , gRPC๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ ๊ฑฐ์˜ Go, Kotiin ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋“ค ๋ฐ–์— ์—†๊ธธ๋ž˜ gRPC์™€ Rest api์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ด๊ณ  ์–ธ์ œ ๋ฌด์–ผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ / JS๋ฅผ ํ†ตํ•ด ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์„ ์ง€ ๊ถ๊ธˆํ•ด์„œ ์กฐ์‚ฌํ•ด ๋ด…๋‹ˆ๋‹ค. Rest api๋Š” ๊ธฐ์กด์— ๋งŽ์ด ์‚ฌ์šฉํ•ด๋ณด์…จ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„ ์„ค๋ช… ์—†์ด ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. gRPC๋ž€? grpc๋ž€ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(RPC) ์‹œ์Šคํ…œ์ด๋ฉฐ, ์ „์†ก์„ ์œ„ํ•ด HTTP/2 ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ์–ธ์–ด๋กœ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. client - server si..

[Typescript] ๊ตฌ์กฐ์  ํƒ€์ดํ•‘๊ณผ ๋• ํƒ€์ดํ•‘
์›น (WEB)/๊ณต๋ถ€ 2023. 4. 16. 19:58

๐Ÿค” ๊ธฐ์กด์— ์•Œ๊ณ  ์žˆ๋˜ Duck typing๊ณผ Typescript ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ์ฐจ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  ํ•œ๊ณ„๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. Duck typing์ด๋ž€ โ€œ๋งŒ์•ฝ ์–ด๋–ค ์ƒˆ๊ฐ€ ์˜ค๋ฆฌ์ฒ˜๋Ÿผ ๊ฑท๊ณ , ํ—ค์—„์น˜๊ณ , ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋Š” ์†Œ๋ฆฌ๋ฅผ ๋‚ธ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ ์ƒˆ๋ฅผ ์˜ค๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ด๋‹ค.โ€ ๋ผ๋Š” ๋ง์—์„œ ํƒ„์ƒํ•˜์˜€์œผ๋ฉฐ, ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ์‹œ ๊ฐ์ฒด์˜ ํ–‰์œ„์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํƒ€์ž… ์ˆ˜์šฉ์„ฑ์„ ์ฒดํฌํ•˜๋„๋ก ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. type Person = { name: string, age: number, }; const personA = { name: 'ํฌ์€', age: 27, }; const duckA = { name: '์˜ค๋ฆฌ', age: 2, }; const person: Person = duckA; // it's okay ํƒ€์ž…..

[Virtualized List] #3. ๊ฐ€์ƒ๋ฆฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต
์›น (WEB)/๊ณต๋ถ€ 2023. 1. 28. 13:37

๐Ÿ’ก 2022/11/27 ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ด๋ฉฐ, ์ดํ›„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๋ฐ์ดํŠธ๋กœ ํŠน์ • ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Virtualized List ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต npm trends๋ผ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ, 4๊ฐœ์˜ Virtualized List ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. react-window์™€ react-virtualized์˜ ๊ด€๊ณ„ ๋‘˜๋‹ค ๊ฐ™์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ react-virtualized์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋นผ๋‚ด์–ด ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ react-window์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ ์œ ์œจ๋กœ ๋”ฐ์ง€๋ฉด ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ @tanstack/virtual-core ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ early stage ์ธ ๋“ฏํ•ฉ๋‹ˆ๋‹ค. react-virtualized์™€ react-window๋Š” ์›Œ๋‚™ ์œ ๋ช…..