보νΈμβνμ μ°κ²°, ν΅ν κΈ°λ‘ λΆμ, κ°μ 리ν¬νΈ, 리λ§μΈλμ μλ¦Όμ μ 곡νλ μΉλ§€ νμ μΌμ΄ μλΉμ€
- GitHub : https://github.com/Alzheimer-dinger
νλ‘μ νΈ μκ° | νμ κ΅¬μ± | κΈ°μ μ€ν | Convention | κ°λ° κΈ°κ° | ν΅μ¬ κΈ°λ₯ | νμ΄μ§λ³ κΈ°λ₯
λ³Έ νλ‘μ νΈλ μΉλ§€ νμμ 보νΈμλ₯Ό μν AI λλ° μΌμ΄ μΉμ±μ λλ€. νμλ μ±μμ μΈκ³΅μ§λ₯κ³Ό μ€μκ° λν(μμ±/μλ§)λ‘ μΌμμ 곡μ νκ³ , 보νΈμλ μ°κ²° κ³μ μ ν΅ν΄ μ¬λ¦¬ μνμ μ΄μ μ§νλ₯Ό λͺ¨λν°λ§ν©λλ€. ν루ν루 μΆμ λλ λνΒ·νλ λ°μ΄ν°λ₯Ό λΆμν΄ μΌΒ·μ£ΌΒ·μ λ¨μ μ’ ν© λ¦¬ν¬νΈ (κ°μ νμλΌμΈ, μ°Έμ¬λ, νκ· ν΅νμκ°, μν μ§ν)λ₯Ό μ 곡νμ¬ μΈμ¬ν λλ΄ κ³ν μ립μ λμ΅λλ€.
- μν΄λ¦ ν΅ν νλ¦ κ΅¬ν (λκΈ° β μ§ν β μ’ λ£ μν κ΄λ¦¬)
- WebSocket κΈ°λ° μ€μκ° μλ§ λ° μλ΅ λ λλ§
- 보νΈμβνμ κ΄κ³ κ΄λ¦¬(μμ²/μΉμΈ/ν΄μ ) λ° λ¦¬λ§μΈλ/μλ¦Ό
- PWA/FCM κΈ°λ° νΈμ μλ¦Ό, μΉ λμ보λλ‘ λ¦¬ν¬νΈ μ΄λ
|
λ Έμμ Frontend UI/UX Β· ν΅ν WebSocket API μ°λ Β· CD Β· FCM |
κΉν¨μ Frontend UI/UX Β· API μ°λ Β· μνκ΄λ¦¬ |
mainβ λ°°ν¬μ© λΈλμΉ.developβ ν΅ν© κ°λ° λΈλμΉ. κΈ°λ₯/리ν©ν λ§/λ²κ·Έ ν½μ€ λ¨Έμ§ λμ. λ°°ν¬ μ PR βmain.feature/{#issue number}/{short-desc}β κΈ°λ₯ λ¨μ μμ . μλ£ μ PR βdevelop.refactor/{#issue number}/{short-desc}β 리ν©ν λ§ μμ . PR βdevelop.fix/{#issue number}/{short-desc}β μ€λ₯ μμ . PR βdevelop.
[feat]: μλ‘μ΄ κΈ°λ₯ μΆκ°
[refactor]: μ½λ 리ν©ν λ§
[style]: μ€νμΌ μμ , μ½λ μλ―Έμ μν₯μ μ£Όμ§ μλ λ³κ²½μ¬ν
[fix]: λ²κ·Έ μμ
[docs]: λ¬Έμ μμ± λ° μμ
[test]: ν
μ€νΈ μ½λ μΆκ°
[chore]: λΉλ μ
무 λ° ν¨ν€μ§ λ§€λμ μμ , production codeμ 무κ΄ν λΆλΆλ€
[rename]: νμΌ, ν΄λ μμ λ° μ΄λ¦ μμ
[comment]: μ£Όμ μΆκ° λ° λ³κ²½
src/
βββ assets/ # μ΄λ―Έμ§, μμ΄μ½ λ± μ μ 리μμ€
β
βββ components/ # μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈ
β βββ common/
β βββ modal/
β βββ index.ts
β
βββ hooks/ # 컀μ€ν
React Hooks
β
βββ mocks/ # κ°λ° λ° ν
μ€νΈμ© mock λ°μ΄ν°
β
βββ pages/ # λΌμ°νΈ λ¨μ νμ΄μ§ μ»΄ν¬λνΈ
β βββ call/
β βββ init/
β βββ mypage/
β βββ report/
β βββ index.ts # νμ΄μ§ export κ΄λ¦¬
β
βββ services/ # API ν΅μ λ‘μ§
β
βββ utils/ # κ³΅ν΅ μ νΈλ¦¬ν° ν¨μ
β
βββ App.tsx
βββ main.tsx
βββ vite-env.d.ts
| κΈ°κ° | μ€νλ¦°νΈ λͺ©ν | μ£Όμ μ°μΆλ¬Ό |
|---|---|---|
| 2025-06-20 ~ 2025-07-03 (1~2μ£Όμ°¨) | μꡬμ¬ν μ μ Β· API λͺ μΈ Β· DB μ€κ³ | μꡬμ¬ν μ μμ, ERD, Swagger μ΄μ |
| 2025-07-04 ~ 2025-07-31 (3~6μ£Όμ°¨) | ν΅μ¬ κΈ°λ₯Β·UI/UX κ°λ°, RAG ꡬν, ν둬ννΈ μμ§λμ΄λ§ | FE νμ΄μ§/μ»΄ν¬λνΈ, BE λλ©μΈ/μΈμ¦, RAG μλΉμ€ |
| 2025-08-01 ~ 2025-08-14 (7~8μ£Όμ°¨) | κΈ°λ₯ ν΅ν©Β·μμ ν ν μ€νΈ | E2E/ν΅ν© ν μ€νΈ, λ²κ·Έν½μ€, μ±λ₯/보μ μ κ² |
| 2025-08-15 ~ 2025-08-21 (9μ£Όμ°¨) | λ°°ν¬Β·λͺ¨λν°λ§Β·μ΄μ | λ¦΄λ¦¬μ¦ λ ΈνΈ, λμ보λ, μλ¦Ό λ£° |
νμμ AIκ° μμ±μΌλ‘ λννκ³ , μ€μκ° μλ§μ μ 곡νλ ν΅ν κΈ°λ₯μ ꡬννμ΅λλ€. ν΅ν μ /μ€/ν μνλ₯Ό λͺ νν λΆλ¦¬νκ³ , μ€λμ€ μ€νΈλ¦Ό μ²λ¦¬μ μ€νΈλ¦¬λ° μλ΅μ μμ μ μΌλ‘ μ°κ²°ν©λλ€.
CallWaiting β CallActive β CallEnd (μ’
λ£ ν μμ½/μ μ₯)
- CallWaiting: μ₯μΉ/κΆν 체ν¬(λ§μ΄ν¬), μλ² μ°κ²° μ€λΉ, μν νμ
- CallActive: μ€μκ° μλ§(λΆλΆ/μ΅μ’ ), λ°ν/μλ΅ νμλΌμΈ, μμκ±°/μ’ λ£ λ²νΌ
- CallEnd: ν΅ν μμ½ λ ΈμΆ, μ μ₯/μ΄ν λμ λΆκΈ°
useAudioStreamν μΌλ‘ λ°ν κ°μ§(VAD) λ° λ§μ΄ν¬ μ€νΈλ¦Ό μμ§WebAudio/MediaDevicesAPI μ¬μ©, μ λ ₯ λ 벨 λͺ¨λν°λ§ λ° μΌμμ μ§/μ¬κ°- μνλ μ΄νΈ/μ±λ μ κ·ν β λ€νΈμν¬ μ μ‘ ν¬λ§·μΌλ‘ μΈμ½λ©(μ€νΈλ¦¬λ°)
- WebSocket κΈ°λ° μλ°©ν₯ μ€νΈλ¦¬λ°: μ€λμ€ μ μ€νΈλ¦Ό, μλ§/μ€λμ€ λ€μ΄μ€νΈλ¦Ό
- λΆλΆ/μ΅μ’ μλ§ κ΅¬λΆ λ λλ§(λΆλΆ κ°±μ β μ΅μ’ νμ )
- μ°κ²° μ λ’°μ±: ν/ν ν¬μ€μ²΄ν¬, μ§μμ μ¬μλ, μΌμ λ€νΈμν¬ λ¨μ 볡ꡬ
- μλ¬/μμΈ μ²λ¦¬: μΈμ¦ μ€λ₯, μ₯μΉ μ κ·Ό μ€ν¨, λͺ¨λΈ κ³ΌλΆν μ μ¬μ©μ κ°μ΄λ
- 리μμ€ μ 리: νΈλ stop, μμΌ close, λ©λͺ¨λ¦¬ ν΄μ (μ’ λ£/μ΄ν μ)
μΌκ°/κΈ°κ° μ’ ν© κ΄μ μμ κ°μ λ° μ΄μ© μ§νλ₯Ό μκ°νν©λλ€. λ μ§/κΈ°κ° μ νμ λ°λΌ API νλΌλ―Έν°λ₯Ό ꡬμ±νκ³ , μ μ²λ¦¬λ λ°μ΄ν°λ‘ κ·Έλν/μ§ν μ»΄ν¬λνΈλ₯Ό λ λλ§ν©λλ€.
- λ μ§ μ ν + μκ° μ΄λͺ¨μ§ μΊλ¦°λλ‘ ν루 νλ¦ λΉ λ₯Έ νμ
- κ°μ κ³μ° λ‘μ§: λν λ‘κ·Έ κΈ°λ° μ μ μ°μΆ(ν볡/μ¬ν/λΆλ Έ/λλ/κΆν λ±)
- μν μ€μ½μ΄ κ²μ΄μ§λ‘ λΉμΌ μνλ₯Ό μ§κ΄μ μΌλ‘ νν
- κΈ°κ° μ ν: 1μ£Ό / 1λ¬ / μ¬μ©μ μ§μ λ²μ
- κ°μ νμλΌμΈ: λ μ§λ³ μ μ μΆμΈ(Recharts λΌμΈ/μμ΄λ¦¬μ΄ μ°¨νΈ)
- μ°Έμ¬λ/νκ· ν΅νμκ°/μνλ κ³μ° λ° μΉ΄λ μ§νλ‘ μμ½
- EndDate κΈ°μ€ μ’ ν© λ³΄κ³ μ: μ ν λ²μμ λ§μΌμ κΈ°μ€μΌλ‘ μμ½ λ¬Έκ΅¬/μ§ν νμ
- ν΅ν μ€: λ§μ΄ν¬ κΆν β μ€λμ€ μ€νΈλ¦Ό(WebSocket) μ μ‘ β AI μλ΅(μ€λμ€/μλ§) μμ
- ν΅ν ν: μΈμ μμ½/λν λ‘κ·Έ μλ² κΈ°λ‘ β λΆμ APIκ° μ§κ³/리ν¬νΈ μμ±
- 리ν¬νΈ μ‘°ν: μ¬μ©μ/μ°κ²° λμ μλ³ β 쿼리 νλΌλ―Έν° κ΅¬μ± β μΌκ°/μ’ ν© API νΈμΆ β μκ°ν
Splash Β· μ¨λ³΄λ©
- μ± λ‘λμ μ€νλμ β λ‘κ·ΈμΈ μνμ λ°λΌ λΌμ°ν
- κ°λ¨ μκ°/κΆν μλ΄(λ§μ΄ν¬, νΈμ)
λ‘κ·ΈμΈ/νμκ°μ
- μ΄λ©μΌΒ·λΉλ°λ²νΈ μ ν¨μ± κ²μ¬, μ€λ₯ λ©μμ§ μΈλΌμΈ νμ
- νμκ°μ ν νλ‘ν μ΄κΈ° μ€μ (μ΄λ¦/μ±λ³/νμμ½λ μ΅μ )
- JWT λ°κΈ(Access/Refresh), FCM ν ν° λ±λ‘
νλ‘ν
- λ΄ νλ‘ν: μ΄λ―Έμ§/μ΄λ¦/μ±λ³/λΉλ°λ²νΈ μμ , νλ§€ μμμ λ―Έμ¬μ©
- κ΄κ³(보νΈμ-νμ) μν νμ
κ΄κ³ κ΄λ¦¬
- νμμ½λλ‘ μμ², λ§λ£ μ μ¬μ μ‘, μΉμΈ/κ±°μ
- κ΄κ³ λͺ©λ‘/ν΄μ , μν(REQUESTED/APPROVED λ±) νμ
ν΅ν(μ€μκ° AI)
- νλ¦:
CallWaiting β CallActive β End - λ§μ΄ν¬ κΆν, λ°ν κ°μ§(useAudioStream), WebSocket/Streaming
- μ€μκ° μλ§/μλ΅, μ’ λ£ ν κΈ°λ‘ μ μ₯
ν΅ν κΈ°λ‘(Transcripts)
- λͺ©λ‘: μΈμ ID/μ λͺ©/μΌμ/μ§μμκ° μμ½
- μμΈ: μμ½/λν λ‘κ·Έ, νμ΄μ§/κ²μ
λΆμ 리ν¬νΈ
- μΌκ°: λ μ§ μ ν, μκ° μ΄λͺ¨μ§ μΊλ¦°λ, κ°μ μ μ, μν μ€μ½μ΄
- μ’ ν©: κΈ°κ°(1μ£Ό/1λ¬/μ¬μ©μ μ§μ ) μ ν, κ°μ νμλΌμΈ, μ°Έμ¬λ/νκ· ν΅νμκ°/μνλ
리λ§μΈλ
- μλ¦Ό μκ°Β·μν λ±λ‘/μ‘°ν(ACTIVE/INACTIVE)
- PWA/FCM κΈ°λ° νΈμ
μ€μ /λ‘κ·Έμμ
- μΈμ μ’ λ£(ν ν° λ¬΄ν¨ν), 보μ/μλ¦Ό μ€μ
νΌλλ°±
- νμ (μ: VERY_LOW~)κ³Ό μ¬μ μ μ₯, μ΄μ κ°μ μ νμ©