오브젝트 (BLOB 스토어)
목차
개요
오브젝트 메뉴는 플랫폼에 저장된 비정형 파일(이미지·문서·바이너리)을 관리합니다. 설비 사진, 검사 결과 이미지, 도면(PDF·DXF), 진동/음향 센서 파형 데이터, 자동 생성 보고서 등이 시간순으로 적재되며, 각 파일에는 BLOB ID·사이트·설명 같은 메타데이터가 함께 저장됩니다.
BLOB: Binary Large Object 의 약자. 숫자로 표현되는 센서 데이터 외에, 사진/문서 같은 큰 단위 파일을 의미합니다.
경로: 왼쪽 메뉴 > Data > 오브젝트 (BLOB) (내부 URL /blob/store)
화면 구성
┌──────────────────────────────────────────────────────────────────────┐
│ 🖼 BLOB 스토어 [↻] │ ← ① 상단
├──────────┬───────────────────────────────────────────────────────────┤
│ BLOB │ 🕐 타임라인 [10M][30M][1H][6H][12H][전체] │
│ 목록 │ ─────────────────────────────────────────────────────────│
│ 패널 │ 조회 기간 [날짜범위] [검색] │ ← ② 우측
│ │ ─────────────────────────────────────────────────────────│
│ [추가] │ 타임라인 (시간 흐름) │
│ [검색🔍] │ ─────────────────────────────────────────────────────────│
│ [↻] │ ┌─ BLOB 상세 테이블 ─────────────────────────────┐ │
│ ─────── │ │ BLOB ID | 시간 | 오브젝트ID | 크기 | MIME | 속성 |⬇│ │
│ 사이트 ▼ │ └────────────────────────────────────────────────┘ │
│ 검색바🔍 │ │
│ ─────── │ │
│ 목록 │ │
│ (스크롤) │ │
│ │ │
│ 버켓: - │ │
└──────────┴───────────────────────────────────────────────────────────┘
| 영역 | 위치 | 표시 |
|---|---|---|
| ① 상단 | 전체 폭 | 페이지 제목 + 새로고침 버튼 |
| ② 좌측 | col-lg-2 | BLOB 목록 패널 (스크롤 600px) |
| ③ 우측 | col-lg-10 | 타임라인 + 조회 폼 + BLOB 상세 테이블 |
상단 — 페이지 제목·새로고침
| 항목 | 형태 | 동작 |
|---|---|---|
| 제목 | 🖼 "BLOB 스토어" | — |
새로고침 (realtime_icon) | 빨강 버튼 + ↻ | 좌측 BLOB 목록과 우측 상세 모두 다시 불러오기 |
좌측 — BLOB 목록 패널
좌측 col-lg-2 폭의 좁은 패널에 등록된 BLOB 가 사이트 단위로 묶여 표시됩니다.
상단 도구 (3개 버튼)
| 버튼 | 아이콘 | 동작 |
|---|---|---|
| BLOB 추가 | ➕ | BLOB 추가 모달을 엽니다 (아래 모달 항목 참고) |
| BLOB 검색 토글 | 🔍 | 패널 내부의 검색 입력란을 펼치기/접기 |
| 목록 새로고침 | ↻ | 현재 사이트 필터로 BLOB 목록을 다시 불러오기 |
사이트 필터 셀렉터
🏭 [ 사이트명 [설명] ▼ ]
| 항목 | 설명 |
|---|---|
| 앞 아이콘 | 🏭 (산업) — 입력 그룹 좌측 |
| 셀렉터 ID | blob_site_filter |
| 옵션 형식 | 사이트명 [설명] (서버 렌더링) |
| 기본 선택 | 페이지 진입 시 selected_site_id 가 있으면 그 사이트, 없으면 첫 사이트 |
| 변경 시 동작 | 선택 즉시 BLOB 목록을 그 사이트 기준으로 다시 불러오기(onchange="blobList()") |
사이트가 등록되어 있지 않으면 셀렉터가 비어 있고 BLOB 목록도 비어 있습니다. 팩토리 관리 에서 먼저 사이트를 등록하세요.
BLOB 검색
상단 도구의 🔍 버튼으로 검색 입력란이 열립니다.
| 항목 | 설명 |
|---|---|
| 입력란 ID | blob_text |
| placeholder | "BLOB 검색..." |
| 검색 기준 | BLOB 의 설명(description) 키워드 |
| 확정 | 엔터(폼 submit) 또는 우측 🔍 버튼 |
목록 영역과 푸터
| 항목 | 설명 |
|---|---|
로딩 표시 (blob_loading) | "로딩중 ..." (회전 아이콘) |
목록 영역 (blob_content_list) | 가로 스크롤 없음, 세로 스크롤(600px 고정 높이) |
| 목록 항목 단위 | 각 BLOB 가 작은 카드/썸네일 형태로 나열 |
| 푸터 | "버켓 : N" — 현재 사이트의 적재 버킷 수 |
BLOB 추가 모달
상단 BLOB 추가 버튼으로 열리는 모달입니다.
| 입력 항목 | 폭 | 설명 |
|---|---|---|
사이트 (modal_site_id) | 200px | 등록된 사이트 중 선택 |
BLOB ID (blob_id) | 자동 | placeholder: BLOB_00001 (영문 및 숫자, _ 만 입력) — 도메인 고유 ID |
BLOB 명 (blob_name) | 200px | placeholder: BLOB_NAME_00001 (영문 및 숫자, _ 만 입력) |
설명 (blob_desc) | 300px | 사람이 읽을 설명 텍스트 |
모달 동작 버튼
| 버튼 | 동작 |
|---|---|
| 취소 (×) | 모달 닫기 (저장하지 않음) |
저장 (saveBLOB()) | 입력 검증 후 BLOB 메타 등록 + 파일 업로드(파일 선택은 모달 이후의 후속 단계에서) |
BLOB ID 와 BLOB 명은 영문·숫자·언더스코어(
_)만 허용됩니다. 한글이나 공백은 사용하실 수 없습니다.
우측 — 타임라인 + 상세 테이블
좌측에서 BLOB 또는 사이트를 선택하면 우측에 그 범위의 데이터가 시각화됩니다.
타임라인 패널
┌────────────────────────────────────────────────────────────────────┐
│ 🕐 타임라인 [10M] [30M] [1H] [6H] [12H] [전체] │
├────────────────────────────────────────────────────────────────────┤
│ 조회 기간 [ 날짜 범위 ] [검색] │
├────────────────────────────────────────────────────────────────────┤
│ │
│ 타임라인 마커들 (각 BLOB 적재 시각이 점으로 표시) │
│ │
└────────────────────────────────────────────────────────────────────┘
| 항목 | ID | 설명 |
|---|---|---|
| 헤더 | — | 🕐 "타임라인" + 우측 작은 결과 요약 텍스트(result_txt) |
| 타임라인 영역 | control_timeline | 가로축 시간, BLOB 마커가 시각순으로 배치 |
빠른 시간 범위 (6 버튼)
| 버튼 | data-range | 동작 |
|---|---|---|
| 10분전 | 10M | 직전 10분 |
| 30분전 | 30M | 직전 30분 |
| 1시간전 | 1H | 직전 1시간 |
| 6시간전 | 6H | 직전 6시간 |
| 12시간전 | 12H | 직전 12시간 |
| 전체기간 | ALL | 검색 전체 (기본 활성) |
조회 기간 폼
타임라인 패널 본문 상단에 인라인 폼이 있습니다.
| 컨트롤 | 폭 | 설명 |
|---|---|---|
| 조회 기간 라벨 | 100px | "조회 기간" 라벨 |
기간 입력 (search_time) | 280px | 텍스트 입력 (가운데 정렬, 굵은 글씨) — 클릭 시 날짜 범위 선택기 표시. 폼 제출 시 hidden 필드 search_date_from/search_date_to 로 전달 |
| 검색 | 120px | 파랑 버튼 + 🔍 — 위 기간 조건으로 우측 타임라인+테이블을 다시 불러오기 |
상세 테이블 (7컬럼)
타임라인 아래에 검색 기간 내 BLOB 가 시간순으로 테이블에 나열됩니다.
| 컬럼 | 폭 | 정렬 | 표시 값 |
|---|---|---|---|
| BLOB ID | 150px | 가운데 | 도메인 고유 ID (예: BLOB_00012) |
| 시간 | 180px | 가운데 | 적재 시각 (yyyy-MM-dd HH:mm:ss) |
| 오브젝트 ID | 300px | 가운데 | 오브젝트 스토리지 내부 경로(객체 키) |
| 파일 크기 | 100px | 가운데 | 자동 단위 변환 (B / KB / MB) |
| MIME 타입 | 100px | 가운데 | 예: image/jpeg, application/pdf, text/csv |
| 속성 | 자동 | 좌측 | 추가 메타데이터 키:값 모음 |
| 다운로드 | 60px | 좌측 | ⬇ 아이콘 — 클릭 시 파일을 로컬로 내려받기 |
컬럼별 운영 팁
- MIME 타입 으로 어떤 종류의 파일인지 즉시 식별. 예상과 다른 타입이면 잘못 업로드된 것일 수 있음
- 파일 크기 가 비정상적으로 큰 파일은 운영 부하의 원인이 될 수 있음
- 속성 은 자동화 시 플로우 가 추가한 키-값(예: 검사 결과 이미지의 OCR 텍스트, 보고서의 시작/종료 시각) 이 들어가는 자리
활용 예시
| 용도 | 설명 |
|---|---|
| 설비 사진 보관 | 설비 외관·설치 사진·점검 사진을 시간순으로 적재 |
| 검사 결과 이미지 | 품질 검사 카메라가 자동으로 BLOB 적재 |
| 도면 관리 | 설비 도면(DXF·PDF), 배관도, 배선도 |
| 센서 파형 데이터 | 진동·음향 센서의 raw 파형 데이터(WAV·CSV) |
| 자동 생성 보고서 | 일일 운영 보고서, 시프트 보고서를 자동 발행 후 보관 |
| 외부 시스템 산출물 | 외부 분석 도구가 생성한 결과 파일 백업 |
자동화 적재가 필요하면 플로우 의 외부 연동 노드(예:
flow_http_request로 외부 시스템에서 받기 → 변환 → BLOB 적재 액션)를 결선하세요.
자주 묻는 질문
Q. BLOB ID 와 BLOB 명의 차이는?
A. BLOB ID 는 도메인 고유 식별자(시스템이 ID 로 참조), BLOB 명 은 사람이 식별하기 쉽게 부여하는 별명입니다. 둘 다 영문·숫자·_ 만 허용합니다.
Q. 적재한 BLOB 은 언제 삭제되나요? A. 별도 보존 정책에 따릅니다. 영구 보존이 기본이며, 자동 삭제 정책이 필요하면 시스템 관리자에게 문의하세요.
Q. 사이트 필터를 바꾸면 다른 사이트의 BLOB 가 사라지나요? A. 사라지지 않습니다. 화면에서 보이지 않을 뿐, 데이터는 유지됩니다. 다른 사이트로 다시 변경하면 그 사이트의 BLOB 가 표시됩니다.
Q. 같은 BLOB ID 로 새 파일을 추가할 수 있나요? A. 동일 BLOB ID 로 적재하면 새 버전이 추가됩니다(시각이 다른 별도 항목). BLOB ID 는 도메인 식별자이며, 파일 자체는 시간 단위로 누적됩니다.
Q. 다운로드 시 한글 파일명이 깨져 보입니다. A. 일부 브라우저의 인코딩 처리 차이입니다. 다운로드한 파일명을 직접 변경해 사용하시거나 다른 브라우저에서 시도해 보세요.
Q. BLOB 가 시간순으로 정렬이 어색합니다.
A. 상세 테이블은 검색 기간의 시간 정렬을 따릅니다. 빠른 시간 범위 버튼(10M/30M 등)으로 윈도우를 좁혀 보세요.
Q. BLOB 추가 모달에서 파일을 어떻게 선택하나요? A. 메타 정보 저장 후 파일 업로드 단계가 이어집니다. 큰 파일은 업로드에 시간이 걸릴 수 있으니 진행 표시를 끝까지 기다려 주세요.
Q. BLOB 추가 자동화는 가능한가요? A. 플로우 를 사용하면 외부 시스템에서 자동으로 BLOB 를 적재하도록 자동화할 수 있습니다. 예시: 검사 카메라가 이미지를 HTTP 로 푸시 → 플로우가 메타 정보 부여 → BLOB 저장.