제3장 프로토콜 아키텍처
3.1 프로토콜 계층화
DTP는 계층형 아키텍처 설계를 채택하며, 위에서 아래로 다음과 같다:
┌─────────────────────────────────────────────┐
│ 애플리케이션 계층 │
│ iFay / coFay / Personal Data Heap │
│ 단말 애플리케이션(소프트웨어 / 하드웨어) │
├─────────────────────────────────────────────┤
│ DTP 프로토콜 계층 │
│ DTP_Master Engine / DTP_Slave Engine │
│ ┌───────────────────────────────────────┐ │
│ │ 협상 관리자 (Agreement Manager) │ │
│ │ 프레임 코덱 (Frame Codec) │ │
│ │ DAG 관리자 (DAG Manager) │ │
│ │ 암호화 모듈 (Encryption Module) │ │
│ │ 세션 관리자 (Session Manager) │ │
│ │ 재전송 관리자 (Resume Manager) │ │
│ └───────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ 어댑터 계층 │
│ Transport_Adapter │
├─────────────────────────────────────────────┤
│ 전송 계층 │
│ BLE / WebSocket / TCP / RTSP / ... │
└─────────────────────────────────────────────┘
설계 원칙
- 전송 무관성: Transport_Adapter를 통해 하위 전송을 추상화하여, DTP 핵심 로직과 구체적 전송 프로토콜을 분리
- 협상 우선: 모든 데이터 전송은 양측이 협상하여 달성한 약정에 기반해야 하며, "무약정 전송"은 없음
- 데이터 주권: 주단이 데이터 흐름에 대한 최종 결정권을 보유하며, 종단은 데이터 생산자 또는 소비자
- 종단간 암호화: Payload를 암호화하여 전송하며, FayGer 런타임은 평문에 접근 불가
- 맥락 보전: 각 Fragment가 구조화된 컨텍스트 메타데이터를 포함하여, 데이터 수집 시 맥락이 손실되지 않도록 보장
- 복구 가능성: 시퀀스 번호 기반 재전송 메커니즘으로, 연결 중단 후 원활한 복구 지원
3.2 핵심 컴포넌트
DTP_Engine
DTP 프로토콜의 핵심 처리 엔진으로, 두 가지 변형이 있다:
- DTP_Master: Fay 측에서 실행되며, 데이터 수집 발행권과 데이터 주입 결정권을 보유
- DTP_Slave: 단말 측에서 실행되며, 데이터 생산과 주입 신청을 담당
양자는 프레임 코덱, 암호화, DAG 관리 등 기본 기능을 공유하지만, 협상 권한과 데이터 흐름 방향에서 차이가 있다.
Transport_Adapter
하위 전송 프로토콜의 추상 인터페이스. DTP_Engine은 이 인터페이스를 통해 구체적 전송 프로토콜과 통신하여 전송 무관성을 실현한다. 지원되는 전송 프로토콜에는 BLE, WebSocket, TCP, RTSP 등이 있다.
하위 전송 연결이 끊어지면, Transport_Adapter는 DTP_Engine에 연결 상태 변경 이벤트를 보고하여 세션 일시 중지 및 재전송 프로세스를 트리거한다.
Agreement Manager(협상 관리자)
약정의 전체 생명주기를 관리한다:
- 생성: 협상 요청 발행
- 협상: 요청과 응답 처리
- 활성화: 양측이 합의에 도달한 후 Agreement_ID 생성
- 동적 조정: 전송 과정 중 약정 매개변수 수정
- 종료: 중지 명령을 통해 약정 종료
Frame Codec(프레임 코덱)
Logical_Frame의 직렬화(바이너리로 인코딩)와 역직렬화(바이너리에서 디코딩), 그리고 포맷 출력(Pretty Print)을 담당한다. 프레임이 서로 다른 플랫폼 간에 올바르게 전송되도록 보장한다.
DAG Manager(DAG 관리자)
Fragment 간의 유향 비순환 그래프 의존 관계를 관리한다:
- 순환 감지: 순환 의존 형성 방지
- 의존 해석: 의존 대상이 아직 도착하지 않은 상황 처리
- 관계 조회: Fragment의 의존 및 피의존 관계 조회
Encryption Module(암호화 모듈)
Payload의 종단간 암호화와 복호화를 담당하며, CAP에서 사전 협상된 키를 사용한다. FayGer 런타임 환경이 평문 데이터에 접근할 수 없도록 보장한다.
Session Manager(세션 관리자)
DTP 세션의 생명주기를 관리한다:
- 세션 생성 및 종료
- 상태 영속화 및 복구
- 타임아웃 감지 및 리소스 해제
Resume Manager(재전송 관리자)
시퀀스 번호 기반 재전송 메커니즘을 관리한다:
- Fragment 캐시 관리
- 시퀀스 번호 추적
- 중단점 복구 조정
3.3 DTP_Engine 상태 머신
DTP_Engine의 실행 상태는 다음 상태 머신을 따른다:
┌──────────────────────────────────────────┐
│ │
┌───────┐ │ ┌──────────────┐ ┌────────────────┐ │
│ Idle │──────┼─▶│WaitingForCAP │───▶│SessionEstablished│ │
│ │◀─────┼──│ │◀───│ │ │
└───────┘ │ └──────────────┘ └───────┬────────┘ │
▲ │ │ │
│ │ ▼ │
│ │ ┌─────────────┐ │
│ │ │ Negotiating │ │
│ │ └──────┬──────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ │ │ Transmitting │ │
│ │ └───────┬──────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────┐ ┌─────────────┐ │
└──────────┼──│ Resuming │◀─────│ Suspended │ │
│ └──────────┘ └─────────────┘ │
└──────────────────────────────────────────┘
상태 전환 설명:
| 현재 상태 | 트리거 이벤트 | 목표 상태 |
|---|---|---|
| Idle | 연결 요청 수신 | WaitingForCAP |
| WaitingForCAP | CAP 검증 + 키 교환 완료 | SessionEstablished |
| WaitingForCAP | CAP 실패 / 타임아웃 | Idle |
| SessionEstablished | Request_Frame 발행 또는 수신 | Negotiating |
| SessionEstablished | 세션 타임아웃 종료 | Idle |
| Negotiating | Agreement 달성 | Transmitting |
| Negotiating | 협상 실패 / 거부 | SessionEstablished |
| Transmitting | Fragment 지속 전송 | Transmitting |
| Transmitting | 약정 동적 조정 | Negotiating |
| Transmitting | 연결 끊김 | Suspended |
| Transmitting | Agreement 종료(다른 활성 약정 없음) | SessionEstablished |
| Suspended | 연결 복구 + CAP 재검증 | Resuming |
| Suspended | 세션 타임아웃 | Idle |
| Resuming | 재전송 핸드셰이크 완료 | Transmitting |
| Resuming | 복구 실패 | Idle |
3.4 주종 상호작용 시퀀스
완전한 DTP 상호작용은 다섯 단계로 나뉜다:
단계 1: CAP 전처리
- CAP이 신원 인증과 키 교환을 완료
단계 2: DTP 세션 수립
- 주단이 종단에 세션 수립을 발행하여 Session_ID 생성
단계 3a: 데이터 수집 협상(Master 발행)
- Master가 Request_Frame(데이터 수집 요청) 전송
- Slave가 Response_Frame(수락/거부/대안) 회신
- Agreement 달성, Agreement_ID 생성
단계 3b: 데이터 주입 협상(Slave 신청)
- Slave가 Request_Frame(데이터 주입 신청) 전송
- Master가 Response_Frame(수락/거부/대안) 회신
- Agreement 달성, Agreement_ID 생성
단계 4: 데이터 전송
- Slave → Master: Fragment(데이터 수집, Agreement_ID 포함)
- Master → Slave: Fragment(데이터 주입, Agreement_ID 포함)
단계 5: 연결 중단 및 복구
- 연결 끊김 → 연결 재수립(CAP 재검증) → 수신된 최고 시퀀스 번호 보고 → 중단점부터 전송 계속
