Skip to Content
아키텍처의미론적 아키텍처

의미론적 아키텍처

이 페이지는 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각 설치는 특정 릴리스 버전을 참조
Last updated on