๐งฑ ๊ธฐ์ ์คํ ๋ฐ ์์คํ ๊ตฌ์กฐ - away0419/Placely GitHub Wiki
flowchart TD
subgraph Infra["Infra"]
K8s["Kubernetes Cluster"]
ArgoCD["Argo CD (GitOps CI/CD)"]
Monitoring["Prometheus / Grafana / Loki (์์ )"]
end
subgraph UI["UI"]
A1["B2B Web UI (Next.js)"]
A2["B2C Web UI (Next.js)"]
end
subgraph Gateway["API Gateway"]
G["API Gateway (Spring Cloud Gateway / Kong)"]
end
subgraph Auth["Auth"]
AuthService["Authentication Service (Spring Security + JWT)"]
end
subgraph Messaging["Messaging"]
Kafka["Kafka"]
end
subgraph Services["Services"]
B2BOrder["B2B (๋งค์ฅ) ์๋น์ค"]
B2CShop["B2C (์๋) ์๋น์ค"]
AIRec["AI ์๋น์ค"]
end
subgraph Databases["Databases"]
DB_B2B[("B2B DB")]
DB_B2C[("B2C DB")]
DB_AI[("AI DB")]
end
UI -- API ์์ฒญ --> Gateway
Gateway -- ์ธ์ฆ ์์ --> Auth
Gateway -- ๋ผ์ฐํ
--> Services
Services <-- ์ด๋ฒคํธ --> Messaging
B2BOrder --> DB_B2B
B2CShop --> DB_B2C
AIRec --> DB_AI
ArgoCD --> K8s
Monitoring --> K8s
๋ถ์ผ | ์คํ | ์ ์ ์ด์ |
---|---|---|
๋ฐฑ์๋ | Kotlin, Spring Boot 3 | ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ๊ณผ ๋์ ์์ฐ์ฑ์ผ๋ก ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌํ์ ์ต์ |
ํ๋ก ํธ์๋ | Next.js, TypeScript, Tailwind CSS | SSR ๋ฐ CSR ํผํฉ ์ง์, ์ฌ์ฉ์ ์นํ์ UI ๊ฐ๋ฐ |
๋ฐ์ดํฐ๋ฒ ์ด์ค | PostgreSQL, JPA | ์์ ์ ์ด๊ณ ์ง๊ด์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ |
์ธ์ฆ/๋ณด์ | Spring Security + JWT | ์ค๋ฌด์ ์ ํฉํ ์ธ์ฆ/์ธ๊ฐ ์ฒ๋ฆฌ ๋ฐฉ์ |
๋ฉ์์ง | Apache Kafka (์์ ) | ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ์ ์ ํฉ |
์ธํ๋ผ | Docker, Kubernetes (OKE), Argo CD | ๋ง์ดํฌ๋ก์๋น์ค ๋ฐฐํฌ ๋ฐ ์ด์ ์๋ํ๋ฅผ ์ํ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ |
CI/CD | GitHub Actions โ Argo CD ์ฐ๋ | GitOps ๊ธฐ๋ฐ์ ์๋ํ๋ ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ |
AI ์ฐ๋ | OpenAI GPT-4 API | ๋งค์ถ ๊ธฐ๋ฐ ์ถ์ฒ ๋ฐ ๋น์ฆ๋์ค ์ธ์ฌ์ดํธ ์์ฑ |
์ธ๋ถ ์ฐ๋ | ๊ณต๊ณต API, ๋ ์จ/์์น API, MCP ๋ฑ | ์๋น์ค ๊ณ ๋ํ๋ฅผ ์ํ ๋ค์ํ ์ธ๋ถ ์ ๋ณด ์์ง |
ํ ์คํธ | JUnit 5, Mockito | ๋จ์ ํ ์คํธ๋ฅผ ํตํ ํต์ฌ ๊ธฐ๋ฅ ์์ ์ฑ ํ๋ณด |
์ด์/๋ชจ๋ํฐ๋ง | Prometheus, Grafana, Loki (์์ ) | MSA ๋ฐ K8s ํ๊ฒฝ์ ๋ก๊ทธ ๋ฐ ๋ฉํธ๋ฆญ ํตํฉ ๋ชจ๋ํฐ๋ง ๊ตฌ์ฑ ์์ |
Placely๋ ์ ํ์ ์ธ 3๊ณ์ธต ๊ตฌ์กฐ์ AI/์ธ๋ถ API ์ฐ๋ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ํ์ฅ์ฑ๊ณผ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํ ๊ตฌ์กฐ์ ๋๋ค.
-
Presentation Layer
- ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ UI ์๋น์ค
- Next.js, React ๋ฑ ์ต์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ ์ฌ์ฉ
- API Gateway๋ฅผ ํตํด ๋ฐฑ์๋ ์๋น์ค์ ํต์
-
API Gateway Layer
- ๋ชจ๋ ์ธ๋ถ ์์ฒญ์ ๋จ์ผ ์ง์ ์ ์ญํ ์ํ
- ์๋น์ค ๋ผ์ฐํ , ์ธ์ฆ/์ธ๊ฐ ์์, ๋ถํ ๋ถ์ฐ, ์์ฒญ ์ ํ, ์๋ต ์ง๊ณ ๋ด๋น
-
Authentication & Authorization Layer (Identity Provider)
- ๋ ๋ฆฝ์ ์ธ ์ธ์ฆ ์๋ฒ๋ก ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ ๋ด๋น
- JWT, OAuth2, OpenID Connect ๋ฑ ํ์ค ํ๋กํ ์ฝ ์ง์
- ๊ฐ ์๋น์ค์ ์ธ์ฆ ์์ฒญ ์ฒ๋ฆฌ ๋ฐ ํ ํฐ ๊ฒ์ฆ ์ํ
-
Service Layer
- ๋๋ฉ์ธ๋ณ ์์ ํ ๋ ๋ฆฝ๋ ์๋น์ค ๋จ์๋ก ๊ตฌ์ฑ
- ๋ด๋ถ๋ Controller, Service, Repository ๊ตฌ์กฐ ์ ์ง
- ๋น์ฆ๋์ค ๋ก์ง ์ํ, ๋ฐ์ดํฐ ๊ด๋ฆฌ, ์ธ๋ถ ์ฐ๋ ๋ด๋น
- ์๋น์ค ๊ฐ ํต์ ์ REST API, gRPC, ๋ฉ์์ง ์ฌ์ฉ
-
Integration / Messaging Layer
- ์๋น์ค ๊ฐ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ๋ฉ์์ง ๋ด๋น
- ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ๋์จํ ๊ฒฐํฉ ๋ฐ ํ์ฅ์ฑ ํ๋ณด
- ์ธ๋ถ API ์ฐ๋ ๋ฐ ์ฅ์๊ฐ ์ฒ๋ฆฌ ์์ ๋ถ๋ฆฌ ์ํ
-
Data Layer
- ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์์ฒด DB๋ฅผ ์์ ํ๋ DB ๋ถ๋ฆฌ ์์น ์ ์ฉ
- ์๋น์ค ํน์ฑ์ ๋ฐ๋ผ ์ ํ
-
Infrastructure Layer
- Kubernetes ๊ธฐ๋ฐ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ๋ฐ ์๋ ๋ฐฐํฌ
- CI/CD ํ์ดํ๋ผ์ธ์ผ๋ก ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ์๋ํ
-
์๋น์ค ํ์ฅ
- B2C ๊ธฐ๋ฅ ์ถ๊ฐ (๋งค์ฅ ๊ฒ์, ์ํ ์ฃผ๋ฌธ, ๋ฆฌ๋ทฐ ๋ฑ)
-
์ธํ๋ผ ํ์ฅ
- Oracle Cloud์์ K8s, LB, Auto Scaling
- AI ์ฐ์ฐ์ Kafka/Redis Queue๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ์ถ์ฒ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ Redis ์บ์ฑ ๋์
- Prometheus, Grafana ๋ฑ ๋ชจ๋ํฐ๋ง ๋์
-
AI ๊ธฐ๋ฅ ํ์ฅ
- ์ฌ์ฉ์ ํ๋ ๊ธฐ๋ฐ ์ธ์ฌ์ดํธ ์ ๊ณต
- ๋งค์ถ ํจํด ๊ธฐ๋ฐ ์ ์ํ ์ถ์ฒ
-
ํ ๋์ ๋ชจ๋ธ ํ์ฅ
- ํฅํ ํ๋์ฐจ์ด์ฆ, ๋ณต์ ๋งค์ฅ ์ด์์๋ฅผ Hybrid ๋๋ Single-tenancy ๊ตฌ์กฐ ๊ณ ๋ ค