우리는 터미널 안에서 완전히 동작하는 Voice Chat을 만들었습니다 (정말이에요)
Source: Dev.to
이것은 GitHub Copilot CLI Challenge 제출물입니다.
What we Built
VoiceSync — 해커 분위기를 원한다면 GUI는 필요 없잖아요? 😎
우리는 터미널에서 완전히 작동하는 음성 채팅 앱을 만들었습니다. 마치 Discord와 Zoom이 만나 명령줄 미학으로 자라난 아이와 같습니다.
Highlights
- 🎙️ 실시간 음성 채팅과 실시간 파형 시각화 (소리 파형을 직접 볼 수 있음)
- 🔐 종단 간 암호화 (AES‑256‑GCM + Diffie‑Hellman, 우리는 야만인이 아니니까)
- 💬 텍스트 채팅 + 데스크톱 알림 (친구가 당신을 비웃을 때 알 수 있음)
- 🌍 인터넷을 통한 동작 – ngrok 터널 사용
- 🤖 내장 AI 어시스턴트 – GitHub Copilot CLI 기반 (네, Copilot 안에 Copilot)
- 📊 오디오 품질 지표 – 지연 시간, 비트레이트, 패킷 지터를 실시간으로 표시
- 👥 입장/퇴장 알림 – 누가 숨어 있는지 알 수 있음
Tech Stack: Node.js, WebSockets, SoX (오디오용), Blessed.js (터미널 UI용), 그리고 상당량의 에너지 드링크.
Shoutout to my team: @muhammedameen_enesiibrah와 @thecodedaniel — 여러분 없이는 그 오디오‑에코 악몽을 디버그할 수 없었어요 🙏
데모
스크린샷
GitHub Copilot CLI 사용 경험
좋은 점
Copilot 사용 전: “WebSocket 오디오 스트림을 어떻게 암호화하나요?”
Copilot 사용 후:
gh copilot suggest "encrypt websocket audio stream nodejs"
…즉각적인 답변.
Copilot CLI는 사실상 우리의 세 번째 뇌와도 같았습니다. 우리는 이를 앱 내부에 통합해 사용자가 VoiceSync를 사용하면서 실제로 질문을 할 수 있게 했습니다:
[You]: @copilot how does encryption work in this app?
[Copilot]: VoiceSync uses AES‑256‑GCM encryption with Diffie‑Hellman key exchange…
메타? 네. 유용한가요? 물론입니다.
Copilot이 우리를 구한 실제 시나리오
지옥 같은 오디오 에코 버그
우리는 3일 동안 호스트가 자신을 두 번 듣는 문제에 시달렸습니다. Copilot은 서버가 자신에게 방송하고 있는지 확인하라고 제안했습니다. 한 줄 수정으로 문제 해결. 고통 = 끝.
gh copilot explain "websocket server broadcasting to sender"
SoX 크로스 플랫폼 악몽
Windows는 -t waveaudio를 사용하고, macOS는 -d, Linux는… 다른 것을 사용합니다. Copilot은 플랫폼을 감지하고 올바른 인자를 사용하는 설정 모듈을 작성하도록 도와주었습니다.
gh copilot suggest "detect platform and use correct audio device args nodejs"
터미널 UI 렌더링 문제
텍스트가 마치 저주받은 파워포인트처럼 패널을 가로질러 넘쳐났습니다. Blessed.js 배치 렌더링에 대해 Copilot에게 물어보니 screen.render()를 너무 많이 호출하고 있던 것이 밝혀졌습니다. 해결, 완료.
“오 댐” 순간
가장 멋진 점? 개발 중에 Copilot을 너무 많이 사용해서 이렇게 생각했어요: “사용자도 똑같이 할 수 있다면 어떨까?”
그래서 @copilot을 인‑앱 명령으로 추가했습니다. 이제 VoiceSync를 사용하는 누구든 터미널을 떠나지 않고 질문할 수 있어요. 마치 대기 중인 개발팀이 있는 것과 같습니다.
생산성 향상
솔직히 우리는 40–50 시간 정도를 절약한 것 같습니다:
- 더 이상 Stack Overflow에 Alt‑Tab을 할 필요 없음
- 더 이상 “잠깐, 구글링 해볼게” 라는 말 필요 없음
- 더 이상 혼자서 난해한 오류 메시지를 해독할 필요 없음
Copilot CLI는 디버깅 파트너이자 문서 검색 엔진이자 고무오리 역할을 한 번에 해줍니다.
우리가 배운 점
GitHub Copilot CLI는 단순히 코드를 작성하기 위한 것이 아니라 코드를 이해하기 위한 도구입니다. 오류가 발생했을 때, 화를 내며 구글 검색을 하는 대신 우리는 다음과 같이 실행했습니다:
gh copilot explain "SyntaxError: Unexpected token in JSON"
그 결과, 우리가 바이너리 오디오 프레임을 JSON으로 파싱하려고 시도하고 있었다는 것을 알려주었습니다(그게… 이제야 이해가 되네요).
직접 해보기
# Install
git clone https://github.com/Boweii22/Copilot
cd Copilot
npm install
# Host a room
npm run host
# Join from another terminal/machine
npm run join -- localhost ABC123 YourName
전체 화면 모드 진입
전체 화면 모드 종료
전체 설명은 README에 있습니다. Windows, macOS, Linux에서 작동합니다. Node.js와 SoX가 필요합니다 (우리는 모든 것을 문서화했습니다, 왜냐하면 우리는 괴물이 아니니까요).
최종 생각
우리는 매우 짧은 시간 안에 이것을 만들었기 때문에, 수면 부족을 감당하면서도 많은 스트레스를 겪었습니다 😭😅. GitHub Copilot CLI는 우리가 필요하다는 걸 몰랐던 네 번째 팀원이었습니다.
“터미널에 도움을 청하고 싶다” 라는 생각을 해본 적이 있다면, 이제 그렇게 할 수 있습니다.
또한, 아직도 친구들과 음성 통화를 위해 Discord를 사용하고 있다면, 뛰어난 터미널 경험을 놓치고 있는 겁니다. 우리에게 @ 해 주세요. 😤
구성 요소: 너무 많은 사탕, GitHub Copilot CLI, 우정의 힘, 그리고 WebSockets 😅
P.S. — 네, P2P가 더 멋질 거라는 걸 알고 있습니다. 그건 v2.0에서 구현될 예정입니다. 지금은 실제로 작동하는 자체 호스팅 음성 채팅을 즐기세요.
팀
[@_boweii](https://dev.to/_boweii), [@muhammedameen_enesiibrah](https://dev.to/muhammedameen_enesiibrah), [@thecodedaniel](https://dev.to/thecodedaniel) 

