Back to Trait Vector
Architecture Pattern

DNA vs. Proposal Object

"DNA is the Fluid Intelligence,
Proposal Object is the Solid Contract."
(확률적 입력값에서 확정적 비즈니스 객체로)

1. The Difference: 역할의 분리

DNA는 엔진을 위한 연료이고, Object는 사용자를 위한 결과물입니다.
🧬
DNA (Trait Vector)
Input & Ingredient
  • 성격: 확률적, 유동적 (Fluid)
  • 데이터 형태: 고차원 벡터 [0.12, 0.88...]
  • 상태(State): 없음 (계속 변함)
  • 역할: 매칭 적합도 계산의 '재료'
VS
📦
Proposal Object
Output & Contract
  • 성격: 확정적, 불변 (Immutable)
  • 데이터 형태: 구조화된 JSON Entity
  • 상태(State): 있음 (제안됨 → 수락/거절)
  • 역할: 비즈니스 트랜잭션의 '단위'

2. Transformation Process: 공존의 방식

확률(DNA)을 비즈니스(Object)로 변환하는 아키텍처 흐름
Step 1. Profiling Engine
Generate DNA (Trait Vector)
"사용자의 성향을 벡터로 요약"
Step 2. Matching Engine (Calculator)
Compute Similarity Score
Vector Math (DNA A vs DNA B)
Step 3. Architecture Layer
Create "Proposal Object"
Freeze the Probability into a Snapshot

3. Why Wrap? (왜 객체화가 필요한가?)

확률 모델만으로는 비즈니스 책임을 질 수 없기 때문입니다.

🧊 Freezing Probability

DNA와 확률은 매초 변합니다. 하지만 계약은 시점이 중요합니다.
Proposal Object는 "2026년 2월 16일 14:00에 98점으로 추천했다"는 사실을 영구히 박제(Snapshot)합니다.

🔄 Lifecycle Management

벡터에는 '거절'이나 '수락'이라는 개념이 없습니다.
객체(Object)만이 상태(State)를 가질 수 있으며, 이를 통해 유저의 피드백을 받아 다시 학습(Retraining)할 수 있습니다.

4. Data Structure View

// Proposal Object Structure
{
  "proposal_id": "PROP-2026-8821",
  "status": "PROPOSED",  // State exists here!
  "timestamp": "2026-02-16T14:30:00Z",
  
  // The Snapshot of Intelligence
  "intelligence_snapshot": {
    "model_version": "v3.2",
    "matching_score": 0.98,
    "used_dna_vector_hash": "sha256:a1b2..." 
  },

  // The Business Entity
  "target_profile": "CAREGIVER_ID_552"
}