๋ฉํฐํด๋ผ์ฐ๋ ํ๋ซํผ์ ์น ์ฝ์ ํ๋ก์ ํธ์ ๋๋ค.
AgenticCP-Web์ AWS, GCP, Azure ๋ฑ ๋ค์ํ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ฅผ ํตํฉ ๊ด๋ฆฌํ๋ ๋ฉํฐํด๋ผ์ฐ๋ ํ๋ซํผ์ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- Framework: React 18
- Language: TypeScript
- Build Tool: Vite
- UI Library: Ant Design 5
- State Management: Zustand
- Data Fetching: TanStack Query (React Query)
- Routing: React Router v6
- HTTP Client: Axios
- Styling: SCSS
- Code Quality: ESLint, Prettier
AgenticCP-Web/
โโโ src/
โ โโโ assets/ # ์ ์ ๋ฆฌ์์ค (์ด๋ฏธ์ง, ํฐํธ ๋ฑ)
โ โโโ components/ # ๊ณตํต ์ปดํฌ๋ํธ
โ โ โโโ common/ # ๋ฒ์ฉ ์ปดํฌ๋ํธ
โ โ โโโ layout/ # ๋ ์ด์์ ์ปดํฌ๋ํธ
โ โโโ constants/ # ์์ ์ ์
โ โโโ hooks/ # ์ปค์คํ
ํ
โ โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โ โ โโโ auth/ # ์ธ์ฆ ๊ด๋ จ
โ โ โโโ dashboard/ # ๋์๋ณด๋
โ โ โโโ tenants/ # ํ
๋ํธ ๊ด๋ฆฌ
โ โ โโโ cloud/ # ํด๋ผ์ฐ๋ ๋ฆฌ์์ค
โ โ โโโ orchestration/ # ์ค์ผ์คํธ๋ ์ด์
โ โ โโโ monitoring/ # ๋ชจ๋ํฐ๋ง
โ โ โโโ security/ # ๋ณด์ & ์ปดํ๋ผ์ด์ธ์ค
โ โ โโโ cost/ # ๋น์ฉ ๊ด๋ฆฌ
โ โ โโโ iac/ # Infrastructure as Code
โ โ โโโ integration/ # ํตํฉ & API
โ โ โโโ notifications/ # ์๋ฆผ
โ โ โโโ settings/ # ์ค์
โ โ โโโ error/ # ์๋ฌ ํ์ด์ง
โ โโโ routes/ # ๋ผ์ฐํ
์ค์
โ โโโ services/ # API ์๋น์ค
โ โโโ store/ # ์ ์ญ ์ํ ๊ด๋ฆฌ
โ โโโ styles/ # ์ ์ญ ์คํ์ผ
โ โโโ types/ # TypeScript ํ์
์ ์
โ โโโ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โ โโโ App.tsx # ์ฑ ๋ฃจํธ ์ปดํฌ๋ํธ
โ โโโ main.tsx # ์ฑ ์ง์
์
โโโ public/ # ๊ณต๊ฐ ์ ์ ํ์ผ
โโโ .eslintrc.cjs # ESLint ์ค์
โโโ .prettierrc # Prettier ์ค์
โโโ tsconfig.json # TypeScript ์ค์
โโโ vite.config.ts # Vite ์ค์
โโโ package.json # ํ๋ก์ ํธ ์์กด์ฑ
๋ก์ปฌ ๊ฐ๋ฐ:
- Node.js 20.0.0 ์ด์ (LTS ๋ฒ์ ๊ถ์ฅ)
- npm 10.0.0 ์ด์
Docker ๊ฐ๋ฐ (๊ถ์ฅ):
- Docker 20.10 ์ด์
- Docker Compose 1.29 ์ด์
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๊ด๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
# 1. ๊ฐ๋ฐ ํ๊ฒฝ ์์
./scripts/docker-dev.sh
# ๋๋ ์ง์ docker-compose ์คํ
docker-compose up --build๊ฐ๋ฐ ์๋ฒ๊ฐ http://localhost:3000 ์์ ์คํ๋ฉ๋๋ค.
# ๊ฐ๋ฐ ์๋ฒ ์์
./scripts/docker-dev.sh
# ๋๋
docker-compose up
# ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
docker-compose up -d
# ์ปจํ
์ด๋ ์ค์ง
./scripts/docker-stop.sh
# ๋๋
docker-compose down
# ์บ์ ์์ด ์ฌ๋น๋
./scripts/docker-rebuild.sh
# ํ๊ฒฝ ์์ ์ ๋ฆฌ (์ปจํ
์ด๋, ๋ณผ๋ฅจ, ์ด๋ฏธ์ง ์ญ์ )
./scripts/docker-clean.sh
# ๋ก๊ทธ ํ์ธ
docker-compose logs -f agenticcp-web
# ์ปจํ
์ด๋ ๋ด๋ถ ์ ์
docker exec -it agenticcp-web-dev sh- โ ์๋ ๋ฆฌ๋ก๋: ํ์ผ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ๋ฐ์ (Hot Module Replacement)
- โ ์ผ๊ด๋ ํ๊ฒฝ: ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ Node.js ๋ฒ์ ์ฌ์ฉ
- โ ๊ฐํธํ ์ค์ : ๋ณต์กํ ๋ก์ปฌ ํ๊ฒฝ ์ค์ ๋ถํ์
- โ ๋ฐฑ์๋ ์ฐ๋: Docker ๋คํธ์ํฌ๋ฅผ ํตํ ์ฌ์ด ๋ฐฑ์๋ ํตํฉ
๋ฐฑ์๋(AgenticCP-Core)์ ํจ๊ป ์คํํ๋ ค๋ฉด:
# 1. ๋ฐฑ์๋ ํ๋ก์ ํธ๋ก ์ด๋ํ์ฌ Docker ๋คํธ์ํฌ ์์ฑ ๋ฐ ์คํ
cd ../AgenticCP-Core
docker-compose up -d
# 2. ํ๋ก ํธ์๋ ์คํ
cd ../AgenticCP-Web
./scripts/docker-dev.shDocker ๋คํธ์ํฌ agenticcp-network๋ฅผ ํตํด ์๋์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ์์กด์ฑ ์ค์น
npm install- ํ๊ฒฝ ๋ณ์ ์ค์
.env.example ํ์ผ์ ๋ณต์ฌํ์ฌ .env ํ์ผ์ ์์ฑํ๊ณ ํ์ํ ๊ฐ์ ์ค์ ํฉ๋๋ค.
cp .env.example .envnpm run dev๊ฐ๋ฐ ์๋ฒ๊ฐ http://localhost:3000 ์์ ์คํ๋ฉ๋๋ค.
npm run build๋น๋๋ ํ์ผ์ dist ๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.
npm run preview# ํ๋ก๋์
์ด๋ฏธ์ง ๋น๋
docker build -t agenticcp-web:latest .
# ํ๋ก๋์
์ปจํ
์ด๋ ์คํ
docker run -p 80:80 agenticcp-web:latest
# ๋๋ docker-compose ์ฌ์ฉ
docker-compose -f docker-compose.prod.yml up -d- ํ๋ซํผ ์ค์ ๊ด๋ฆฌ
- ๊ธฐ๋ฅ ํ๋๊ทธ ๊ด๋ฆฌ
- ๋ผ์ด์ ์ค ๊ด๋ฆฌ
- ํ๋ซํผ ์ํ ๋ชจ๋ํฐ๋ง
- ๋ฉํฐ ํ ๋ํธ ์ง์
- ํ ๋ํธ๋ณ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ
- ํ ๋ํธ ์ค์ ๊ด๋ฆฌ
- AWS, GCP, Azure ํ๋ก๋ฐ์ด๋ ์ฐ๋
- ํด๋ผ์ฐ๋ ๋ฆฌ์์ค ํตํฉ ๊ด๋ฆฌ
- ๋ฆฌ์์ค ์ธ๋ฒคํ ๋ฆฌ ๊ด๋ฆฌ
- ์๋ํ๋ ๋ฐฐํฌ ๊ด๋ฆฌ
- ์คํ ์ค์ผ์ผ๋ง
- ์ํฌํ๋ก์ฐ ์๋ํ
- ์ค์๊ฐ ๋ฉํธ๋ฆญ ์์ง
- ๋ก๊ทธ ๊ด๋ฆฌ
- ์๋ฆผ ์์คํ
- ์ปค์คํ ๋์๋ณด๋
- RBAC ๊ธฐ๋ฐ ๊ถํ ๊ด๋ฆฌ
- ์ฌ์ฉ์ ๋ฐ ์ญํ ๊ด๋ฆฌ
- ๋ณด์ ์ ์ฑ ๊ด๋ฆฌ
- ํด๋ผ์ฐ๋ ๋น์ฉ ์ถ์
- ์์ฐ ๊ด๋ฆฌ
- ๋น์ฉ ์ต์ ํ ์ ์
- Terraform ํ ํ๋ฆฟ ๊ด๋ฆฌ
- ๋ฐฐํฌ ํ์ดํ๋ผ์ธ
- API ๊ฒ์ดํธ์จ์ด
- ์นํ ๊ด๋ฆฌ
- ์๋ํํฐ ํตํฉ
- ์์ฐ์ด ๋ช ๋ น ์ฒ๋ฆฌ: ๋ณต์กํ UI ์กฐ์ ์์ด ์์ฐ์ด๋ก ๋ช ๋ น ์คํ
- ์ค์๊ฐ ์ฑํ : Agent์์ ์ค์๊ฐ ๋ํ ์ธํฐํ์ด์ค
- ๋ช ๋ น ์คํ ๊ฒฐ๊ณผ: ์คํ๋ ์์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์
- ๋ํ ํ์คํ ๋ฆฌ: ์ด์ ๋ํ ๋ด์ฉ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ
- ๋ช ๋ น ํ๋ ํธ: ์์ฃผ ์ฌ์ฉํ๋ ๋ช ๋ น์ด ๋น ๋ฅธ ์คํ
์ฌ์ฉ์: "AWS EC2 ์ธ์คํด์ค ๋ชฉ๋ก์ ๋ณด์ฌ์ค"
Agent: "ํ์ฌ ์คํ ์ค์ธ EC2 ์ธ์คํด์ค๋ 5๊ฐ์
๋๋ค..."
์ฌ์ฉ์: "์ด๋ฒ ๋ฌ AWS ๋น์ฉ ๋ถ์ํด์ค"
Agent: "์ด๋ฒ ๋ฌ ์ด ๋น์ฉ์ $1,234์
๋๋ค. ์ฃผ์ ๋น์ฉ..."
- Super Admin: ๋ชจ๋ ๊ธฐ๋ฅ ์ ๊ทผ ๊ฐ๋ฅ
- Tenant Admin: ํ ๋ํธ ๋ด ๋ชจ๋ ๊ธฐ๋ฅ ๊ด๋ฆฌ
- Cloud Admin: ํด๋ผ์ฐ๋ ๋ฆฌ์์ค ๊ด๋ฆฌ
- Developer: ๊ฐ๋ฐ ๊ด๋ จ ๊ธฐ๋ฅ ์ฌ์ฉ
- Viewer: ์กฐํ ๊ถํ๋ง ๋ณด์
- Auditor: ๊ฐ์ฌ ๋ฐ ๋ก๊ทธ ์กฐํ
- JWT ๊ธฐ๋ฐ ํ ํฐ ์ธ์ฆ
- Refresh Token์ ํตํ ์๋ ๊ฐฑ์
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ด์ฉํ ์ธ์ ์ ์ง
ํ๋ก์ ํธ๋ ๋ค์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ํ์ง์ ๊ด๋ฆฌํฉ๋๋ค:
- ESLint: ์ฝ๋ ๋ฆฐํ
- Prettier: ์ฝ๋ ํฌ๋งทํ
# ์ฝ๋ ํฌ๋งทํ
๊ฒ์ฌ
npm run format:check
# ์ฝ๋ ํฌ๋งทํ
์๋ ์์
npm run format# ๋ฆฐํธ ๊ฒ์ฌ
npm run lint
# ๋ฆฐํธ ์๋ ์์
npm run lint:fix- ํจ์ํ ์ปดํฌ๋ํธ ์ฌ์ฉ
- TypeScript ํ์ ์ ์
- Props ์ธํฐํ์ด์ค ๋ช ์
- ์ ์ ํ ์ฃผ์ ์์ฑ
interface MyComponentProps {
title: string;
onSubmit: () => void;
}
const MyComponent = ({ title, onSubmit }: MyComponentProps) => {
// ์ปดํฌ๋ํธ ๋ก์ง
return <div>{title}</div>;
};
export default MyComponent;import { useQuery, useMutation } from '@tanstack/react-query';
import { tenantService } from '@/services/tenantService';
// ๋ฐ์ดํฐ ์กฐํ
const { data, isLoading, error } = useQuery({
queryKey: ['tenants'],
queryFn: () => tenantService.getTenants(),
});
// ๋ฐ์ดํฐ ๋ณ๊ฒฝ
const mutation = useMutation({
mutationFn: tenantService.createTenant,
onSuccess: () => {
// ์ฑ๊ณต ์ฒ๋ฆฌ
},
});import { create } from 'zustand';
interface MyStore {
count: number;
increment: () => void;
}
export const useMyStore = create<MyStore>((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
}));๋ฌธ์ : ํฌํธ ์ถฉ๋
# ๋ค๋ฅธ ํฌํธ ์ฌ์ฉ
docker-compose down
# docker-compose.yml์์ ํฌํธ ๋ณ๊ฒฝ ํ
docker-compose up๋ฌธ์ : ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์๋์ง ์์
# Docker ๋ณผ๋ฅจ ๋ฐ ์ปจํ
์ด๋ ์ฌ์์
docker-compose down -v
docker-compose up --build๋ฌธ์ : ๋คํธ์ํฌ ์ฐ๊ฒฐ ์คํจ
# Docker ๋คํธ์ํฌ ์ฌ์์ฑ
docker network rm agenticcp-network
docker network create agenticcp-network๋ฌธ์ : ๊ถํ ์ค๋ฅ (Permission denied)
# ์คํฌ๋ฆฝํธ ์คํ ๊ถํ ๋ถ์ฌ
chmod +x scripts/*.sh๋ฌธ์ : node_modules ์ถฉ๋
rm -rf node_modules package-lock.json
npm install๋ฌธ์ : Vite ์บ์ ๋ฌธ์
rm -rf node_modules/.vite
npm run dev- Feature ๋ธ๋์น ์์ฑ (
git checkout -b feature/AmazingFeature) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add some AmazingFeature') - ๋ธ๋์น์ ํธ์ (
git push origin feature/AmazingFeature) - Pull Request ์์ฑ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
AgenticCP ๊ฐ๋ฐํ
Built with โค๏ธ by AgenticCP Team