의미론적 아키텍처
이 페이지는 IronFlock의 데이터 모델, 즉 핵심 자산과 그들 간의 관계를 설명합니다. 아키텍처 개요가 시스템의 물리적 레이어(엣지, 클라우드, 메시지 브로커)를 다루는 반면, 이 페이지는 프로젝트, 디바이스, 앱, 데이터 간의 관계인 논리적 구조에 초점을 맞춥니다.
엔티티 개요
계정
├─ 앱
│ └─ 릴리스
└─ 프로젝트
├─ 디바이스 ──────────┐
│ └─ 앱 엣지 컴포넌트
├─ 그룹 ───────────┘
├─ 릴리스 설치
├─ 플릿 데이터베이스
│ └─ 데이터 테이블
├─ 대시보드
└─ 알람핵심 자산
계정
계정은 최상위 ID입니다 — IronFlock에 로그인한 개인 또는 조직. 계정은 프로젝트와 앱을 소유합니다. 앱과 프로젝트는 모두 계정의 직접 자식이지만 서로 독립적으로 존재합니다.
앱
앱은 배포 가능한 소프트웨어 패키지입니다. 앱은 프로젝트가 아닌 계정에 속합니다 — 단일 앱을 많은 다른 프로젝트에 걸쳐 설치할 수 있습니다. 앱 자체는 어디에서도 실행되지 않습니다; 릴리스를 디바이스에 설치할 수 있는 카탈로그 항목 역할을 합니다.
릴리스
릴리스는 앱의 불변하고 버전이 있는 빌드입니다. READY 상태의 릴리스만 디바이스에 설치할 수 있습니다. 릴리스는 불변입니다 — 앱의 동작을 변경하려면 새 릴리스를 게시합니다.
프로젝트
프로젝트는 기본 격리 경계입니다. 프로젝트 내의 모든 것 — 디바이스, 그룹, 설치, 데이터, 대시보드, 알람 — 은 다른 프로젝트에서 보이지 않습니다. 각 프로젝트는 메시지 브로커에 자체 WAMP 렐름, 전용 플릿 데이터베이스, 자체 디바이스, 그룹, 설치, 대시보드, 알람 세트를 가집니다.
디바이스
디바이스는 IronFlock 에이전트를 실행하는 물리적 또는 가상 Linux 머신입니다. 각 디바이스는 정확히 하나의 프로젝트에 속합니다. 디바이스는 설치된 릴리스의 엣지 컴포넌트 — 하드웨어에서 로컬로 실행되는 컨테이너 — 를 호스팅합니다. 디바이스는 여러 릴리스의 엣지 컴포넌트를 동시에 호스팅할 수 있으며 여러 그룹의 구성원이 될 수 있습니다.
그룹
그룹은 대량 작업에 사용되는 프로젝트 내 디바이스의 논리적 모음입니다. 디바이스는 여러 그룹에 속할 수 있습니다(다대다). 릴리스가 그룹에 설치되면 각 구성원 디바이스는 그룹의 구성을 상속하거나 로컬에서 재정의할 수 있는 설치를 받습니다.
릴리스 설치
릴리스 설치는 특정 디바이스에서 특정 릴리스의 실행 인스턴스입니다. 프로젝트 내에서 디바이스와 릴리스 간의 결합입니다. 그룹을 통해 설치된 경우 각 디바이스의 설치는 플릿 전반의 기본값과 디바이스별 예외를 제공하는 그룹의 구성을 상속하거나 재정의할 수 있습니다.
그룹 설치
├─ 디바이스 A → 그룹에서 상속
├─ 디바이스 B → 그룹에서 상속
└─ 디바이스 C → 커스텀 구성으로 재정의플릿 데이터베이스
각 프로젝트에는 전용 플릿 데이터베이스 — 시계열 데이터를 위한 TimescaleDB 확장이 있는 PostgreSQL 데이터베이스 — 가 있습니다. 디바이스의 엣지 컴포넌트는 WAMP를 통해 텔레메트리를 게시하고, FleetDB 서비스는 이를 프로젝트의 데이터베이스에 기록하며, 데이터는 대시보드, AI 쿼리 서비스, 외부 도구에서 쿼리할 수 있습니다.
대시보드
대시보드는 프로젝트의 플릿 데이터베이스에서 데이터를 시각화합니다. 대시보드는 프로젝트에 속하며 여러 앱과 디바이스의 데이터를 단일 뷰로 결합할 수 있습니다.
알람
알람은 프로젝트 내의 임계값 기반 경고 규칙입니다. 알람은 플릿 데이터베이스의 데이터를 모니터링하고 조건이 충족되면 알림을 트리거합니다.
엔티티 관계 다이어그램
┌──────────┐
│ 계정 │
└──┬───┬───┘
│ │
│ │ 1:N 소유
│ ▼
│ ┌─────────────────────┐
│ │ 앱 │
│ └────────┬────────────┘
│ │ 1:N 포함
│ ▼
│ ┌─────────────────────┐
│ │ 릴리스 │
│ └─────────────────────┘
│ ▲
│ │ 참조
│ 1:N 소유 │
▼ │
┌──────────────────────────────────────────────────────────────────┐
│ 프로젝트 │
│ │
│ ┌──────────┐ N:N ┌──────────┐ │
│ │ 디바이스 │◆──────────◆│ 그룹 │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ 호스팅 │ 구성원 디바이스에 설치 │
│ │ 엣지 컴포넌트 │ │
│ │ 1:N │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────►│ 릴리스 │ (그룹에서 상속 또는 │
│ │ 설치 │ 재정의) │
│ └──────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 플릿 데이터베이스 │ │
│ │ (TimescaleDB) │ │
│ │ ┌─────┐ ┌─────┐ │ │
│ │ │테이블│ │테이블│ ... │ │
│ │ └─────┘ └─────┘ │ │
│ └───────────────────────┘ │
│ ▲ │
│ │ 쿼리 대상 │
│ ┌───────────┴───────────┐ │
│ │ 대시보드 │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 알람 │ │
│ │ (FleetDB 모니터링) │ │
│ └───────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘관계 요약
| 관계 | 유형 | 설명 |
|---|---|---|
| 계정 → 프로젝트 | 1:N | 하나의 계정이 여러 프로젝트를 소유 |
| 계정 → 앱 | 1:N | 하나의 계정이 여러 앱을 소유(프로젝트와 독립적) |
| 앱 → 릴리스 | 1:N | 하나의 앱이 여러 버전의 릴리스를 포함 |
| 프로젝트 → 디바이스 | 1:N | 각 디바이스는 정확히 하나의 프로젝트에 속함 |
| 프로젝트 → 그룹 | 1:N | 그룹은 하나의 프로젝트에 범위가 지정됨 |
| 디바이스 ↔ 그룹 | N:N | 디바이스는 여러 그룹에 속할 수 있고, 그룹은 여러 디바이스를 포함 |
| 프로젝트 → 플릿 데이터베이스 | 1:1 | 각 프로젝트는 전용 데이터베이스를 가짐 |
| 프로젝트 → 대시보드 | 1:N | 대시보드는 프로젝트에 속하며 플릿 데이터베이스를 쿼리 |
| 프로젝트 → 알람 | 1:N | 알람은 프로젝트에 범위가 지정되며 플릿 데이터베이스를 모니터링 |
| 디바이스 → 릴리스 설치 | 1:N | 디바이스는 여러 릴리스 설치의 엣지 컴포넌트를 호스팅 |
| 릴리스 설치 → 릴리스 | N:1 | 각 설치는 특정 릴리스 버전을 참조 |