제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(협상 관리자)

약정의 전체 생명주기를 관리한다:

  1. 생성: 협상 요청 발행
  2. 협상: 요청과 응답 처리
  3. 활성화: 양측이 합의에 도달한 후 Agreement_ID 생성
  4. 동적 조정: 전송 과정 중 약정 매개변수 수정
  5. 종료: 중지 명령을 통해 약정 종료

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
WaitingForCAPCAP 검증 + 키 교환 완료SessionEstablished
WaitingForCAPCAP 실패 / 타임아웃Idle
SessionEstablishedRequest_Frame 발행 또는 수신Negotiating
SessionEstablished세션 타임아웃 종료Idle
NegotiatingAgreement 달성Transmitting
Negotiating협상 실패 / 거부SessionEstablished
TransmittingFragment 지속 전송Transmitting
Transmitting약정 동적 조정Negotiating
Transmitting연결 끊김Suspended
TransmittingAgreement 종료(다른 활성 약정 없음)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 재검증) → 수신된 최고 시퀀스 번호 보고 → 중단점부터 전송 계속