- 첫 μ리 μ¬κ³ : "μ μ΄ λ°©μμΈκ°?"λ₯Ό λ°λ³΅ μ§λ¬Ένλ©° κ·Όλ³Έμ μ¬κ΅¬μ±
- 3κ°μ§ λμ λΉκ΅: λͺ¨λ ꡬ쑰λ μ΅μ 3κ°μ§ μ€κ³ λμμ λΉκ΅ λΆμ
- AI cognitive expansion: κΉμ μ€κ³ κ²μ¦κ³Ό μΆ©λ μ€νμ ν΅ν μ΅μ ν
- μ¬μΈ΅μ μν€ν μ²: λ¨μ ꡬνμ΄ μλ νμ₯ κ°λ₯ν ꡬ쑰 μ§ν₯
μ ν μ΄μ :
- κ°μ λΆμ λλ©μΈμ 볡μ‘μ±: VAD, CBT, AI μλ΄ λ± λ³΅μ‘ν λΉμ¦λμ€ λ‘μ§
- νμ₯μ± μꡬμ¬ν: μλ‘μ΄ AI λͺ¨λΈ, λΆμ λ°©μ μΆκ° μ©μ΄
- ν μ€νΈ μ£Όλ κ°λ°: λλ©μΈ λ‘μ§κ³Ό μΈνλΌ λΆλ¦¬λ‘ ν μ€νΈ μ©μ΄
- λ―Έλ λ§μ΄ν¬λ‘μλΉμ€ μ ν: μλΉμ€ λΆλ¦¬ μ λ 립μ λ°°ν¬ κ°λ₯
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Presentation Layer β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β User β β Emotion β β Chat β β
β β Controller β β Controller β β Controller β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Application Layer β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β User β β Emotion β β Chat β β
β β Service β β Service β β Service β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Domain Layer β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β User β β Emotion β β Chat β β
β β Domain β β Domain β β Domain β β
β β Service β β Service β β Service β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Infrastructure Layer β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Prisma β β External β β File β β
β β Repository β β APIs β β Storage β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- κ³ μμ€ λͺ¨λ (Domain, Application)μ μ μμ€ λͺ¨λ (Infrastructure)μ μμ‘΄νμ§ μμ
- μΈν°νμ΄μ€λ₯Ό ν΅ν μμ‘΄μ± μμ
- μμ‘΄μ± μ£Όμ μ ν΅ν λ°νμ κ²°ν©
// μΈν°νμ΄μ€ μ μ
interface IUserRepository {
create(data: CreateUserData): Promise<User>;
findByEmail(email: string): Promise<User | null>;
}
// ꡬν체
class PrismaUserRepository implements IUserRepository {
// Prisma ꡬν
}
// λλ©μΈ μλΉμ€
class UserDomainService {
constructor(private userRepository: IUserRepository) {}
}src/common/
βββ dto/ # Data Transfer Objects
βββ guards/ # Authentication Guards
βββ strategies/ # JWT Strategy
βββ services/ # Shared Services (Prisma)
βββ interfaces/ # Repository & Service Interfaces
βββ constants/ # Provider Tokens
src/domain/
βββ services/ # Domain Business Logic
βββ user-domain.service.ts
βββ emotion-analysis-domain.service.ts
βββ chat-domain.service.ts
βββ history-domain.service.ts
src/infrastructure/
βββ repositories/ # Data Access Layer
βββ prisma-user.repository.ts
βββ prisma-emotion-analysis.repository.ts
βββ prisma-chat.repository.ts
src/
βββ user/ # User Management
βββ emotion/ # Emotion Analysis
βββ chat/ # AI Chat
βββ history/ # Session History
- μΈν°νμ΄μ€:
IUserRepository,IEmotionAnalysisRepository,IChatRepository - ꡬν체:
PrismaUserRepository,PrismaEmotionAnalysisRepository,PrismaChatRepository - λͺ©μ : λ°μ΄ν° μ κ·Ό λ‘μ§ μΊ‘μν, ν μ€νΈ μ©μ΄μ±
- UserDomainService: μ¬μ©μ μμ±, μΈμ¦, νλ‘ν κ΄λ¦¬
- EmotionAnalysisDomainService: κ°μ λΆμ, CBT νΌλλ°± μμ±
- ChatDomainService: Gemini AI λν, λ©μμ§ κ΄λ¦¬
- HistoryDomainService: μΈμ μ μ₯, νμ€ν 리 μ‘°ν
- Python Analysis Server: TensorFlow, Whisper κΈ°λ° κ°μ λΆμ
- Google Gemini API: AI λν μλΉμ€
- File Storage: μ΄λ―Έμ§, μ€λμ€, PDF μ μ₯
βββββββββββββββ
β E2E β (10%)
βββββββββββββββ
βββββββββββββββββββββββ
β Integration β (20%)
βββββββββββββββββββββββ
βββββββββββββββββββββββββββββββ
β Unit β (70%)
βββββββββββββββββββββββββββββββ
test/
βββ unit/ # λλ©μΈ λ‘μ§ λ¨μ ν
μ€νΈ
βββ integration/ # Repository ν΅ν© ν
μ€νΈ
βββ e2e/ # API μλν¬μΈνΈ ν
μ€νΈ
- μλΉμ€ κ²½κ³: User, Emotion, Chat, History λ 립μ λΆλ¦¬ κ°λ₯
- API Gateway: ν΅ν© μλν¬μΈνΈ κ΄λ¦¬
- Event-Driven: μλΉμ€ κ° λΉλκΈ° ν΅μ
- Caching: Redis κΈ°λ° μΈμ , λΆμ κ²°κ³Ό μΊμ±
- Database: μ½κΈ°/μ°κΈ° λΆλ¦¬, μΈλ±μ€ μ΅μ ν
- Async Processing: λμ©λ νμΌ μ²λ¦¬, PDF μμ±
- JWT: Stateless μΈμ¦, ν ν° κΈ°λ° κΆν κ΄λ¦¬
- Rate Limiting: API νΈμΆ μ ν
- Input Validation: DTO κΈ°λ° μ λ ₯ κ²μ¦
- Encryption: λ―Όκ° λ°μ΄ν° μνΈν
- GDPR Compliance: κ°μΈμ 보 보νΈλ² μ€μ
- Audit Logging: μ¬μ©μ νλ μΆμ
- Structured Logging: JSON νν λ‘κ·Έ
- Metrics: μ±λ₯ μ§ν μμ§
- Tracing: λΆμ° μΆμ (OpenTelemetry)
- Database: μ°κ²° μν νμΈ
- External APIs: Gemini, Python μλ² μν
- File Storage: μ μ₯μ μ κ·Όμ± νμΈ
Code β Test β Build β Deploy β Monitor
- Development: λ‘컬 κ°λ° νκ²½
- Staging: ν΅ν© ν μ€νΈ νκ²½
- Production: μ΄μ νκ²½
- Response Time: API μλ΅ μκ° < 500ms
- Throughput: μ΄λΉ μμ² μ²λ¦¬λ
- Error Rate: μλ¬μ¨ < 1%
- Availability: κ°μ©μ± > 99.9%
Ultrathink Engineering μ² νμ μ μ©ν BeMore λ°±μλλ:
- νμ₯ κ°λ₯ν ꡬ쑰: DDD + Clean Architecture
- ν μ€νΈ μ©μ΄μ±: μΈν°νμ΄μ€ κΈ°λ° μμ‘΄μ± λΆλ¦¬
- μ μ§λ³΄μμ±: λͺ νν λ μ΄μ΄ λΆλ¦¬
- μ±λ₯ μ΅μ ν: μΊμ±, λΉλκΈ° μ²λ¦¬ μ€λΉ
- 보μ κ°ν: JWT, μ λ ₯ κ²μ¦, μνΈν
μ΄ κ΅¬μ‘°λ νμ¬ μꡬμ¬νμ μΆ©μ‘±νλ©΄μλ λ―Έλμ νμ₯κ³Ό λ§μ΄ν¬λ‘μλΉμ€ μ νμ κ³ λ €ν μ¬μΈ΅μ μ€κ³μ λλ€.