02-types-person
Dec 7, 2025
PersonNode
📁 관련 코드:
lib/types/nodes/person.ts
이메일에서 추출된 사람 정보를 저장합니다.
핵심 개념: 이메일이 Primary Key
왜 이메일인가?
식별자 후보 | 장점 | 단점 |
|---|---|---|
이름 | 직관적 | 동명이인, 표기 다양성 |
이메일 | 고유함 | 한 사람이 여러 이메일 가질 수 있음 |
전화번호 | 고유함 | 이메일에서 추출 어려움 |
선택: 이메일을 primary key로, 여러 이메일은 alternateEmails로 처리
Aliases: 이름 통합 문제 해결
작동 방식
displayName 선택 로직
사용자가 직접 설정한 이름 (USER_INPUT)
가장 자주 사용된 이름
가장 최근에 사용된 이름
첫 번째로 발견된 이름
Organization 필드들
role vs title
필드 | 의미 | 예시 |
|---|---|---|
| 직무 역할 | "Engineer", "Designer", "PM" |
| 공식 직함 | "Senior Software Engineer", "Design Lead" |
왜 분리하는가?
Interaction Statistics
왜 통계를 저장하는가?
시나리오: "자주 연락하는 사람이 누구야?"
시나리오: "최근에 연락한 사람들 보여줘"
통계 업데이트 시점
Person Merge: 동일인 발견 시
문제 상황
mergePersonNodes 함수
병합 규칙:
필드 | 병합 방식 |
|---|---|
| primary 유지 |
| primary 유지 |
| 합집합 (중복 제거) |
| 합집합 + secondary.email 추가 |
| 더 이른 날짜 |
| 더 최근 날짜 |
| 합산 |
병합 예시
Factory Helper
그래프에서의 관계
다음 문서
→ ThreadNode: 이메일 스레드 스키마
→ EntityNode: 회사/제품 엔티티 스키마