Skip to content

Latest commit

ย 

History

History
98 lines (77 loc) ยท 9.4 KB

README.md

File metadata and controls

98 lines (77 loc) ยท 9.4 KB

hangaround-logo

HangAround

COVID 19 ๋“ฑ์žฅ ์ดํ›„์˜ '์–ธํƒํŠธ'์˜ ์‹œ๋Œ€๋ฅผ ์œ„ํ•œ ๐ŸงŠ์•„์ด์Šค ๋ธŒ๋ ˆ์ดํ‚น ํ™”์ƒ ์›น ์„œ๋น„์Šค๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป (๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: 22.03 - 22.05)
๐Ÿ’โ€โ™€๏ธ ์ฑ„ํŒ…๋ฐฉ์—์„œ ์ž์œ ๋กœ์šด ํ™”์ƒ ํšŒ์˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’โ€โ™‚๏ธ ์•„์ด์Šค ๋ธŒ๋ ˆ์ดํ‚น์„ ์œ„ํ•ด ์ดˆ์„ฑ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

๊ธฐํš

- ์™€์ด์–ดํ”„๋ ˆ์ž„




ย 

- ์ „์ฒด ๋ชจ๋“ˆ ์„ค๊ณ„๋„

ย 

์‹œ์—ฐ ์˜์ƒ

ย 

์ฃผ์š” ๊ธฐ์ˆ 

1. WebRTC ๐Ÿ”—

2

WebRTC(Web Real-Time Communications)๋ž€, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์‚ฌ์ดํŠธ๋“ค์ด ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์Œ์„ฑ, ์˜์ƒ ๋ฏธ๋””์–ด ํ˜น์€ ํ…์ŠคํŠธ, ํŒŒ์ผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ P2P ๋ฐฉ์‹์œผ๋กœ ๋ธŒ๋ผ์šฐ์ ธ๋ผ๋ฆฌ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  JavaScript ๊ธฐ๋ฐ˜ ์˜คํ”ˆ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๐Ÿ’ป

WebRTC๋Š” Latency๊ฐ€ ์งง๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ง€์—ฐ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ์—†๋Š” REAL-TIME ๋ฐฉ์†ก์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ๋ณ„๋‹ค๋ฅธ ๋ฏธ๋””์–ด ์†ก์ถœ ๊ด€๋ จ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ค์น˜ ์—†์ด ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜„

ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์ตœ์‹ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ P2P ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž์˜ IP์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด STUN/TURN ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ ์—ญ์‹œ ๋‹จ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค”

ย 

2. Web Socket

img

WebSocket์€ ํ•˜๋‚˜์˜ TCP ์ ‘์†์— ์ „์ด์ค‘ ํ†ต์‹  ์ฑ„๋„์„ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•˜๋ฉด ์›น ๋ฒ„์ „์˜ TCP๋˜๋Š” Socket์ด๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— Socket Connection์„ ์œ ์ง€ํ•ด์„œ ์–ธ์ œ๋“  ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง€๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ™”์ƒ์ฑ„ํŒ… ๊ตฌํ˜„์„ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“น

์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์  ์™ธ์—๋„ ํด๋ผ์ด์–ธํŠธ์™€ ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์ด ๋˜๋ฉด ๊ณ„์† ๊ฐ™์€ ๋ผ์ธ์„ ์‚ฌ์šฉํ•ด์„œ ํ†ต์‹ ํ•˜๋ฏ€๋กœ HTTP์™€ TCP์—ฐ๊ฒฐ ํŠธ๋ž˜ํ”ฝ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ”ฅ

ย 

3. STT


STT(Speech-to-Text)๋ž€ ์‚ฌ๋žŒ์ด ๋งํ•˜๋Š” ์Œ์„ฑ ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•˜์—ฌ ๊ทธ ๋‚ด์šฉ์„ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ์Œ์„ฑ์„ ์ „์ฒ˜๋ฆฌํ•œ ํ›„, ๋งŽ์€ ์Œ์„ฑ ๋ฐ์ดํ„ฐ์— ์˜ํ•ด ํŠธ๋ ˆ์ด๋‹๋œ ๋ชจ๋ธ๊ณผ ๋น„๊ตํ•˜์—ฌ ํ…์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์–ผ๋งˆ๋‚˜ ๋‹ค์–‘ํ•œ ์Œ์„ฑ ๋ฐ์ดํ„ฐ๋กœ ํŠธ๋ ˆ์ด๋‹์„ ํ–ˆ๋Š”์ง€, ์–ผ๋งˆ๋‚˜ ํŠนํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•˜์—ฌ ๋ชจ๋ธ์„ ์ƒ์„ฑํ–ˆ๋Š”์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.๐ŸŽ™๏ธ

๋Œ€ํ‘œ์ ์ธ STT API ์„œ๋น„์Šค๋กœ๋Š” Google Cloud Speech API, Kakao Speech API, Naver CSR, Microsoft Azure STT ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Web Speech API๋ฅผ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ STT API๋กœ ์˜คํ”ˆ์†Œ์Šค์ด๊ณ , MDN ๋ฌธ์„œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์— ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜

ย 

๊ธฐ์ˆ  ์Šคํƒ

- ๋ฐฑ์—”๋“œ

  • nodejs: v16.6.1
  • express: v4.17.3
  • MySQL
  • Docker
  • AWS CLI: v2
  • AWS EC2 ย 

- ํ”„๋ก ํŠธ์—”๋“œ

ย 

Install modules dependency

$ npm install

Run Project

$ yarn start $ npm start

Build project

$ yarn build

ย 

ํŒ€์› ์†Œ๊ฐœ

์ด๋ฆ„ github ์—ญํ•  ์†Œ๊ฐ
๊น€์Šน์ง€ ๐Ÿ”—๋งํฌ ํ”„๋ก ํŠธ์—”๋“œ ์–ด๋Š์ •๋„ ๋งŒ๋“ค์–ด์ง„ ์ฝ”๋“œ ์œ„์—์„œ๋งŒ ์ž‘์—…ํ•˜๋‹ค๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ initialization์„ ์ง์ ‘ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ธฐํšŒ์—ฌ์„œ ๋œป๊นŠ์—ˆ๋‹ค. ํŠนํžˆ ํ™”์ƒ ํ†ตํ™” ๊ธฐ์ˆ ์„ ์„œ๋ฒ„๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ WebSocket์˜ ๋™์ž‘์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์›๋ž˜๋Š” Google Cloud์˜ STT ๊ธฐ์ˆ ๋งŒ ๊ฒฝํ—˜ํ•ด๋ดค์—ˆ๋Š”๋ฐ ๊ฝค ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ React์—์„œ STT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด ์‹ ๊ธฐํ–ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋ก ํŠธ ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋“ค๊ณผ ์†Œํ†ตํ•˜๋Š” ๋ฒ•์„ ๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋Ÿฐ ๊ฒฝํ—˜์ด ์•ž์œผ๋กœ์˜ ์ž‘์—…์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊น€์˜ˆ์ง€ ย ย ย ย ย ย ย ย  ๐Ÿ”—๋งํฌ ย ย ย ย ย ย  ย ํŒ€์žฅ
ย ๋ฐฑ์—”๋“œ
๋””์ž์ธ ย ย ย ย ย ย ย ย ย  ย ย ย ย ย ย 
Node.js๋ฅผ ํ™œ์šฉํ•œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๊ณผ ์‹ค์‹œ๊ฐ„ ์›น์†Œ์ผ“ ํ†ต์‹  ๋‹ค๋ฃจ๊ธฐ, STT API ์‚ฌ์šฉํ•˜๊ธฐ, ์„œ๋ฒ„ ๋ฐฐํฌ, ๋„์ปค ์‚ฌ์šฉ, ์›น ๋””์ž์ธ ๋“ฑ ์ƒˆ๋กญ๊ณ  ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง€๋Š” ๋ถ€๋ถ„๋„ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ๋งŒํผ ๋” ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ˆ˜๋งŽ์€ ์—๋Ÿฌ์™€ ์—ญ๊ฒฝ์„ ์ด๊ฒจ๋‚ด๊ณ  ํ˜ธํก์„ ๋งž์ถ”๋ฉด์„œ ํŒ€์›Œํฌ๊ฐ€ ์–ด๋–ค ๊ฑด์ง€ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ๐ŸŒฑ
๋…ธ์ง„์ฃผ ย ย ย ย ย ย ย ย  ๐Ÿ”—๋งํฌ ย ย ย ย ย ย  ๋ฐฑ์—”๋“œ ย ย ย ย ย ย ย ย  ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋กœ Postman, DataGrip, Figma ๋“ฑ ์ƒˆ๋กœ ์ ‘ํ•˜๋Š” ํˆด๋“ค์˜ ์‚ฌ์šฉ์— ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค๊ณผ ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•˜๋ฉฐ Node.js์˜ ๋ผ์šฐํŒ… ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์— ๊ด€ํ•ด ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ ์ž์„ธํžˆ ๊ธฐํšํ•˜๊ณ  ์—ญํ• ์„ ๋ถ„๋‹ดํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ํ˜‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ํ•ด ๋”์šฑ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋œป๊นŠ์€ ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๐ŸŒŸ
์ด์ˆ˜๋ฏผ ๐Ÿ”—๋งํฌ ๋ฐฑ์—”๋“œ Node.js + TypeScript + Express๋ผ๋Š” ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ์— ๋„์ „ํ•˜๋ฉด์„œ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง€๋Š” ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•˜์ง€๋งŒ, ๋•๋ถ„์— ๋”์šฑ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ด์™ธ์—๋„ ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ œ์ž‘๊ณผ WebRTC, STT API, AWS ์—ฐ๋™ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ธฐ์— ์˜๋ฏธ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋ฅผ ๋””๋ฒจ๋กญํ•˜๊ณ , ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ์–ด๋ ค์šด ์ ๋“ค๋„ ๋งŽ์•˜์ง€๋งŒ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ํ•˜๋‚˜ํ•˜๋‚˜ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ”๊ธฐ์— ๋”์šฑ ๊ฐ’์ง„ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. โœจ