γ οΌΌβ/ γ ν©μ΄μ§ μ°λλ₯Ό μλ λ°λ»ν λΆλΉ
( μ° λ± ) μ°λ νλ μ 보μ λͺ¨λ κ²,
"*. __ .*" μ§κΈ λ°λ‘ [μ°λ±]μμ νμΈνμΈμ.
| κΉμ°μ | μ¬μΈν¬ |
|---|---|
| FE Lead | FE |
| @yakim12 | @sehui516 |
| π | π |
flowchart TD
%% --- λμμΈ μμ€ν
---
classDef edge fill:#E1F5FE,stroke:#01579B,stroke-width:2px
classDef aws fill:#FFF3E0,stroke:#E65100,stroke-width:2px
classDef logic fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px
classDef data fill:#E8F5E9,stroke:#2E7D32,stroke-width:2px
classDef ai fill:#E0F2F1,stroke:#00796B,stroke-width:2px,stroke-dasharray: 5 5
subgraph Global_Edge ["π Layer 7: Frontend & Masking"]
User(("π€ User\n(Browser)"))
FB_H["π₯ Firebase Hosting\n(Static Assets)"]:::edge
FB_R["π‘οΈ Cloud Rewrites\n(API Masking Proxy)"]:::edge
end
subgraph AWS_EC2 ["βοΈ AWS Hardened Host (Docker Engine)"]
direction TB
subgraph Security_Gate ["π Security Layer"]
Cert_Bot["π Certbot\n(SSL Auto-Renewal)"]:::aws
DuckDNS["π¦ DuckDNS\n(DDNS Endpoint)"]:::aws
end
subgraph Container_Mesh ["π³ Isolated Docker Network"]
direction TB
subgraph App_Cluster ["π§ Logic Tier"]
Node_App["π§© Node.js API\n(SSL Termination)"]:::logic
AI_Logic["π€ OpenAI Pipeline"]:::ai
end
subgraph Data_Tier ["πΎ Persistence Tier"]
direction LR
MySQL[("π¬ MySQL 8.0")]:::data
Redis[("π΄ Redis Cache")]:::data
ES[("π Elasticsearch")]:::data
end
end
end
Gemini_API[("π§ OpenAI API")]:::ai
%% --- λ°μ΄ν° νλ¦ ---
User -- "HTTPS / TLS 1.3" --> FB_H
FB_H -- "Path Masking" --> FB_R
FB_R == "Secure Tunnel" ==> DuckDNS
DuckDNS --> Node_App
Cert_Bot -. "SSL Certificate" .-> Node_App
Node_App <--> AI_Logic
AI_Logic -- "External Request" --> Gemini_API
Node_App <--> MySQL
Node_App <--> Redis
Node_App <--> ES
%% CI/CD
GHA["βοΈ GH Actions"] -. "Deploy" .-> FB_H
GHA -. "Docker Push/Up" .-> Node_App