μ΄μ μμ μ±κ³Ό λ°μ΄ν° μ ν©μ±μ κ°μ νλ 3λ
+ κ²½λ ₯μ Java/Spring Boot λ°±μλ κ°λ°μμ
λλ€.
μ€μ μ΄μ μ€ λ°μν μ μλ κ²μ μ₯μ λμ, μ€λ³΅ μ²λ¦¬ λ°©μ§, μΈμ¦ μν κ΄λ¦¬, λ°°μΉ μ¬μ€ν μ ν©μ± ν보 λ± λ¬Έμ ν΄κ²°μ μ€μ¬μΌλ‘ κ°λ°νκ³ μμ΅λλ€.
π± νμ¬ μν: λ°±μλ & μ€μκ° μμ±/λ―Έλμ΄ μΈνλΌ κ°λ°
π κΈ°μ λΈλ‘κ·Έ: so-dak.com
π μλΉμ€: voice-link.co.kr
π§ μ΄λ©μΌ: junho6667@gmail.com
π GitHub: github.com/junho0831
Realtime & Media Infrastructure
ποΈ VoiceLink μ€μκ° μμ± ν΅ν μλΉμ€ (voice-link.co.kr)
- κΈ°μ μ€ν: Spring Boot, LiveKit SFU, WebRTC, Redis, PostgreSQL, SSE, Docker, Nginx
- ν΅μ¬ μν λ° μ±κ³Ό:
- Redis Lua Script, Transactional Outbox Pattern,
FOR UPDATE SKIP LOCKED,PESSIMISTIC_WRITEκΈ°λ°μΌλ‘ μ€μκ° λμ λ§€μΉ λ° ν΅ν μΈμ μ ν©μ± ꡬν - LiveKit λ―Έλμ΄ μλ² μΉν λ° Redis κΈ°λ° 5μ΄ λ¨μ ν΅ν νμ§ νμλΌμΈ μ μ₯/μ§λ¨ μλΉμ€ μ€κ³
- coturn TURN/TLS μ΅μ ν λ° Nginx 리λ²μ€ νλ‘μ νλμΌλ‘ λͺ¨λ°μΌ/λ°©νλ²½ μ°κ²° μ€ν¨ μ΅μν
- Redis Lua Script, Transactional Outbox Pattern,
π So-Dak κΈ°μ λΈλ‘κ·Έ (so-dak.com)
- κΈ°μ μ€ν: WordPress, Python Automation, AI Pipeline, Docker
- μ€λͺ : λ°±μλ, WebRTC, μΈνλΌ μ€λ¬΄ λ Ένμ° λ° μ΄μ μ₯μ λμ κΈ°μ ν¬μ€ν νμ΄νλΌμΈ μλν μ΄μ
- μ£Όμ λ΄μ©: Java λ°°μΉλ₯Ό Python/Airflow DAGλ‘ μ΄κ΄νμ¬ FTP λ€μ΄λ‘λ -> κ²μ¦ -> λ³ν -> DB μ μ¬ -> μλ³Έ μμ λ¨κ³λ₯Ό Task λΆλ¦¬
- κΈ°μ μ μ±κ³Ό:
- DB Commit μλ£ ν μλ³Έ μμ μμλ₯Ό κ³ μ νμ¬ λ°μ΄ν° μ μ€ μλ μ¬μ€ν μμ μ± ν보
- Unique Constraint λ° Upsert μ μ©μΌλ‘ μ€λ³΅ μ μ¬ λ°©μ§
Chunk μ‘°ν -> νμ± -> Range Partition COPYλ°©μμΌλ‘ λ©λͺ¨λ¦¬ ν¨μ¨ν
- μ£Όμ λ΄μ©: Elasticsearch μ₯μ λμ DB Fallback κ²μ μ‘°μ¨ λ° Redis TTL ν ν° κ΄λ¦¬
- κΈ°μ μ μ±κ³Ό:
- ES μ₯μ μ μ¬μ©μμ μ΄μμμκ² λμΌν κ²°κ³Όλ₯Ό μ 곡νλ DB Fallback κ²μ μκ³ λ¦¬μ¦ κ΅¬μΆ
- Refresh Token μ μ₯Β·κ²μ¦Β·νμ μ Redis TTL κΈ°λ°μΌλ‘ μΌμν
- Index λ° Unique Constraint μ μ©μΌλ‘ μ μ²Β·μΉμΈ μ€λ³΅ λ°©μ§
- μ£Όμ λ΄μ©: APIλ³ μμ΄ν μ€λ₯ μλ΅μ κ³΅ν΅ μμΈ μ²λ¦¬ κ³μΈ΅ λ° νμ€ μ€λ₯ ν¬λ§·μΌλ‘ ν΅ν©
- κΈ°μ μ μ±κ³Ό:
- μ₯μ λΆμ 리λνμ 40λΆ β 12λΆ (70% κ°μ)
- λμΌ μ€λ₯ μ¬λ°λ₯ 30% κ°μ
- JUnit5/Mockito κΈ°λ° νκ· ν μ€νΈ μ²΄κ³ κ΅¬μΆ λ° Vue.js κ³΅ν΅ μ€ν μ΄ μ 리
- κΈ°μ μ€ν: Spring Boot, GitLab CI/CD, Docker, Nginx
- μ±κ³Ό: GitLab CI/CD λ° Docker κΈ°λ° λ°°ν¬ νμ΄νλΌμΈ νμ€νλ‘ λ¦΄λ¦¬μ€ λ¦¬λνμ 1μκ° β 25λΆ, λ°°ν¬ μ€ν¨μ¨ 5% β 0% λ¬μ±
- κΈ°μ μ€ν: Spring Boot, OpenAI API, LangChain, RAG
- μ±κ³Ό: LangChain + RAG κΈ°λ° λ§₯λ½ κ²μ ꡬμΆμΌλ‘ κ²μ μ νλ 60% β 80%, μλ΅ λκΈ° μκ° 5λΆ β 1λΆ (μ£ΌλΉ μ 무 12μκ° μ κ°)
- μ±κ³Ό: λ°μ΄ν° λ°°μΉ μλν λ° Admin κΈ°λ₯ κ³ λνλ‘ μ ν©μ± μ΄μ μ 3건 β 0건 λ¬μ±
| νλ‘μ νΈ | κΈ°μ μ€ν / λ΄μ© | λ§ν¬ |
|---|---|---|
| VoiceLink | WebRTC, LiveKit, Redis Lua Script, Outbox Pattern | voice-link.co.kr |
| So-Dak κΈ°μ λΈλ‘κ·Έ | λ°±μλ, WebRTC, μΈνλΌ μ€λ¬΄ κΈ°μ λΈλ‘κ·Έ | so-dak.com |
| μλͺ¨μ μμ€ν | OAuth 2.0 + JWT μΈμ¦, Spring Security κΆν κ΄λ¦¬ | GitHub Link |
| GPT API μλΉμ€ | OpenAI GPT κΈ°λ° λΉλκΈ° API μλΉμ€ κ°λ° | GitHub Link |
βοΈ μ΄μ μμ μ±κ³Ό λ°μ΄ν° μ ν©μ±μ κΎΈμ€ν κ°μ νλ λ°±μλ κ°λ°μ λ°μ€νΈμ λλ€.


