๐ŸŒ react-speech-recognition ํ•œ๊ตญ์–ด ์ธ์‹ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Aromahyangยท2024๋…„ 11์›” 18์ผ
0

Frontend

๋ชฉ๋ก ๋ณด๊ธฐ
6/7
post-thumbnail

์ด๋ฒˆ์— ์Œ์„ฑ์ธ์‹ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ฉด์„œ react-speech-recognition๋ฅผ ์ด์šฉํ–ˆ๋‹ค.
2024๋…„ 11์›” 12์ผ ์ด์ „์—๋Š” ๋ชจ๋“  OS์—์„œ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹ ๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์™”๋‹ค.
ํ•˜์ง€๋งŒ 2024๋…„ 11์›” 12์ผ ์ดํ›„(์ •ํ™•ํ•œ ์‹œ์ ์€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ ์ดํ›„์ธ ๊ฑด ํ™•์‹คํ•˜๋‹ค) ์•ˆ๋“œ๋กœ์ด๋“œ ํ™˜๊ฒฝ์—์„œ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹์ด ์•ˆ ๋˜๊ณ  ์˜์–ด๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค ๐Ÿ˜ฑ

"ํ…Œ์ŠคํŠธ"๋ผ๊ณ  ๋งํ–ˆ์„ ๋•Œ ์ด์ „์—๋Š” "ํ…Œ์ŠคํŠธ"๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์ด๋•Œ ์˜์–ด๋กœ "test", "tested" ๋“ฑ์ด ๋‚˜์™”๋‹ค..
์ด๋ฒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ํ•œ ๋ฒˆ๋„ ์ƒ๊ธด ์  ์—†๋˜ ์ด์Šˆ๊ฐ€ ํŠน์ • ์‹œ์  ์ดํ›„ ํŠน์ • OS์—์„œ๋งŒ ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜์˜€๋‹ค.
์•„์ง ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹ ์ด์Šˆ ํ•ด๊ฒฐ์— ๋Œ€ํ•œ ์ž๋ฃŒ๊ฐ€ ์—†๋Š” ๊ฑฐ ๊ฐ™์•„ ๋‚˜์™€ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ด ๊ธ€์ด ๋„์›€ ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค.

๐Ÿ’กTL;DR
react-speech-recognition ๋ฌธ์„œ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์žˆ์œผ๋‹ˆ language ์„ค์ •์€ MDN ๋ฌธ์„œ๋Œ€๋กœ BCP 47 language tag ๊ฐ’(ko-KR)์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ ์ƒํ™ฉ

2024๋…„ 11์›” 12์ผ ์ดํ›„ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹ ๋™์ž‘ ์—ฌ๋ถ€๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค.

OSํ™˜๊ฒฝ๋™์ž‘ ์—ฌ๋ถ€
iOSWebO
iOSAppO
์•ˆ๋“œ๋กœ์ด๋“œWebX
์•ˆ๋“œ๋กœ์ด๋“œAppX
MacOSChromeO
MacOSSafariO

์•ฑ์€ ์›น๋ทฐ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ์œผ๋ฉฐ ์›น๋ทฐ ์•ˆ์—์„œ ์Œ์„ฑ์ธ์‹ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•œ๋‹ค.
์•ˆ๋“œ๋กœ์ด๋“œ ํ™˜๊ฒฝ์—์„œ๋งŒ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹์ด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ ๊ณผ์ •

๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์ด์Šˆ์— ๋‹นํ™ฉํ•œ ๋‚˜์˜ ์˜์‹์˜ ํ๋ฆ„์„ ๋‹ด์•„๋ณด์•˜๋‹ค.

๋‚˜๋Š” ๊ฒฐ๋ฐฑํ•˜๋‹ค

๋‚˜๋Š” react-speech-recognition์˜ ์–ธ์–ด ์„ค์ •์„ ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ๋ถ€ํ„ฐ ๊ฑด๋“œ๋ฆฐ ์ ์ด ์—†๋‹ค๋Š” ์ ์— ๊ฒฐ๋ฐฑํ•˜๋‹ค.

react-speech-recognition์—์„œ ์–ธ์–ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ startListening()์ด๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด startListening()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘ language์˜ ๊ฐ’์ด ๋‚˜์—ด๋˜์–ด ์žˆ๋‹ค.
์ด ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ๊ฐ€ 2๋‹ฌ ์ „(2024๋…„ 9์›” ๊ฒฝ)์ธ๋ฐ, ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ๋ถ€ํ„ฐ language: ko๋กœ ์„ค์ •ํ•˜๊ณ  ๋ณ€๊ฒฝํ•œ ์ ์ด ์ตœ๊ทผ๊นŒ์ง€ ์—†์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์Šˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋‹ค.

OS์˜ ์ฐจ์ด์ ์ด ๋ญ˜๊นŒ

ํ˜„ ์ƒํ™ฉ์—์„œ ๋ช…๋ฐฑํ•œ ๊ฑด OS๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿผ OS๋งˆ๋‹ค ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

๋จผ์ € ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์„ ์˜์‹ฌํ–ˆ๋‹ค.
์• ํ”Œ์˜ ํ์‡„์ ์ธ ์ •์ฑ…์œผ๋กœ ์ธํ•ด iOS์—์„œ ๋Œ์•„๊ฐ€๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋‘ ์• ํ”Œ์˜ Webkit ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค.
๊ทธ๋ž˜์„œ iOS์˜ Safari์™€ Chrome์—์„œ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹์„ ์‹œ๋„ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ํ•œ๊ตญ์–ด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
๋ฐ˜๋ฉด MacOS๋Š” ๊ฐ•์ œ๋œ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— Safari๋Š” Webkit์„, Chrome์€ Chromium์„ ์“ด๋‹ค.
์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์—”์ง„์ด ๋‹ค๋ฅธ๋ฐ, Chrome๊ณผ Webview๋Š” Chromium์„ ์‚ฌ์šฉํ•œ๋‹ค.

OS๋ธŒ๋ผ์šฐ์ €๋ธŒ๋ผ์šฐ์ € ์—”์ง„
iOSChromeWebkit
iOSSafariWebkit
MacOSChromeChromium
MacOSSafariWebkit
AndroidChromeChromium
AndroidWebviewChromium

๊ทธ๋Ÿผ Webkit์€ ๋ฌธ์ œ ์—†๋Š”๋ฐ, Chromium์—์„œ๋งŒ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒŒ Chromium์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒจ์„œ ๊ทธ๋Ÿฐ ๊ฒŒ ์•„๋‹๊นŒ๋ž€ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

(๋ธŒ๋ผ์šฐ์ € ์—”์ง„ ์™ธ OS๋งˆ๋‹ค ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.. ๊ทธ ์™ธ ๋– ์˜ค๋ฅด๋Š” ์ฐจ์ด์ ์ด ์—†๋„ค์š”..)

์™œ 11์›” 12์ผ ์ดํ›„๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๊ฐ€?

Chromium์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์˜์‹ฌ๋˜๋‹ˆ Chrome ํ˜น์€ Chromium์˜ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ณ ์ž ํ–ˆ๋‹ค.
์•„์‰ฝ๊ฒŒ๋„ Chromium์˜ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋Š” ์ฐพ์ง€ ๋ชปํ•˜์˜€๊ณ , Chrome์˜ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋Š” ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋งˆ์นจ Chrome 131์˜ ์•ˆ์ •ํ™” ๋ฒ„์ „ ์ถœ์‹œ์ผ์ด 2024๋…„ 11์›” 12์ผ์ด๋‹ค!
์—…๋ฐ์ดํŠธ ๋‚ด์šฉ์„ ๋ณด๋ฉด ์Œ์„ฑ์ธ์‹๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์—†๋‹ค..
์–ธ์–ด(language) ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ Summarization API์™€ Translator API๋กœ ํ•ด๋‹น API๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๋‚ด์šฉ๋งŒ ์žˆ์„ ๋ฟ, Speech API์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.

ํ•˜์ง€๋งŒ ์ถœ์‹œ์ผ์„ ๋ณด๋ฉด ๊ณต๊ต๋กญ๊ฒŒ๋„ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹ ์ด์Šˆ์™€ ์–ผ์ถ” ๋งž์•„๋–จ์–ด์ง„๋‹ค.

The new release generally reaches all users within one to two weeks unless major issues arise that cannot be addressed quickly.

Chromium ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์•ˆ์ •ํ™” ๋ฒ„์ „(Stable Release, Stable Promotion)์€ ์ค‘๋Œ€ํ•œ ์ด์Šˆ๊ฐ€ ์—†์œผ๋ฉด 1~2์ฃผ ์•ˆ์— ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.
์•ˆ์ •ํ™” ๋ฒ„์ „์ด 11์›” 12์ผ์— ๋ฐฐํฌ๋˜๊ณ  ์ดํ‹€ ์•ˆ์— ๋‚˜์™€ ์œ ๊ด€์ž๋“ค์—๊ฒŒ ์ƒˆ๋กœ์šด Chrome์ด ๋ฐฐํฌ๋˜๋ฉด์„œ ์Œ์„ฑ์ธ์‹์˜ ์–ธ์–ด ๊ด€๋ จ ๋ถ€๋ถ„์— ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค.

๋‹ค์‹œ ๋Œ์•„์™€์„œ, ๊ทธ๋ฆฌ๊ณ  ํ•ด๊ฒฐ

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

๋‹ค์‹œ ์›์ ์œผ๋กœ ๋Œ์•„์™€ ๋‚ด๊ฐ€ ๊ฒฐ๋ฐฑํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•œ ๋ถ€๋ถ„์„ ๋ณด์ž.
react-speech-recognition์˜ startListening()์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

async startListening({ continuous = false, language } = {}) {
  ...
  if (isContinuousChanged || isLanguageChanged) {
    ...
    this.recognition.lang = isLanguageChanged ? language : this.recognition.lang
  }
  ...
}

this.recognition์€ SpeechRecognition ์ธํ„ฐํŽ˜์ด์Šค๋กœ, SpeechRecognition์˜ lang ์†์„ฑ์„ language ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•œ๋‹ค.
SpeechRecognition์˜ lang ์†์„ฑ์˜ ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฑด ์•„๋‹๊นŒ?
MDN ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ˆ lang ์†์„ฑ์€ BCP 47 language tag๋ฅผ ์“ด๋‹ค๊ณ  ๋˜์–ด ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ react-speech-recognition ๋ฌธ์„œ์—๋Š” BCP 47 language tag ์–ธ๊ธ‰์€ ์—†๊ณ  2013๋…„์— ์ž‘์„ฑ๋œ stackoverflow ๊ธ€์„ ์ฐธ๊ณ ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๋‚˜์—ดํ•˜๊ณ  ์žˆ๋‹ค.
์•„๋ฌด๋ž˜๋„ ๊ณผ๊ฑฐ ๊ธ€์ด๋‹ˆ (ํ•œ๊ตญ์–ด ๊ธฐ์ค€)ko๊ฐ€ ๋” ์ด์ƒ Chrome์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  ko-KR ๊ฐ’๋งŒ ๋ฐ›๋„๋ก Chrome์ด ๋ฐ”๊พผ ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค.
ํ•œ๊ตญ์–ด๋ฅผ BCP 47 language tag(ko-KR)๋กœ ๋ฐ”๊พธ๋‹ˆ ๋ชจ๋“  OS์—์„œ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค.

๊ฒฐ๋ก  ๋ฐ ์ •๋ฆฌ

๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—ฌ๋„ OS๋ณ„๋กœ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด ๋‹ค๋ฅด๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์—„์ฒญ ํ™œ๋ฐœํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์„œ๋ฅผ 100% ๋ฏฟ์œผ๋ฉด ์•ˆ ๋˜๋Š” ๊ฑฐ ๊ฐ™๋‹ค..
๊ทธ๋ฆฌ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์Šˆ๊ฐ€ ์˜์‹ฌ๋œ๋‹ค๋ฉด ์˜คํ”ˆ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฐจ๋ถ„ํžˆ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ณด์ธ๋‹ค.

์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•œ ์ด์Šˆ๋ฉด ๋‹นํ™ฉํ•˜์ง€ ์•Š์•˜์„ ํ…๋ฐ, ์ž˜ ๋™์ž‘ํ•˜๋˜ ๊ฒŒ ๊ฐ‘์ž๊ธฐ ์•ˆ ๋˜๋‹ˆ ๋งŽ์ด ๋‹นํ™ฉํ–ˆ๊ณ  ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ์ผ๊นŒ๋ด ๋งŽ์ด ๊ฑฑ์ •ํ–ˆ๋‹ค.
๋‹คํ–‰ํžˆ ๊ธˆ๋ฐฉ ํ•ด๊ฒฐ๋˜์—ˆ๊ณ , ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์ด ๋งŽ์•„ ์•Œ์ฐผ๋‹ค.
๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๋ฅผ PR ์š”์ฒญ ๋ณด๋‚ด๊ธด ํ–ˆ์œผ๋‚˜, ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค ๋ณด๋‹ˆ ๊ธˆ๋ฐฉ ๋‹ต๋ณ€์ด ์˜ค๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง„ ์•Š๋Š”๋‹ค..
ํ˜น์‹œ ๋‚˜์ฒ˜๋Ÿผ react-speech-recognition์„ ์ด์šฉํ•˜๋ฉด์„œ ํ•œ๊ตญ์–ด ์Œ์„ฑ์ธ์‹์ด ์ž˜ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„๊นŒ๋ด ๊ธฐ๋กํ–ˆ๋‹ค.

์ฐธ๊ณ 

react-speech-recognition
Chrome์˜ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
Chromium ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ์ผ์ •
MDN SpeechRecognition: lang property

profile
๋ณด์—ฌ์ฃผ๊ธฐ ์‹์ด ์•„๋‹Œ ๊ฒฝํ—˜ํ•˜๊ณ  ๋ฐฐ์šด ๊ฒƒ์„ ์†Œ์†Œํ•˜๊ฒŒ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด