이 문서는 제가 bob-yamong 조직의 저장소들을 어떻게 연결해서 읽는지 정리한 분석 노트입니다. 중심은 youmuu이며, 이를 둘러싼 오퍼레이터, 백엔드, 프론트엔드, 인프라 레포가 어떻게 이어지는지 담고 있습니다.
저장소 목록 (31개 저장소)
핵심 플랫폼 (4개 저장소)
저장소
언어
목적
youmuu
C/eBPF
LSM hooks, tracepoints를 포함한 핵심 eBPF 엔진
gomumu
Go
youmuu를 위한 Go 기반 operator/manager
docker-back
Python
Docker 환경용 FastAPI 백엔드
kube-back
Python
Kubernetes 환경용 FastAPI 백엔드
프론트엔드 (4개 저장소)
저장소
프레임워크
목적
policy-web
Next.js
컨테이너 정책 관리 UI (v1)
policy-web-v2
Next.js
대시보드 및 분석 UI (v2)
yamong-fe-v3
React+Vite
최신 React 프론트엔드 (v3)
yamong-production
Node.js
프로덕션 배포 프론트엔드
데이터 파이프라인 (6개 저장소)
저장소
언어
목적
kafka-alert
Python
알림용 Kafka consumer
kafka-sink-connect
Python
Kafka to PostgreSQL sink connector
youmuu-listener
Python
에이전트 heartbeat listener
youmuu-analyzer
Python
로그 분석 및 ML 탐지
youmuu-db
SQL
데이터베이스 스키마 및 마이그레이션
youmuu-syslog
C/eBPF
eBPF용 Syslog 통합
인프라 및 배포 (4개 저장소)
저장소
유형
목적
youmuu-deploy
Docker Compose
다중 환경 배포 설정
Aws-EKS-IaC
Terraform
AWS EKS infrastructure as code
gomumu-web-installer
Go
웹 기반 설치 도구
release-downloader
Go
릴리스 아티팩트 다운로더
튜토리얼 및 템플릿 (6개 저장소)
저장소
언어
목적
ebpf-tutorial
C
libbpf starter template
cilium-ebpf-starter-template
Go
Cilium eBPF template
libbpf-starter-template
C
libbpf template
faust-tutorials
Python
Faust를 사용한 Kafka streaming 예제
siki
Markdown
시스템 콜 및 LSM hooks 문서
ldap-tutorial
-
LDAP 통합 튜토리얼
유틸리티 및 실험 (7개 저장소)
저장소
언어
목적
ipc-implementation
Python
프로세스 간 통신 구현
container-lifecycle-manager
Python
컨테이너 런타임 추상화
go-lsm
Go
Go 기반 LSM hooks 실험
ebpf-block-test
C
eBPF blocking 테스트
ML-log-detection
Python
ML 기반 이상 탐지
drawio
-
아키텍처 다이어그램
demo-repository
JS
데모/예제
1. 의존 관계 분석 (Dependency Analysis)
1.1 핵심 엔진 의존 관계
graph TD
subgraph "핵심 엔진 계층"
Y[youmuu<br/>C/eBPF 엔진]
G[gomumu<br/>Go Operator]
end
subgraph "런타임 추상화"
CLM[container-lifecycle-manager<br/>Python]
end
subgraph "컨테이너 런타임"
CR[containerd]
DK[Docker]
end
subgraph "커널"
K[Linux Kernel 6.8+]
LSM[BPF LSM]
TP[Tracepoints]
end
Y -->|eBPF programs| K
Y -->|LSM hooks| LSM
Y -->|tracepoints| TP
G -->|manages| Y
CLM -->|abstracts| CR
CLM -->|abstracts| DK
sequenceDiagram
participant K as Linux Kernel
participant Y as youmuu (eBPF)
participant L as youmuu-listener
participant KF as Kafka
participant KS as kafka-sink-connect
participant PG as PostgreSQL
participant KB as kube-back
participant PW as policy-web-v2
K->>Y: 시스템 콜 / LSM 이벤트
Y->>L: IPC/unix socket을 통해 전송
L->>KF: Kafka topic에 게시
par Kafka Consumers
KF->>KS: 이벤트 소비
KF->>KA: kafka-alert (Discord)
KF->>YA: youmuu-analyzer (ML)
end
KS->>PG: 데이터베이스에 삽입
PG->>KB: SQLAlchemy를 통해 쿼리
KB->>PW: REST API 응답
PW->>PW: 대시보드 렌더링
2.2 정책 배포 흐름
sequenceDiagram
participant PW as policy-web-v2
participant KB as kube-back
participant PG as PostgreSQL
participant KF as Kafka
participant L as youmuu-listener
participant Y as youmuu (eBPF)
PW->>KB: POST /api/v2/policy
KB->>PG: 정책 저장
KB->>KF: 정책 업데이트 게시
KF->>L: PolicyConsumer 수신
L->>L: 정책을 파일에 저장
L->>Y: 정책 재로드 (SIGHUP/IPC)
Y->>Y: eBPF maps 업데이트
2.3 Heartbeat 및 모니터링 흐름
sequenceDiagram
participant L as youmuu-listener
participant HP as HeartbeatProducer
participant KF as Kafka
participant KS as kafka-sink-connect
participant PG as PostgreSQL
participant KB as kube-back
loop N초마다
L->>HP: 컨테이너 메트릭 수집
HP->>KF: heartbeat 전송
HP->>KF: 시스템 정보 전송
end
KF->>KS: heartbeat 소비
KS->>PG: Heartbeat 테이블에 저장
KS->>PG: SystemInfo 테이블에 저장
KB->>PG: 상태 쿼리
2.4 Kafka Topics
Topic
Producer
Consumer
목적
heartbeat
youmuu-listener
kafka-sink-connect
에이전트 상태 확인
system-info
youmuu-listener
kafka-sink-connect
시스템 메트릭
container-log
youmuu
kafka-sink-connect, kafka-alert
보안 이벤트
lsm-log
youmuu
kafka-sink-connect
LSM 정책 위반
network-flow
youmuu
faust-tutorials
네트워크 모니터링
policy
kube-back/docker-back
youmuu-listener
정책 업데이트
alert
kafka-alert
-
Discord 알림
3. 배포 아키텍처 (Deployment Architecture)
3.1 Docker Compose 배포 단위
graph TB
subgraph "Manager 계층"
MFE[manager/frontend<br/>registry.yamong.dev/yamong_frontend]
MBE[manager/backend<br/>registry.yamong.dev/yamong_backend]
MDB[manager/postgres<br/>registry.yamong.dev/yamong_db]
MG[manager/grafana]
MK[manager/kafka]
MZ[manager/zookeeper]
end
subgraph "Agent 계층 (per host)"
AEB[agent/ebpf<br/>registry.yamong.dev/yamong_ebpf]
AL[agent/listener<br/>registry.yamong.dev/yamong_listener]
end
subgraph "분석 계층"
ASVM[analyze/svm<br/>registry.yamong.dev/yamong_svm_detector]
AAN[analyze/analyzer<br/>registry.yamong.dev/youmuu-analyzer]
AML[analyze/mlp<br/>registry.yamong.dev/yamong_mlp_detector]
end
subgraph "데이터 파이프라인"
KC[kafka-sink-connect<br/>registry.yamong.dev/kafka_sink_connect]
KA[kafka-alert<br/>registry.yamong.dev/alert_server]
end
AEB -->|IPC| AL
AL -->|Kafka| MK
MK -->|topics| KC
KC -->|SQL| MDB
MBE -->|SQL| MDB
MFE -->|REST| MBE
KC -->|metrics| ASVM
KC -->|logs| AAN
3.2 Kubernetes 배포
graph TB
subgraph "EKS 클러스터 (AWS)"
subgraph "Control Plane"
EKS[Amazon EKS]
end
subgraph "Worker Nodes"
subgraph "youmuu DaemonSet"
DS[youmuu eBPF<br/>privileged]
end
subgraph "백엔드 서비스"
KB[kube-back Deployment]
KL[kube-listener DaemonSet]
end
subgraph "데이터 서비스"
KF[Kafka StatefulSet]
PG[PostgreSQL StatefulSet]
end
end
end
subgraph "External"
S3[(S3 Buckets)]
CW[CloudWatch]
end
DS -->|eBPF| KF
KL -->|consume| KF
KB -->|query| PG
KF -->|sink| PG
EKS -->|logs| CW
erDiagram
Server ||--o{ Container : hosts
Server ||--o{ SystemInfo : metrics
Container ||--o{ ContainerSysInfo : metrics
Container ||--o{ InternalContainerId : identities
Container ||--o{ PolicyContainer : policies
Policy ||--o{ PolicyContainer : assigned
Policy ||--o{ LsmFilePolicy : file_rules
Policy ||--o{ LsmNetPolicy : network_rules
Policy ||--o{ LsmProcPolicy : process_rules
Server {
uuid string PK
name string
created_at datetime
}
Container {
id bigint PK
host_server bigint FK
runtime string
name string
created_at datetime
}
Policy {
id bigint PK
name string
api_version string
predefined boolean
}
Heartbeat {
id bigint PK
uuid string
timestamp datetime
survival_container_cnt int
}
4.3 CI/CD 워크플로우
모든 저장소는 Jenkins를 CI/CD에 사용합니다:
graph LR
subgraph "Jenkins 파이프라인 패턴"
A[Git Push] -->|Webhook| B[Jenkins]
B --> C[이미지 빌드]
C -->|Tag| D[registry.yamong.dev]
D --> E[배포 트리거]
end
표준 Jenkinsfile 패턴:
IMAGE_NAME = "registry.yamong.dev/<service_name>"// 빌드 → 테스트 → 레지스트리에 푸시
4.4 공유 네트워크 설정
네트워크
유형
서비스
yamong_network
External Docker
Kafka에 연결된 모든 서비스
app-network
Bridge
단일 스택 배포
npm
External
프론트엔드 reverse proxy
5. 서비스 상호작용 매트릭스 (Service Interaction Matrix)
서비스
의존 대상
제공 대상
youmuu
Linux Kernel, libbpf
youmuu-listener (IPC)
gomumu
K8s API, Kafka
gomumu-web-installer
kube-back
PostgreSQL, K8s API, Kafka
policy-web* (REST)
docker-back
PostgreSQL, Docker API, Kafka
policy-web* (REST)
youmuu-listener
Kafka, youmuu (IPC)
youmuu (정책 파일)
kafka-sink-connect
Kafka, PostgreSQL
PostgreSQL
kafka-alert
Kafka, PostgreSQL
Discord Webhook
youmuu-analyzer
Kafka, PostgreSQL
-
policy-web-v2
kube-back/docker-back
End users
6. 아키텍처 개요 (Architecture Overview)
6.1 고수준 아키텍처
graph TB
subgraph "표현 계층"
WEB[policy-web-v2<br/>React/Next.js]
end
subgraph "API 게이트웨이 계층"
KB[kube-back<br/>FastAPI]
DB[docker-back<br/>FastAPI]
end
subgraph "컨트롤 플레인"
GM[gomumu<br/>Go Operator]
YD[youmuu-deploy<br/>Compose/IaC]
end
subgraph "데이터 계층"
PG[(PostgreSQL)]
KF[Kafka Cluster]
end
subgraph "에이전트 계층 (per node)"
Y[youmuu<br/>eBPF Engine]
YL[youmuu-listener<br/>Agent]
end
subgraph "커널 계층"
LSM[BPF LSM Hooks]
TP[Tracepoints]
end
WEB -->|HTTPS/REST| KB
WEB -->|HTTPS/REST| DB
KB -->|SQL| PG
DB -->|SQL| PG
KB -->|정책| KF
DB -->|정책| KF
GM -->|K8s API| KB
YL -->|Heartbeat/Logs| KF
Y -->|Events| YL
Y -->|eBPF| LSM
Y -->|eBPF| TP
6.2 보안 모니터링 파이프라인
flowchart LR
A[커널 이벤트] -->|eBPF| B[youmuu]
B -->|Unix Socket| C[youmuu-listener]
C -->|Kafka Producer| D[Kafka Topics]
D -->|Consumer| E[kafka-sink-connect]
D -->|Consumer| F[kafka-alert]
D -->|Consumer| G[youmuu-analyzer]
E -->|INSERT| H[(PostgreSQL)]
F -->|Webhook| I[Discord/Slack]
G -->|ML Model| J[이상 탐지]
H -->|Query| K[kube-back/docker-back]
K -->|REST| L[웹 대시보드]
7. 주요 발견사항 (Key Findings)
7.1 강점
명확한 관심사 분리 - Docker와 Kubernetes 백엔드가 별도로 존재
이벤트 기반 아키텍처 - Kafka가 느슨한 결합을 제공
eBPF-first 설계 - 최신 커널 보안 기능 활용
모듈식 배포 - 다양한 환경을 위한 Compose 파일
일관된 기술 스택 - 백엔드는 Python/FastAPI, 프론트엔드는 React
7.2 통합 지점
Kafka가 중추 신경계 - 모든 데이터가 Kafka topics를 통해 흐름
PostgreSQL이 단일 진실 공급원 - 모든 영구 데이터가 공유 스키마에 저장
REST API가 프론트엔드 통신 - 두 백엔드가 유사한 엔드포인트를 노출
IPC가 에이전트 통신 - youmuu와 listener 간 Unix sockets
7.3 잠재적 개선사항
통합 백엔드 - kube-back과 docker-back을 런타임 추상화와 함께 병합 고려
API 버전 관리 - 현재 v1 (docker)와 v2 (kube)가 불일치
프론트엔드 통합 - 세 개의 프론트엔드 버전이 유지보수 오버헤드를 유발할 수 있음
서비스 메쉬 부재 - Istio/Linkerd가 서비스 간 통신에 없음
8. 저장소 의존 관계 그래프 (Repository Dependencies Graph)
graph TD
Backends
KB[kube-back]
DB[docker-back]
Data Pipeline
YL[youmuu-listener]
KS[kafka-sink-connect]
KA[kafka-alert]
YA[youmuu-analyzer]
Databases
PG[(PostgreSQL)]
KF[Kafka]
%% Dependencies
Y -.->|이벤트 생성| YL
YL -->|게시| KF
KB -->|소비| KF
DB -->|소비| KF
KS -->|읽기| KF
KS -->|쓰기| PG
KA -->|읽기| KF
YA -->|읽기| KF
KB -->|쿼리| PG
DB -->|쿼리| PG
PW2 -->|API 호출| KB
PW2 -->|API 호출| DB
YD -->|배포| Y
YD -->|배포| YL
YD -->|배포| KB
EKS -->|프로비저닝| KB
G -->|관리| Y