Web SQL tool + JDBC proxy + Trino + Data virtualization + Object storage logging
통합 Data Federation 솔루션
+------------------------------------------------------------------+
| Control Plane |
| |
| +--------------+ +-------------------+ +----------------+ |
| | Admin UI |--->| Control Plane API |--->| Policy DB | |
| | React + TS | | Spring Boot | | PostgreSQL | |
| +--------------+ +-------------------+ +----------------+ |
| | |
| 정책 동기화 |
+------------------------------+-----------------------------------+
|
+------------------------------v-----------------------------------+
| Data Plane |
| |
| +-------------------+ +-------------------+ |
| | PG Proxy Pod | | Oracle Proxy Pod | ... |
| | ShardingSphere | | ShardingSphere | (DB별 Pod) |
| | PG wire protocol | | MySQL wire | |
| +--------+----------+ +--------+----------+ |
| | | |
+------------------------------+-----------------------------------+
| |
v v
+------------------------------------------------------------------+
| Target DBs |
| |
| PostgreSQL MySQL MariaDB Oracle SQL Server Db2 Tibero |
+------------------------------------------------------------------+
|
| SQL 이벤트 (Logback KafkaAppender)
v
+------------------------------------------------------------------+
| Audit Plane |
| |
| +----------+ +-----------+ +-----------------------------+ |
| | Kafka |--->| Log Writer|--->| Object Storage (S3/MinIO) | |
| | KRaft | | Parquet | | Parquet + Object Lock(WORM) | |
| +----------+ | + ZSTD | +-----------------------------+ |
| +-----+-----+ | |
| | v |
| | +-------------+ |
| +-------------->| Policy DB | |
| | manifest | file_manifest| |
| | SHA-256 | SHA-256 | |
| | +-------------+ |
| | |
| +-----v---------+ +-----------+ |
| | Hive Metastore|--->| Trino | |
| +---------------+ | 즉시 검색 | |
| +-----+-----+ |
| | |
| +-----v-----+ |
| | ClickHouse | |
| | 장기 분석 | |
| +-----------+ |
+------------------------------------------------------------------+
+------------------------------------------------------------------+
| User Plane |
| |
| +--------------------+ +--------------------+ |
| | CloudBeaver Custom | | any SQL client | |
| | (일반 사용자) | | psql, DBeaver, etc | |
| +--------------------+ +--------------------+ |
+------------------------------------------------------------------+
+------------------------------------------------------------------+
| Infrastructure |
| |
| Kubernetes + Helm + Argo CD (GitOps) |
| Keycloak (OIDC SSO) |
| OpenTelemetry + Prometheus + Grafana (관측성) |
+------------------------------------------------------------------+
graph TB
subgraph Control Plane
AdminUI["Admin UI<br/>React + TypeScript"]
CPAPI["Control Plane API<br/>Spring Boot 3.5.x"]
PolicyDB["Policy DB<br/>PostgreSQL"]
AdminUI --> CPAPI --> PolicyDB
end
subgraph Data Plane
PGPod["PG Proxy Pod<br/>ShardingSphere-Proxy<br/>PostgreSQL wire"]
OraPod["Oracle Proxy Pod<br/>ShardingSphere-Proxy<br/>MySQL wire"]
MSSQLPod["MSSQL Proxy Pod<br/>ShardingSphere-Proxy"]
ExtraPod["추가 Pod<br/>Db2 / Tibero"]
end
subgraph Target DBs
PG["PostgreSQL"]
MySQL["MySQL / MariaDB"]
Oracle["Oracle"]
MSSQL["SQL Server"]
Db2["Db2 / Tibero"]
end
subgraph Audit Plane
Kafka["Kafka<br/>KRaft"]
LogWriter["Log Writer<br/>Parquet + ZSTD"]
ObjStore["Object Storage<br/>S3 / MinIO<br/>Object Lock"]
Manifest["file_manifest<br/>PostgreSQL<br/>SHA-256"]
HMS["Hive Metastore"]
Trino["Trino<br/>즉시 검색"]
CH["ClickHouse<br/>장기 분석"]
end
subgraph User Plane
CB["CloudBeaver Custom<br/>일반 사용자"]
SQLClient["SQL Client<br/>psql / DBeaver"]
end
subgraph Infrastructure
KC["Keycloak<br/>OIDC SSO"]
OTel["OpenTelemetry<br/>Prometheus + Grafana"]
GitOps["Helm + Argo CD<br/>GitOps"]
end
CPAPI -->|정책 동기화| PGPod
CPAPI -->|정책 동기화| OraPod
CPAPI -->|정책 동기화| MSSQLPod
CPAPI -->|정책 동기화| ExtraPod
CB --> PGPod
SQLClient --> PGPod
CB --> OraPod
SQLClient --> OraPod
PGPod --> PG
PGPod --> MySQL
OraPod --> Oracle
MSSQLPod --> MSSQL
ExtraPod --> Db2
PGPod -->|SQL 이벤트| Kafka
OraPod -->|SQL 이벤트| Kafka
MSSQLPod -->|SQL 이벤트| Kafka
ExtraPod -->|SQL 이벤트| Kafka
Kafka --> LogWriter
LogWriter --> ObjStore
LogWriter --> Manifest
ObjStore --> HMS --> Trino
ObjStore -->|배치 적재| CH
sequenceDiagram
participant User as SQL Client
participant ME as Main Engine
participant PDB as Policy DB
participant TDB as Target DB
participant K as Kafka
participant LW as Log Writer
participant S3 as Object Storage
participant PG as PostgreSQL manifest
participant HMS as Hive Metastore
participant T as Trino
User->>ME: SQL 실행
ME->>PDB: 정책 조회
PDB-->>ME: ALLOW / DENY / MASK / ALERT
alt ALLOW / MASK / ALERT
ME->>TDB: SQL 전달
TDB-->>ME: 결과
ME-->>User: 결과 반환
else DENY
ME-->>User: 접근 거부
end
ME-->>K: SQL 이벤트 (비동기)
K->>LW: 이벤트 소비 (배치)
LW->>S3: Parquet 업로드 + Object Lock
LW->>PG: file_manifest (SHA-256)
LW->>HMS: 파티션 등록
T->>HMS: 메타데이터 조회
T->>S3: Parquet 스캔
graph LR
ME["Main Engine<br/>Logback<br/>KafkaAppender"] --> K["Kafka<br/>cloudsql.sql-log"]
K --> LW["Log Writer<br/>Kafka Consumer"]
LW --> P["Parquet 변환<br/>ZSTD 압축"]
P --> S3["Object Storage<br/>Object Lock<br/>WORM"]
P --> MF["file_manifest<br/>SHA-256<br/>PostgreSQL"]
S3 --> HMS["Hive Metastore<br/>파티션 관리"]
HMS --> TR["Trino<br/>즉시 검색"]
S3 -->|배치 ETL| CH["ClickHouse<br/>장기 분석<br/>대시보드"]
graph LR
subgraph Control Plane
A1["Admin UI"] --> A2["Control API"] --> A3["Policy DB"]
end
subgraph Data Plane
B1["PG Proxy"]
B2["Oracle Proxy"]
B3["기타 Proxy"]
end
subgraph Audit Plane
C1["Kafka"] --> C2["Log Writer"] --> C3["Object Storage"]
C3 --> C4["Trino"]
C3 --> C5["ClickHouse"]
end
subgraph User Plane
D1["CloudBeaver"]
D2["SQL Client"]
end
A3 -->|정책 동기화| B1
A3 -->|정책 동기화| B2
D1 --> B1
D2 --> B1
B1 -->|SQL 이벤트| C1
B2 -->|SQL 이벤트| C1
B3 -->|SQL 이벤트| C1
CloudSQL은 네 가지 관심사를 물리적으로 분리한다.
| Plane |
역할 |
핵심 특성 |
| Control Plane |
정책 관리, 사용자/권한 관리, 운영 대시보드 |
관리자 전용, 저트래픽, 상태 저장 |
| Data Plane |
SQL 경유, 정책 적용, Target DB 연결 |
모든 사용자 경유, 고트래픽, stateless |
| Audit Plane |
감사 로그 수집, 원본 보관, 즉시 조회, 장기 분석 |
비동기, append-only, 컴플라이언스 |
| User Plane |
일반 사용자 SQL 작업 환경, DBA/개발자 접속 |
웹 기반, Main Engine 경유 |
분리의 목적:
- Data Plane 장애가 Audit Plane에 전파되지 않는다
- Audit Plane의 부하가 SQL 응답 지연에 영향을 주지 않는다
- Control Plane 정책 변경이 실시간 트래픽을 중단시키지 않는다
- 각 Plane을 독립적으로 확장/축소할 수 있다
[사용자 SQL 실행]
|
v
[Main Engine: ShardingSphere-Proxy]
|
+--- 정책 확인 ---> [Policy DB: PostgreSQL]
| 정책 결과: ALLOW / DENY / MASK / ALERT
|
+--- ALLOW/MASK/ALERT ---> [Target DB] ---> [결과 반환]
| DENY ---> [거부 응답]
|
+--- SQL 이벤트 발행 (Logback KafkaAppender, 비동기)
|
v
[Kafka: cloudsql.sql-log]
|
v
[Log Writer]
|
+--- Parquet(ZSTD) ---> [Object Storage]
| Object Lock(WORM) 적용
|
+--- file_manifest ---> [PostgreSQL]
| SHA-256 해시, 파일 계보
|
+--- 파티션 등록 ---> [Hive Metastore]
|
[Trino] <--- 관리자 즉시 조회
|
[ClickHouse] <--- 배치 적재, 장기 분석/대시보드
| 컴포넌트 |
기술 스택 |
역할 |
| Admin UI |
React + TypeScript + Vite + MUI |
정책 관리, 운영 관리, 로그 조회, 대시보드 |
| Control Plane API |
Java 21 + Spring Boot 3.5.x + Spring Security |
정책 CRUD, 엔진 설정 동기화, Trino 쿼리 위임, 사용자/권한 API |
| Policy DB |
PostgreSQL (managed 우선) |
정책 원본, 엔진 배포 상태, 사용자/권한 모델, file_manifest |
| 컴포넌트 |
기술 스택 |
역할 |
| Main Engine |
ShardingSphere-Proxy 5.5.2 |
SQL 경유, 정책 적용, 로그 생성, Target DB 연결 |
Main Engine은 DB 프로토콜별로 Pod를 분리하여 배포한다.
| Pod |
Frontend Protocol |
Backend DB |
| PG Proxy Pod |
PostgreSQL wire |
PostgreSQL, MySQL, MariaDB |
| Oracle Proxy Pod |
MySQL wire |
Oracle |
| MSSQL Proxy Pod |
MySQL wire 또는 별도 adapter |
SQL Server |
| 추가 Pod |
필요 시 |
Db2, Tibero 등 |
Pod 분리 이유:
- 이기종 DB를 단일 Pod에 동시 구성하면 메타데이터 간섭이 발생한다
- 프로토콜별 독립 Pod가 안정성, 격리, 독립 확장에 유리하다
| 컴포넌트 |
기술 스택 |
역할 |
| Log Buffer |
Apache Kafka (KRaft) |
SQL 감사 이벤트 내구성 버퍼, backpressure 흡수 |
| Log Writer |
Kafka consumer + Parquet + S3 SDK |
Kafka 소비, SQL 파싱/정규화, Parquet 변환, Object Storage 적재 |
| Object Storage |
S3-compatible (prod: AWS S3/GCS/Azure Blob, dev: MinIO) |
Parquet 원본 저장, Object Lock(WORM) |
| Hive Metastore |
HMS 4.0.1 |
Parquet 테이블 메타데이터, 파티션 관리 |
| Log Search |
Trino |
관리자용 단기 로그 검색 (Hive connector + Parquet) |
| Analytics Store |
ClickHouse |
장기 분석, 집계, 대시보드, 상관분석 |
| 컴포넌트 |
기술 스택 |
역할 |
| SQL UI |
CloudBeaver Custom |
일반 사용자 웹 기반 SQL IDE, Main Engine 경유 접속 |
| 컴포넌트 |
기술 스택 |
역할 |
| Auth |
Keycloak (OIDC) |
SSO, 사용자/그룹/역할 관리, IdP 연계 |
| Observability |
OpenTelemetry + Prometheus + Grafana |
플랫폼 메트릭, 트레이스, 알람, 운영 대시보드 |
| Deploy |
Kubernetes + Helm + Argo CD |
GitOps 기반 선언적 배포, 환경별 일관성 |
| 구분 |
DB |
지원 방식 |
| 직접 |
PostgreSQL, MySQL, MariaDB |
ShardingSphere native wire protocol proxy |
| 우회 |
Oracle |
ShardingSphere backend bypass (별도 Pod) |
| 우회 |
SQL Server |
ShardingSphere backend bypass (별도 Pod) |
| 확장 |
IBM Db2, Tibero |
자체 JDBC adapter 또는 별도 proxy Pod |
| SQL 엔진 |
Trino |
감사 로그 검색 + 다중 데이터소스 연합 질의 |
지원 원칙:
국내 실수요가 있는 주요 RDBMS에 집중한다
- 모든 DB를 동일 방식으로 처리하는 것이 목표가 아니다
- DB별 최적 경로(native / bypass / adapter)를 분리하여 현실적으로 대응한다
| 테이블 |
용도 |
파티션 |
sql_statement_log_v1_{year} |
논리 SQL: 클라이언트 원본 SQL + 정책 결과 + 실행 결과 |
dt, hh |
sql_statement_route_log_v1_{year} |
실제 라우팅 SQL: 백엔드별 fan-out, datasource별 실행 결과 |
dt, hh |
sql_log_file_manifest_v1_{year} |
Parquet 파일 메타데이터: 파일 위치, SHA-256, 레코드 수, Kafka offset |
dt |
3-테이블 분리 이유:
- 1개의 Logic SQL이 N개의 Actual SQL로 fan-out될 수 있다
- Logic SQL과 Actual SQL을 한 테이블에 합치면 증적 보존성과 중복 관리가 나빠진다
- file_manifest는 원본 파일 → Hive table row 연결로 누락/중복/재처리 검증을 지원한다
s3://<bucket>/cloudsql/sql-log/
statement/v1/year=2026/dt=2026-07-13/hh=14/part-00001.parquet
route/v1/year=2026/dt=2026-07-13/hh=14/part-00001.parquet
file-manifest/v1/year=2026/dt=2026-07-13/part-00001.parquet
| 요소 |
방법 |
| 무결성 |
SHA-256 해시 (Parquet 파일 단위) |
| 불변성 |
Object Lock (WORM), 수정/삭제 불가 |
| 추적성 |
PostgreSQL file_manifest 테이블 (파일 → 이벤트 기간 → Kafka offset) |
| 압축 |
ZSTD (Parquet 내장 컬럼형 압축) |
| 롤오버 |
연 단위 테이블, 필요 시 월 단위 |
| 계층 |
저장소 |
목적 |
특성 |
| Raw 원본 |
Object Storage (Parquet) |
증적 보관, 컴플라이언스 |
불변, append-only, Object Lock |
| 즉시 검색 |
Trino (← Object Storage) |
관리자 단기 조회 |
저빈도, SQL 기반, 기간 조건 필수 |
| 장기 분석 |
ClickHouse |
집계, 대시보드, 상관분석 |
배치 적재, 고속 집계, TTL 관리 |
이 분리의 목적:
- 원본 계층은 수정 없는 증적 보관소다
- ClickHouse는 분석에 최적이지만 mutation/TTL 특성상 원본 보관소에 부적합하다
- 각 계층이 각자의 목적에 맞게 최적화된다
1. 사용자가 SQL 클라이언트로 Main Engine에 접속
- psql, DBeaver, DataGrip, CloudBeaver 등 모든 표준 SQL 클라이언트
- Main Engine이 Target DB의 wire protocol을 그대로 구현하므로 클라이언트 수정 불필요
2. Main Engine이 Policy DB에서 접근 정책을 조회
- 사용자 ID, 역할(role), 그룹, 접속 IP, 시간대, 대상 DB/테이블/컬럼
- 정책은 Control Plane API가 사전 동기화
3. 정책 결과에 따라 분기
- ALLOW: SQL을 Target DB로 전달, 결과를 사용자에게 반환
- DENY: SQL 실행 차단, 사용자에게 거부 응답 반환
- MASK: SQL을 Target DB로 전달, 결과 데이터의 민감 컬럼을 마스킹하여 반환
- ALERT: SQL을 Target DB로 전달하되, 관리자에게 실시간 알림 발생
4. 모든 SQL 이벤트를 감사 로그로 기록
- 허용/거부/마스킹/알림 모두 기록
- Logic SQL(사용자 원본) + Actual SQL(Target DB 실행문) 쌍으로 보존
1. SQL 이벤트 발행
- Main Engine의 Logback KafkaAppender가 SQL 실행 이벤트를 Kafka로 비동기 전송
- SQL 응답 경로에 영향 없음 (fire-and-forget)
2. Kafka 버퍼링
- cloudsql.sql-log 토픽에 이벤트를 내구성 있게 저장
- burst 흡수, 재처리 가능, consumer 독립
3. Log Writer 소비 및 변환
- Kafka에서 이벤트를 배치 소비
- Logic SQL + Actual SQL 쌍을 파싱하여 정규화
- 일정량 또는 일정 시간 단위로 Parquet 파일 생성 (ZSTD 압축)
4. Object Storage 적재
- Parquet 파일을 S3-compatible Object Storage에 업로드
- Object Lock(WORM) 적용으로 수정/삭제 방지
- SHA-256 해시 계산 및 검증
5. 메타데이터 기록
- PostgreSQL file_manifest 테이블에 파일 위치, 해시, 레코드 수, Kafka offset 기록
- Hive Metastore에 파티션 등록
6. 조회 가용
- Trino를 통해 관리자가 즉시 SQL 조회 가능
- ClickHouse에 배치 적재하여 장기 분석/대시보드 제공
즉시 조회 (Trino):
1. 관리자가 Admin UI에서 로그 검색 (기간, 사용자, DB, 정책 결과 등)
2. Control Plane API가 Trino에 SQL 쿼리 위임
3. Trino가 Hive Metastore에서 파티션 메타데이터 조회
4. Trino가 Object Storage의 Parquet 파일을 직접 스캔
5. 결과를 Admin UI에 반환
장기 분석 (ClickHouse):
1. 배치 ETL이 Object Storage의 Parquet를 ClickHouse에 적재
2. Admin UI에서 분석 대시보드 제공 (시간대별 SQL 패턴, 사용자별 통계, 이상 탐지)
3. 고속 집계 쿼리로 대량 데이터 분석
조회 예:
- 특정 사용자의 최근 1시간 SQL 이력
- 특정 테이블에 대한 전체 접근 기록
- 정책 위반(DENY/ALERT) 이벤트 목록
- Logic SQL → Actual SQL fan-out 추적 (statement_id 기준 join)
- 시간대별/사용자별/DB별 SQL 패턴 분석 (ClickHouse)
1. 관리자가 Admin UI에서 정책 생성/수정
- 사용자/역할/그룹 기반 접근 규칙
- 시간대/IP 대역 제한
- DB/테이블/컬럼 단위 접근 범위
- SQL 유형별 차등 제어 (SELECT 허용, DDL 차단 등)
2. Control Plane API가 Policy DB에 정책 저장
3. Control Plane API가 Main Engine에 정책 동기화
- 엔진별 설정 포맷으로 변환 배포
4. Main Engine이 다음 SQL 요청부터 새 정책 적용
1. 모든 사용자 접속은 Keycloak OIDC SSO로 인증
- Admin UI, CloudBeaver, Control Plane API 공통
2. 인증 토큰에 포함된 role/group 정보로 권한 결정
- 관리자: 정책 관리, 로그 조회, 시스템 설정
- DBA: 제한된 정책 관리, 로그 조회
- 일반 사용자: SQL 실행 (정책 범위 내)
3. 외부 IdP 연계 가능 (LDAP, Active Directory, SAML)
1. 사용자가 CloudBeaver 또는 SQL 클라이언트에서 연합 질의 실행
2. Main Engine이 Trino를 통해 다중 데이터소스를 단일 SQL로 조회
- PostgreSQL + Oracle + Object Storage 데이터를 하나의 쿼리로 결합
3. 결과를 사용자에게 반환
4. 연합 질의도 감사 로그에 기록
| 항목 |
효과 |
| SQL 전수 로깅 |
모든 SQL 실행을 빠짐없이 기록하여 법적 감사 증적 확보 |
| 원본 불변 보관 |
Object Lock(WORM) + SHA-256으로 원본 위변조를 원천 방지 |
| 접근제어 정책 |
사용자/역할/시간/IP/DB/테이블/컬럼/SQL유형 기반 세분화된 통제 |
| 완전한 추적 |
statement_id → route 추적으로 사용자 SQL에서 실제 실행까지 완전한 계보 확보 |
| 장기 보관 |
Object Storage 기반 저비용 장기 보관, 연/월 단위 롤오버 관리 |
| 포렌식 대응 |
세션/트랜잭션/커넥션 단위 사용자 행위 재구성 가능 |
| 항목 |
효과 |
| 단일 접점 |
모든 DB 접근을 Main Engine 경유로 통합, 관리 포인트 일원화 |
| 정책 중앙 관리 |
Policy DB에서 전체 접근 정책을 중앙 관리, Main Engine에 즉시 배포 |
| 즉시 조회 |
Trino를 통해 관리자가 감사 로그를 표준 SQL로 즉시 검색 |
| 장기 분석 |
ClickHouse 기반 대시보드로 SQL 패턴, 이상 탐지, 통계 분석 |
| 자동 파이프라인 |
SQL 실행 → Kafka → Parquet → Object Storage → Trino/ClickHouse 전 과정 자동화 |
| GitOps 배포 |
Helm + Argo CD로 선언적 배포, 환경별 일관성 보장 |
| SSO 통합 |
Keycloak OIDC로 모든 컴포넌트의 인증을 일원화, 사용자 관리 부담 최소화 |
| 항목 |
효과 |
| Plane 분리 |
Control/Data/Audit/User 분리로 장애 격리, 독립 확장, 관심사 분리 |
| 비동기 감사 |
Kafka 버퍼를 통해 감사 로그 수집이 SQL 응답 지연에 영향을 주지 않음 |
| 수평 확장 |
Data Plane(Main Engine)은 stateless, Pod 수평 확장으로 처리량 선형 증가 |
| 저장/분석 분리 |
raw 원본(Object Storage)과 분석(ClickHouse)을 분리하여 목적별 최적화 |
| 클라우드 중립 |
S3 API, K8s 표준, OIDC로 특정 벤더 종속 없이 EKS/GKE/AKS 배포 가능 |
| 표준 포맷 |
Parquet(Apache), SQL(ANSI), OIDC, S3 API 등 업계 표준 기반으로 벤더 락인 방지 |
| 항목 |
효과 |
| DB 방화벽 |
비인가 SQL 실행을 Main Engine에서 사전 차단 (DENY) |
| 데이터 마스킹 |
민감 데이터를 사용자 역할에 따라 동적 마스킹 (MASK) |
| 실시간 알림 |
위험 SQL 실행 시 관리자에게 즉시 알림 (ALERT) |
| SSO + RBAC |
Keycloak OIDC로 통합 인증, role/group 기반 세분화된 권한 제어 |
| 세션 추적 |
session_id/connection_id/transaction_id 기반 사용자 행위 완전 재구성 |
| 원본 증명 |
Object Lock + SHA-256 + file_manifest로 법적/감사 포렌식 대응 |
| 항목 |
효과 |
| 오픈소스 기반 |
핵심 컴포넌트 전체가 오픈소스, 상용 라이선스 비용 없음 |
| Parquet 압축 |
컬럼형 압축(ZSTD)으로 저장 비용 절감 |
| Object Storage |
블록 스토리지 대비 저비용 장기 보관 |
| 관리형 서비스 |
PostgreSQL, Object Storage, Kafka를 managed service로 사용하여 운영 부담 최소화 |
| 단계적 확장 |
Phase 단위 점진적 기능 확장으로 초기 투자 최소화 |
| 관점 |
기존 상용 제품 |
CloudSQL |
| 배포 |
VM 기반, 에이전트/어플라이언스 설치 |
Kubernetes 네이티브, 컨테이너 배포 |
| 확장 |
수직 확장 중심 |
Pod 수평 확장, 클라우드 네이티브 |
| 로그 저장 |
자체 DB 또는 파일시스템 |
Object Storage + Parquet (업계 표준 포맷) |
| 로그 조회 |
전용 UI 한정 |
Trino 표준 SQL (외부 도구 연계 가능) |
| 로그 분석 |
기본 통계 |
ClickHouse 기반 고급 분석/대시보드 |
| SQL IDE |
별도 도구 필요 |
CloudBeaver 통합 (웹 기반 SQL IDE) |
| 연합 질의 |
미지원 또는 제한적 |
Trino 기반 다중 데이터소스 연합 질의 |
| 클라우드 |
온프렘 중심 |
public cloud Kubernetes 우선 설계 |
| 원본 보관 |
자체 스토리지 |
Object Lock(WORM) + SHA-256 불변 보관 |
| 인증 |
자체 인증 |
Keycloak OIDC SSO + 외부 IdP 연계 |
| 라이선스 |
상용 라이선스 |
오픈소스 기반 |