π§βπ» κ°λ° κ°μ΄λ
μ΄ λ¬Έμλ μ΄κ°μ΄ νλ‘μ νΈμ μ 체 μμ€ν
ꡬμ±κ³Ό κ°λ° κ³Όμ μ 체κ³μ μΌλ‘ μκ°ν©λλ€.
νλ‘ νΈμλ, λ°±μλ, AI λͺ¨λΈ, νλμ¨μ΄, ν΄λΌμ°λ μΈνλΌκΉμ§ μ΄κ°μ΄μ κΈ°μ μ ν΅μ¬ μμλ€μ μ΄ν΄νκ³ , μ§μ ꡬνν μ μλλ‘ λ¨κ³λ³λ‘ μλ΄ν©λλ€.
π νλ‘μ νΈ κ΅¬μ‘° μμ½
μ΄κ°μ΄λ λ€μκ³Ό κ°μ μΈ κ°μ§ ν΅μ¬ μ»΄ν¬λνΈλ‘ ꡬμ±λ©λλ€:
- λΌμ¦λ² 리νμ΄ (RPi): μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ΄λΉνλ©°, μμ± κ°μ§, λ Ήμ, λ³΅μ½ μλ¦Ό λ± μ§μ μ μΈ μνΈμμ© κΈ°λ₯μ μνν©λλ€.
- EC2 μλ²: FastAPI κΈ°λ°μ λ°±μλ μλ²λ‘, STT λ° TTS μμ² μ²λ¦¬, μ¬μ©μ μ 보 λ° λ³΅μ½ μ΄λ ₯ μ μ₯, νλ‘ νΈμλ νΈμ€ν μ λ΄λΉν©λλ€.
- GCP μλ²: LLaMA κΈ°λ° LLM λͺ¨λΈμ νμ¬ν μΆλ‘ μλ²λ‘, λ³΅μ½ μ¬λΆ λ° κ±΄κ° κ΄λ ¨ λ°ν λΆμμ μ²λ¦¬ν©λλ€.
λͺ¨λ μ»΄ν¬λνΈλ REST API κΈ°λ°μΌλ‘ ν΅μ νλ©°, κ³ λ Ήμ μΉνμ±κ³Ό μ€μκ° μλ΅μ±μ κ³ λ €νμ¬ μ€κ³λμμ΅λλ€.
κ·Έλ¦Ό-μ΄κ°μ΄ μν€ν
μ² λ€μ΄μ΄κ·Έλ¨ β
π§ 1. μμμ μμ
π κ³΅ν΅ κ°λ° νκ²½
- Python 3.10 μ΄μ
- Node.js 18 μ΄μ
- pip / npm
- pm2 (λ°±μλ νλ‘μΈμ€ κ΄λ¦¬μ©)
βοΈ ν΄λΌμ°λ μΈνλΌ κ΅¬μ±
| κ΅¬μ± μμ | νλ«νΌ | μν |
|---|---|---|
| EC2 | AWS | λ°±μλ API μλ² λ° νλ‘ νΈμλ μ μ νμΌ νΈμ€ν |
| GCP | LLM κΈ°λ° AI μΆλ‘ μλ² | |
| RPi | λ‘컬 | μ¬μ©μ μμ± μΈν°νμ΄μ€ λ° λλ°μ΄μ€ μ μ΄ |
π μ 체 λ°μ΄ν° νλ¦
[RPi]
β λ
Ήμ
[EC2 - STT μ²λ¦¬ λ° API]
β ν
μ€νΈ
[GCP - LLM λΆμ]
β ν
μ€νΈ
[EC2 - νμ± λ° TTS μμ±]
β μμ±
[RPi - μμ± νΌλλ°± μ¬μ]
μ΄ κ΅¬μ‘°λ κ° κΈ°λ₯μ΄ λ 립μ μΌλ‘ μλνλ©΄μλ REST APIλ₯Ό ν΅ν΄ μ κΈ°μ μΌλ‘ μ°κ²°λλλ‘ κ΅¬μ±λμ΄ μμ΄, κΈ°λ₯ νμ₯μ΄λ μ μ§λ³΄μμ μ 리ν©λλ€.
βοΈ 2. λ°±μλ (FastAPI)
μ΄κ°μ΄ νλ‘μ νΈ λ°±μλ Github
μ΄κ°μ΄μ λ°±μλ μλ²λ FastAPI κΈ°λ°μΌλ‘ ꡬμΆλμμΌλ©°, μ¬μ©μ μΈμ¦λΆν° μμ± λ°μ΄ν° μ²λ¦¬κΉμ§ λ€μν κΈ°λ₯μ μ 곡ν©λλ€.
- μ£Όμ μν :
- μ¬μ©μ λ±λ‘ λ° μΈμ¦
- λ³΅μ½ κΈ°λ‘ λ° μ€μΌμ€ κ΄λ¦¬
- STT λ°μ΄ν° μμ λ° TTS νμΌ λ°ν
- LLM μ²λ¦¬ μν΄ GCP μλ²μ ν΅μ
- λ°μ΄ν°λ² μ΄μ€: νμ¬λ SQLite μ¬μ© (κ°λ³κ³ κ΄λ¦¬ μ©μ΄).
ν₯ν μμ μ±κ³Ό νμ₯μ±μ κ³ λ €ν΄ PostgreSQL μ΄κ΄μ κ²ν μ€μ λλ€.
π¨ 3. νλ‘ νΈμλ (React + Vite + TailwindCSS)
μ΄κ°μ΄ νλ‘μ νΈ νλ‘ νΈμλ Github
νλ‘ νΈμλλ Reactμ Vite, TailwindCSS κΈ°λ°μΌλ‘ ꡬμΆλμ΄ μμΌλ©°, κ³ λ Ή μ¬μ©μλ₯Ό κ³ λ €ν ν€μ€μ€ν¬ μ€νμΌμ UIλ₯Ό μ 곡ν©λλ€.
- μ£Όμ νΉμ§:
- λ¨μνκ³ λͺ νν λ²νΌ μ€μ¬μ UI
- λ³΅μ½ μκ° νμ λ° νΌλλ°± κΈ°λ₯
- μ΄λ₯΄μ λ€κ» μ΅μ νλ μΈν°νμ΄μ€ ꡬμ±
λμμΈμ Material UIμ TailwindCSSλ₯Ό νΌν©ν΄ μ¬μ©νμ¬, λΉ λ₯Έ κ°λ°κ³Ό μ μ°ν μ€νμΌλ§μ΄ κ°λ₯νλλ‘ νμ΅λλ€.
π§ 4. AI μλ² λ° λͺ¨λΈ (GCP κΈ°λ°)
μ΄κ°μ΄ νλ‘μ νΈ AIμλ² λ° λͺ¨λΈ Github
μ΄κ°μ΄μ ν΅μ¬ λΆμ κΈ°λ₯μ GCPμ μμΉν AI μΆλ‘ μλ²μμ μνλλ©°, LLaMA κΈ°λ° LLMμ νμ©ν©λλ€.
- μ¬μ© λͺ¨λΈ:
MLP-KTLim/llama-3-Korean-Bllossom-8B - μ΄μ λ°©μ: GCP VM μΈμ€ν΄μ€μμ FastAPI κΈ°λ° μΆλ‘ API μ€ν
π€ μ£Όμ κΈ°λ₯
- μμ°μ΄ λ°νλ‘λΆν° λ³΅μ½ μ¬λΆ(T/F), μμ μΆλ‘
- μν© λΆλ₯(Text Classification)λ₯Ό ν΅ν ν둬ννΈ μλ μ ν
- μν©μ μλ§μ λ΅λ³
μ΄ κ΅¬μ‘°λ 볡μ‘ν λͺ λ Ήμ΄ μμ΄λ μμ λ‘μ΄ μ¬μ©μ μλ΅ μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ©°, μ€μ λνμ κ°κΉμ΄ μμ°μ€λ¬μ΄ μνΈμμ©μ ꡬνν μ μμ΅λλ€.
π 5. νλμ¨μ΄ μ°λ (λΌμ¦λ² 리νμ΄)
μ΄κ°μ΄ νλ‘μ νΈ νλμ¨μ΄ Github
λΌμ¦λ² 리νμ΄λ μ΄κ°μ΄ μμ€ν μ νλ‘ νΈλΌμΈ λλ°μ΄μ€λ‘, μ€μ μ¬μ©μκ° λ§μ£Όνλ μΈν°νμ΄μ€ μν μ ν©λλ€.
- ν΅ν© μ₯μΉ:
- λ§μ΄ν¬ (
arecord,pyaudio) β μμ± λ Ήμ - μ€νΌμ»€ (
mpg123,aplay) β μμ± νΌλλ°± μ¬μ - Wake Word κ°μ§ (
pvporcupine) β βμ΄κ°μ΄β - LED, λ²νΌ, λμ€νλ μ΄ β μκ°μ νΌλλ°± λ° μνΈμμ©
- λ§μ΄ν¬ (
π λ³΅μ½ λ£¨ν΄ μ²λ¦¬ νλ¦
- μ€νΌμ»€κ° μΈμ¬
- μμ¬ μ¬λΆ νμΈ
- λ³΅μ½ μκ° μλ¦Ό
- 5λΆ ν λ³΅μ½ μ¬λΆ μ¬νμΈ
- λ―Έμλ΅ λλ λ―Έλ³΅μ½ μ 10λΆ κ°κ²© 3ν μΆκ° νμΈ
Wake Wordμ λ³΅μ½ λ£¨ν΄μ λΉλκΈ°μ μΌλ‘ μ€νλλ©°, λ§μ΄ν¬ μμ μΆ©λ λ°©μ§λ₯Ό μν΄ mic_lock λκΈ°ν μ²λ¦¬κ° ꡬνλμ΄ μμ΅λλ€.
β λ§λ¬΄λ¦¬
μ΄ κ°λ° κ°μ΄λλ μ΄κ°μ΄ νλ‘μ νΈμ μ λ°μ μΈ κΈ°μ ꡬ쑰λ₯Ό μ΄ν΄νκ³ , μ§μ κ°λ° νκ²½μ ꡬμ±νκ±°λ κΈ°λ₯μ νμ₯νκ³ μ νλ κ°λ°μμκ² μ€μ§μ μΈ μ 보λ₯Ό μ 곡ν©λλ€.
μ 체 νλ¦μ λ¨κ³μ μΌλ‘ λ°λΌκ°λ©΄, λ³΅μ½ μλ¦Ό AI μ€νΌμ»€ μμ€ν
μ μμ±λ μκ² κ΅¬ννκ³ μμ μ μΌλ‘ μ΄μν μ μμ΅λλ€.