소개
Doggy Framework는 Symfony 7.4 LTS(2029년까지 장기 지원) 기반의 AI 네이티브 엔터프라이즈급 로우코드 개발 프레임워크입니다.
왜 Doggy인가?
- AI 네이티브: MCP, Agent, 다중 모델(Alibaba Bailian, OpenAI, LM Studio, Ollama 등)과의 심층 통합, 내장 LLM 설정 시스템, 전역 AI 어시스턴트, AI 뷰 강화, 코딩 어시스턴트, 자연어 쿼리, 시각 인식 등의 AI 기능 제공
- 로우코드 엔진: PHP 8 Attribute와
@Ef커스텀 애노테이션으로 비즈니스 모델 정의, 데이터베이스 마이그레이션과 관리 인터페이스 자동 생성 - AI 기반 뷰 디자이너: 드래그 앤 드롭 레이아웃 + AI 자연어 조작 + 의도 인식 서브 에이전트 뷰 생성 + 다중 버전 관리
- 엔터프라이즈급 보안: WebAuthn 비밀번호 없는 로그인, 삼원 분립, 비밀번호 정책, 전 구간 감사 로그
- 실시간 통신: Mercure SSE 기반 실시간 푸시, FrankenPHP 내장 Hub, 추가 서비스 불필요
- 고성능: FrankenPHP Worker 모드 + zstd/br 압축, PostgreSQL 우선 아키텍처
- 완전한 생태계: 조직 구조, 예약 작업, 파일 저장, 메일 시스템, SunUI 컴포넌트 라이브러리 등 즉시 사용 가능
기술 스택
| 계층 | 기술 |
|---|---|
| 언어 | PHP 8.2+ |
| 프레임워크 | Symfony 7.4 LTS |
| 런타임 | FrankenPHP (Worker 모드) via runtime/frankenphp-symfony |
| 데이터베이스 | PostgreSQL 14+ |
| ORM | Doctrine ORM + StofDoctrineExtensionsBundle (Gedmo) |
| 메시지 큐 | Symfony Messenger (Doctrine Transport) |
| 실시간 통신 | Mercure SSE (dunglas/mercure) |
| AI | Symfony AI (MCP, Agent, Store, 다중 플랫폼 지원) |
| 인증 | WebAuthn (web-auth/webauthn-symfony-bundle) + JWT (firebase/jwt) |
| 파일 저장 | League Flysystem (Local / OSS / S3) |
| 프론트엔드 | Twig + jQuery + SunUI 컴포넌트 라이브러리 |
| 유틸리티 | PHPSpreadsheet, Imagine, Predis, Ramsey UUID |
시스템 요구사항
- PHP >= 8.2
- ext-ctype, ext-iconv
- PostgreSQL >= 14
- Composer >= 2.5
빠른 시작
설치
bash
git clone git@github.com:doggy/skeleton.git my-app
cd my-app환경 설정
bash
cp .env.example .env
# .env 편집: 데이터베이스 연결과 Mercure JWT 키 설정데이터베이스 시작
PostgreSQL은 별도로 설치하고 실행해야 합니다:
bash
# macOS
brew install postgresql@14
brew services start postgresql@14
createdb app
# Ubuntu/Debian
sudo apt install postgresql-14
sudo systemctl start postgresql
sudo -u postgres createdb appMercure Hub는 FrankenPHP에 내장되어 있어 별도로 시작할 필요가 없습니다.
접속
- 애플리케이션: http://localhost:8000
- 관리 백엔드: http://localhost:8000/admin
디렉터리 구조
config/
├── bundles.php # 활성화된 Symfony Bundle 목록
├── packages/ # 각 Bundle 설정
└── services.yaml
src/
├── Annotation/ # 커스텀 애노테이션: Ef.php, EfGroup.php
├── Command/ # 16개의 Console 명령
├── Controller/ # Admin, Api, Security 컨트롤러
├── Entity/ # Doctrine 엔티티 + CommonTrait
│ ├── Organization/ # Department, Position 등
│ ├── Platform/ # 플랫폼 관련 엔티티
│ ├── Security/ # User, Role, Permission
│ ├── Storage/ # 파일 저장 엔티티
│ └── System/ # 시스템 설정 엔티티
├── Form/ # 폼 타입
├── Message/ # 비동기 메시지
├── MessageHandler/ # 메시지 핸들러
├── Repository/ # Doctrine Repository
├── Security/ # WebAuthn, JWT, Voter
├── Service/ # AI, Calendar, Security, Storage, Task, View 등
└── Twig/ # TwigExtension
Caddyfile # FrankenPHP 설정 (Mercure Hub, 압축, 캐시 포함)활성화된 핵심 Bundle
| Bundle | 역할 |
|---|---|
| FrameworkBundle | Symfony 핵심 |
| DoctrineBundle + MigrationsBundle | 데이터베이스 ORM 및 마이그레이션 |
| SecurityBundle | 보안 인증 및 권한 부여 |
| TwigBundle + TwigExtraBundle | 템플릿 엔진 |
| MonologBundle | 로깅 |
| StofDoctrineExtensionsBundle | Gedmo 확장(트리, 타임스탬프, 소프트 삭제 등) |
| NelmioCorsBundle | CORS 지원 |
| WebauthnBundle | WebAuthn 비밀번호 없는 인증 |
| MercureBundle | 실시간 메시지 푸시 |
| AiBundle | Symfony AI 통합 |
| FlysystemBundle | 파일 저장 추상화 |
| HautelookAliceBundle | 테스트 데이터 픽스처 |
핵심 개념
동적 모델
@Ef 애노테이션으로 비즈니스 필드를 표시하고 PHP 8 Attribute로 모델을 정의하면 자동으로 수행됩니다:
- 데이터베이스 마이그레이션 생성
- CRUD 인터페이스 렌더링
- 데이터 검증 규칙
- 권한 검사
php
use App\Annotation\Ef;
class Department
{
#[Ef(displayName: '부서명', required: true)]
private string $name;
#[Ef(displayName: '부서 코드', searchable: true)]
private string $code;
}참고: 동적 모델
엔티티 공용 Trait
모든 엔티티는 CommonTrait을 통해 다음 기능을 조합합니다:
CommonTrait
├── BlameableTrait # 생성자/수정자 자동 기록
├── TimestampableTrait # 생성 시간/수정 시간 자동 기록
├── SoftDeleteTrait # 소프트 삭제
└── IdTrait # 자동 증가 기본 키조직 구조
다중 레벨 부서 트리(Nested Set), 직원 관리, 직위 체계를 지원합니다:
- 무제한 계층 부서 트리(Gedmo NestedTree)
- 다중 회사 및 다중 부서 소속
- 직위 및 직급 체계
- 대량 사용자 가져오기/내보내기(PHPSpreadsheet)
참고: 조직 구조
보안 체계
- WebAuthn 비밀번호 없는 로그인(Passkey, 보안 키, 생체 인식 지원)
- 삼원 분립(시스템 관리자, 보안 관리자, 감사 관리자)
- 비밀번호 복잡도 및 유효 기간 정책
- 전 구간 작업 감사
참고: WebAuthn 인증