๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Frontend/TroubleShooting

[TroubleShooting] ๊ณต๋ฐฑ๋•Œ๋ฌธ์— ์˜ˆ์•ฝ์ด ์‹คํŒจํ•œ๋‹ค๊ณ ? - ์ •๊ทœํ‘œํ˜„์‹ ๊ฒ€์ฆ ๋ถˆ์ผ์น˜ ์ด์Šˆ ํ•ด๊ฒฐ๊ธฐ

by YWTechIT 2025. 10. 20.
728x90

๐Ÿ“ ๊ณต๋ฐฑ๋•Œ๋ฌธ์— ์˜ˆ์•ฝ์ด ์‹คํŒจํ•œ๋‹ค๊ณ ? - ์ •๊ทœํ‘œํ˜„์‹ ๊ฒ€์ฆ ๋ถˆ์ผ์น˜ ์ด์Šˆ ํ•ด๊ฒฐ๊ธฐ

๋ฌธ์ œ ์ƒํ™ฉ

ํŠน์ • ์ƒํ’ˆ์„ ์˜ˆ์•ฝํ•˜๊ธฐ์œ„ํ•ด ํ•ด๋‹น ์•„์ดํ…œ์„ ์„ ํƒํ•˜์—ฌ ์˜ˆ์•ฝ๊ฒฐ์ œํŽ˜์ด์ง€์—์„œ ์˜ˆ์•ฝํผ์„ ๋ชจ๋‘ ์ฑ„์šฐ๊ณ  ์˜ˆ์•ฝํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์˜ˆ์•ฝ์ƒ์„ฑ์š”์ฒญ์— ์‹คํŒจํ•˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค. CS ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ๊ณตํ†ต์ ์œผ๋กœ LASTNAME ํ•„๋“œ์— ๊ณต๋ฐฑ์„ ํฌํ•จํ•˜๋ฉด ์˜ˆ์•ฝ์— ์‹คํŒจํ•œ๋‹ค๋Š” ์˜๊ฒฌ์ด ๋งŽ์•˜๋‹ค.

 

DataDog ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ, ๋ฐฑ์—”๋“œ์—์„œ LASTNAME ํ•„๋“œ ๊ฒ€์ฆ ์‹œ /[\\S]{1,128}/ ์ •๊ทœํ‘œํ˜„์‹์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด์„œ ์š”์ฒญ์ด ๊ฑฐ์ ˆ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

๋Œ€์•ˆ ๋ถ„์„

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

๊ทธ๋Ÿฐ๋ฐ ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„๊นŒ?

2๋ฒˆ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๊ธฐ ์ „์—, ์›์ธ์„ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

 

DB๋ฅผ ์กฐํšŒํ•ด๋ณด๋‹ˆ, ์ „์ฒด ์˜ˆ์•ฝ ๊ฒฐ์ œ ํŽ˜์ด์ง€ ์ ‘๊ทผ์ž ์ค‘ ์•ฝ 4%๊ฐ€ ํ•ด๋‹น ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ’ˆ์„ ์˜ˆ์•ฝํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์ ์ง€ ์•Š์€ ๋น„์œจ์ด์—ˆ๊ณ 

 

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

 

๐Ÿ‘‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ RegExp.test ๋ฉ”์„œ๋“œ๋Š” ๋ถ€๋ถ„ ๋งค์นญ(partial match) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ํ™•์ธํ–ˆ๋‹ค.

 

์ฆ‰, ๋ฌธ์ž์—ด ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ถ€๋ถ„๋งŒ ์ผ์น˜ํ•ด๋„ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด YEONG WOO๋ผ๋Š” ๋ฌธ์ž์—ด์€ ์ค‘๊ฐ„์— ๊ณต๋ฐฑ์ด ์žˆ์ง€๋งŒ, ์•ž๋ถ€๋ถ„ YEONG์ด /[\S]{1,128}/ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฏ€๋กœ ํ†ต๊ณผ๋œ๋‹ค.

 

๋ฐ˜๋ฉด ๋ฐฑ์—”๋“œ(Kotlin)์˜ regex.matches()๋Š” ๋ฌธ์ž์—ด ์ „์ฒด ์ผ์น˜(full match) ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ฒฐ๊ตญ ๋™์ผํ•œ ์ •๊ทœ์‹์ด ํ”„๋ก ํŠธ์—์„œ๋Š” ํ†ต๊ณผํ•˜๊ณ , ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์‹คํŒจํ•˜๋Š” ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์–ด?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๊ฒ€์ฆํ•˜๋ ค๋ฉด ์ •๊ทœ์‹ ์–‘ ๋์— ์•ต์ปค(^, $) ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ •๊ทœ์‹ ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ๋ถˆ์™„์ „ํ•œ ํŒจํ„ด์„ ๊ต์ •ํ–ˆ๋‹ค.

/** ๋ถˆ์™„์ „ํ•œ ์ •๊ทœ์‹ ํŒจํ„ด์„ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ…Œ์ด๋ธ” */
export const REGEX_NORMALIZATION_MAP: Record<string, string> = {
  '/[\\S]{1,128}/': '/^[\\S]{1,128}$/',
}

 

์ฐธ๊ณ : ํ˜„์žฌ DB์ƒ์—์„œ๋Š” {1,128}๋งŒ ์กด์žฌํ•˜์ง€๋งŒ, ์ถ”ํ›„ ๋‹ค๋ฅธ ์ˆซ์ž ๋ฒ”์œ„๊ฐ€ ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด
\d ํŒจํ„ด์„ ํ™œ์šฉํ•˜๋Š” ํ™•์žฅ๋„ ๊ฒ€ํ†  ์ค‘์ด๋‹ค.

๊ฒฐ๋ก 

์ž‘์—… ๊ทœ๋ชจ ์ž์ฒด๋Š” ํฌ์ง€ ์•Š์•˜์ง€๋งŒ, ์ด์Šˆ ๋ฐœ๊ฒฌ → ์›์ธ ๋ถ„์„ → ๋Œ€์•ˆ ๋น„๊ต → ํ•ด๊ฒฐ์˜ ํ๋ฆ„์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•œ ์˜๋ฏธ ์žˆ๋Š” ์ผ€์ด์Šค์˜€๋‹ค. ํŠนํžˆ, “๊ฐ™์€ ์ •๊ทœ์‹์ด ์–ธ์–ด๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค”๋Š” ์ ์„ ๋‹ค์‹œ๊ธˆ ๊นจ๋‹ฌ์•˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์„œ๋ฒ„ ๋กœ์ง์„ ์ผ๋ถ€ ์ด์‹ํ•  ๋•Œ๋Š” ์–ธ์–ด ๊ฐ„ ์ฐจ์ด๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ตํ›ˆ์„ ์–ป์—ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€