SFN x WERASER 하이브리드 클라우드 구조
Zone별 인프라 및 VPN 통신 구조
graph TB
classDef headerA fill:#1565C0,stroke:#0D47A1,stroke-width:2px,color:#fff,font-weight:bold
classDef headerB fill:#F57F17,stroke:#E65100,stroke-width:2px,color:#fff,font-weight:bold
classDef headerC fill:#6A1B9A,stroke:#4A148C,stroke-width:2px,color:#fff,font-weight:bold
classDef sfnNode fill:#1E3A5F,stroke:#2196F3,stroke-width:2px,color:#E3F2FD
classDef vpnNode fill:#4A3800,stroke:#FFC107,stroke-width:3px,stroke-dasharray:5 5,color:#FFF8E1
classDef aiNode fill:#4A1259,stroke:#9C27B0,stroke-width:2px,color:#F3E5F5
classDef sfnDB fill:#1B5E20,stroke:#4CAF50,stroke-width:3px,color:#E8F5E9
classDef batchNode fill:#5D4037,stroke:#FF9800,stroke-width:2px,color:#FFF3E0
classDef awsService fill:#FF9900,stroke:#CC7A00,stroke-width:2px,color:#fff
subgraph Wrapper_A [" "]
direction TB
Header_A["🔷 Zone A : SFN Internal Infrastructure"]:::headerA
subgraph Zone_A_Content [" "]
direction TB
Client["📱 SFN App / Web
(고객 접점)"]:::sfnNode --> API_GW["🚪 API Gateway"]:::sfnNode
API_GW --> Backend["⚙️ SFN Backend Server
(Kotlin/Spring Boot)"]:::sfnNode
Backend <--> Legacy_DB[("🗄️ Legacy DB
(고객/주문/재고)")]:::sfnDB
Backend --> NHN_Cloud["📨 NHN Cloud API
(LMS 발송)"]:::sfnNode
SFN_VectorDB[("🧠 SFN Vector DB
(Main Storage)
- 메뉴 임베딩
- 식자재 매핑
- 고객 프로파일")]:::sfnDB
Backend <--> SFN_VectorDB
subgraph AWS_Batch ["📦 Batch Data Transfer"]
direction LR
S3_Bucket[("🪣 S3 Bucket
(데이터 파일 저장)")]:::awsService
SQS_Queue["📬 SQS Queue
(이벤트 알림)"]:::awsService
S3_Bucket -->|"파일 업로드 이벤트"| SQS_Queue
end
Backend -->|"주기적 업로드
(고객/주문 데이터)"| S3_Bucket
end
Header_A ~~~ Zone_A_Content
end
subgraph Wrapper_B [" "]
direction TB
Header_B["🔶 Zone B : Security Bridge"]:::headerB
subgraph Zone_B_Content [" "]
VPN((("🔐 Site-to-Site VPN
Encrypted Tunnel
(AWS ↔ WERASER)"))):::vpnNode
end
Header_B ~~~ Zone_B_Content
end
subgraph Wrapper_C [" "]
direction TB
Header_C["🔮 Zone C : WERASER AI Infrastructure"]:::headerC
subgraph Zone_C_Content [" "]
direction TB
W_Gateway["🌐 AI Gateway
(API Endpoint)"]:::aiNode
subgraph RealTime_Core ["⚡ Real-time Core Engine"]
direction TB
Orchestrator["🎭 Orchestrator
(AI 워크플로우 관리)"]:::aiNode
Embedding["🔢 Embedding Model
(메뉴→벡터 변환)"]:::aiNode
Scoring["📊 Scoring Engine
(마진/비중 기반)"]:::aiNode
LLM_Ops["🤖 LLM Interface
(GPT/Claude/Gemini)"]:::aiNode
Orchestrator --> Embedding
Orchestrator --> Scoring
Scoring --> LLM_Ops
end
subgraph Data_Collection ["🕷️ Data Collection System"]
direction TB
Crawler["🕷️ Data Crawler
(네이버플레이스/다이닝코드)
- 고객 메뉴 수집 (실시간)
- 경쟁사 가격 수집 (배치)"]:::batchNode
end
subgraph Batch_System ["🌙 Daily Batch System"]
direction TB
Data_Worker["📥 Data Worker
(SQS 이벤트 수신)
- S3 파일 다운로드
- 데이터 전처리/정제"]:::batchNode
Batch_AI["⚙️ AI Batch Processor
(Target GP Optimization)
- 쿠폰 금액 산정
- 가격 비교 분석"]:::batchNode
end
Crawler --> Batch_AI
Data_Worker -->|"전처리된 데이터"| Embedding
Data_Worker --> Batch_AI
W_Gateway --> Orchestrator
W_Gateway -.->|"회원가입 트리거"| Crawler
end
Header_C ~~~ Zone_C_Content
end
Backend ====>|"API Request"| VPN
VPN ====>|"Forwarded Request"| W_Gateway
Embedding -.->|"🔍 Vector Search / Insert"| VPN
Batch_AI -.->|"🎫 Batch Result (Discount Policy)"| VPN
VPN -.->|"Read/Write Access"| SFN_VectorDB
SQS_Queue ==>|"이벤트 발행"| VPN
VPN ==>|"이벤트 전달"| Data_Worker
Data_Worker -.->|"S3 파일 요청"| VPN
VPN -.->|"파일 다운로드"| S3_Bucket
style Wrapper_A fill:none,stroke:none
style Wrapper_B fill:none,stroke:none
style Wrapper_C fill:none,stroke:none
style Zone_A_Content fill:#0D253F,stroke:#1565C0,stroke-width:2px
style Zone_B_Content fill:#3E2723,stroke:#F57F17,stroke-width:2px,stroke-dasharray:5 5
style Zone_C_Content fill:#2D1B3D,stroke:#6A1B9A,stroke-width:2px
style RealTime_Core fill:#3D1F4A,stroke:#9C27B0,stroke-width:1px,stroke-dasharray:3 3
style Data_Collection fill:#1E3A5F,stroke:#3B82F6,stroke-width:1px,stroke-dasharray:3 3
style Batch_System fill:#3E2723,stroke:#FF9800,stroke-width:1px,stroke-dasharray:3 3
style AWS_Batch fill:#1a1a2e,stroke:#FF9900,stroke-width:2px
주요 비즈니스 시나리오별 데이터 흐름
sequenceDiagram
autonumber
participant Customer as 👤 신규 고객
participant App as 📱 SFN App
participant Backend as ⚙️ SFN Backend
participant VPN as 🔐 VPN Tunnel
participant Gateway as 🌐 AI Gateway
participant Crawler as 🕷️ Crawler
participant Embedding as 🔢 Embedding
participant VectorDB as 🧠 Vector DB
rect rgba(59, 130, 246, 0.2)
Note over Customer,App: Zone A - SFN
Customer->>+App: 회원가입 요청 (상호명, 주소, 업종)
App->>+Backend: 회원 정보 저장
Backend-->>-App: 가입 완료 응답
App-->>Customer: 가입 완료 (로딩 화면)
end
rect rgba(245, 158, 11, 0.2)
Note over Backend,VPN: Zone B - Security Bridge
Backend-)+VPN: 비동기 데이터 수집 요청
VPN->>Gateway: 요청 전달 (암호화)
end
rect rgba(168, 85, 247, 0.2)
Note over Gateway,Embedding: Zone C - WERASER AI
Gateway->>+Crawler: 크롤링 시작
par 병렬 데이터 수집
Crawler->>Crawler: 🥇 네이버 플레이스
and
Crawler->>Crawler: 🥈 다이닝코드
and
Crawler->>Crawler: 🥉 메뉴판 OCR
end
Crawler-->>-Gateway: 메뉴 데이터 수집 완료
Gateway->>+Embedding: 메뉴명 벡터 변환
Note right of Embedding: "허니 갈릭" → [0.23, 0.87, ...]
Embedding-->>-Gateway: 벡터 데이터 생성 완료
end
rect rgba(245, 158, 11, 0.2)
Note over Gateway,VPN: Zone B - Security Bridge
Gateway->>VPN: 벡터 데이터 전송
end
rect rgba(59, 130, 246, 0.2)
Note over VPN,VectorDB: Zone A - SFN (데이터 저장)
VPN->>+VectorDB: INSERT 벡터 데이터
VectorDB-->>-VPN: 저장 완료
VPN-->>Backend: 수집 완료 알림
Backend->>App: 맞춤 데이터 준비 완료
App->>Customer: 🎉 맞춤형 Landing Page 노출
end
Note over Customer,VectorDB: ⏱️ 전체 소요시간: 1분 이내 (SLA)
sequenceDiagram
autonumber
participant Customer as 👤 고객
participant App as 📱 SFN App
participant Backend as ⚙️ SFN Backend
participant VPN as 🔐 VPN
participant Gateway as 🌐 AI Gateway
participant Orch as 🎭 Orchestrator
participant Embed as 🔢 Embedding
participant VectorDB as 🧠 Vector DB
participant Score as 📊 Scoring
participant LLM as 🤖 LLM
rect rgba(59, 130, 246, 0.2)
Note over Customer,Backend: Zone A - 고객 요청
Customer->>App: "돼지고기" 검색 🔍
App->>Backend: 추천 API 호출
end
rect rgba(245, 158, 11, 0.2)
Backend->>VPN: 추천 요청 전달
VPN->>Gateway: 암호화 터널
end
rect rgba(168, 85, 247, 0.2)
Note over Gateway,LLM: Zone C - AI 추론 처리
Gateway->>Orch: 추천 워크플로우 시작
Orch->>+Embed: 검색어 벡터화
Note right of Embed: "돼지고기" → [0.45, 0.12, ...]
Embed-->>-Orch: 검색 벡터 반환
end
rect rgba(245, 158, 11, 0.2)
Orch->>VPN: 유사도 검색 요청
end
rect rgba(59, 130, 246, 0.2)
Note over VPN,VectorDB: Zone A - Vector Search
VPN->>+VectorDB: Similarity Search (cosine)
Note right of VectorDB: Top-K: 삼겹살(0.92), 목살(0.89)
VectorDB-->>-VPN: 후보 식자재 목록 반환
end
rect rgba(245, 158, 11, 0.2)
VPN-->>Orch: 후보 목록 전달
end
rect rgba(168, 85, 247, 0.2)
Note over Orch,LLM: Zone C - 스코어링 & 추천
Orch->>+Score: 스코어링 요청
Note right of Score: 마진율/사용비중 가중치 적용
Score-->>-Orch: 정렬된 추천 목록
Orch->>+LLM: 추천 문구 생성 요청
LLM-->>-Orch: "고객님께 딱 맞는 국내산 삼겹살!"
Orch->>Gateway: 최종 응답 조합
end
rect rgba(245, 158, 11, 0.2)
Gateway->>VPN: 추천 결과 전송
VPN->>Backend: 응답 전달
end
rect rgba(59, 130, 246, 0.2)
Backend->>App: 추천 상품 목록 + 문구
App->>Customer: 🛒 맞춤 추천 상품 노출
end
sequenceDiagram
autonumber
participant Scheduler as ⏰ Scheduler
participant Crawler as 🕷️ Crawler
participant Batch as ⚙️ Batch Processor
participant VPN as 🔐 VPN
participant VectorDB as 🧠 Vector DB
participant Backend as ⚙️ SFN Backend
participant CouponAPI as 🎫 Coupon API
participant NHN as 📨 NHN Cloud
participant Customer as 👤 고객
rect rgba(168, 85, 247, 0.2)
Note over Scheduler,Batch: Zone C - WERASER (새벽 02:00)
Scheduler->>Crawler: 🌙 배치 트리거 (Daily)
par 경쟁사 가격 수집
Crawler->>Crawler: 경쟁사 A 크롤링
and
Crawler->>Crawler: 경쟁사 B 크롤링
and
Crawler->>Crawler: 경쟁사 C 크롤링
end
Note right of Crawler: 멀티모달 OCR로 규격/원산지 추출
Crawler->>Batch: 경쟁사 가격 데이터 전달
end
rect rgba(245, 158, 11, 0.2)
Batch->>VPN: 전일 판매 데이터 요청
end
rect rgba(59, 130, 246, 0.2)
VPN->>+VectorDB: 판매/마진 데이터 조회
VectorDB-->>-VPN: 데이터 반환
end
rect rgba(245, 158, 11, 0.2)
VPN-->>Batch: 데이터 전달
end
rect rgba(168, 85, 247, 0.2)
Note over Batch,Batch: AI 최적화 연산
Batch->>Batch: 📊 단위당 가격 비교 (10g/100g 정규화)
Batch->>Batch: 🎯 Target GP Range 확인
Batch->>Batch: 💰 정액 쿠폰 금액 산정
Note right of Batch: 개별 마이너스 허용, 전체 믹스 마진 목표
end
rect rgba(245, 158, 11, 0.2)
Batch->>VPN: 쿠폰 정책 데이터 전송
end
rect rgba(59, 130, 246, 0.2)
Note over VPN,Customer: Zone A - SFN (쿠폰 발행)
VPN->>+VectorDB: 쿠폰 정책 INSERT
VectorDB-->>-VPN: 저장 완료
VPN->>Backend: 쿠폰 발행 요청
Backend->>+CouponAPI: 정액 쿠폰 생성 API
Note right of CouponAPI: 일물일가 원칙 유지
CouponAPI-->>-Backend: 쿠폰 발행 완료
Backend->>+NHN: LMS 발송 요청
NHN-->>-Backend: 발송 완료
NHN->>Customer: 📱 "오늘의 특가 쿠폰 도착!"
end
Note over Scheduler,Customer: 🔄 매일 반복 (Daily Batch)
sequenceDiagram
autonumber
participant Customer as 👤 고객
participant App as 📱 SFN App
participant Backend as ⚙️ SFN Backend
participant VPN as 🔐 VPN
participant VectorDB as 🧠 Vector DB
participant Batch as ⚙️ Batch Analyzer
rect rgba(59, 130, 246, 0.2)
Note over Customer,Backend: Zone A - 행동 데이터 발생
Customer->>App: 추천 상품 클릭 👆
App->>Backend: 이벤트 로그 {action: click}
Customer->>App: 장바구니 담기 🛒
App->>Backend: 이벤트 로그 {action: add_cart}
Customer->>App: 구매 완료 💳
App->>Backend: 이벤트 로그 {action: purchase}
Backend->>Backend: 행동 데이터 적재
end
rect rgba(245, 158, 11, 0.2)
Note over Backend,VPN: 일별 배치 전송
Backend->>VPN: 행동 데이터 덤프
end
rect rgba(59, 130, 246, 0.2)
VPN->>+VectorDB: 행동 데이터 INSERT
VectorDB-->>-VPN: 저장 완료
end
rect rgba(168, 85, 247, 0.2)
Note over VPN,Batch: Zone C - 성과 분석 (V2 예정)
VPN-->>Batch: 분석 데이터 전달
Note right of Batch: 📈 분석 지표: CTR, 장바구니 전환율, 구매 전환율
Batch->>Batch: 리포트 생성
end
rect rgba(245, 158, 11, 0.2)
Batch->>VPN: 분석 리포트 전송
VPN->>Backend: 리포트 전달
end
rect rgba(59, 130, 246, 0.2)
Note right of Backend: 대시보드 대신 데이터 리포트 형태 제공
end
ATOM 시스템 구조와 데이터 흐름 이해하기
3개의 Zone으로 분리된 하이브리드 아키텍처입니다.
SFN이 직접 운영하는 AWS VPC 영역입니다.