Skip to content

소개 ​

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+
ORMDoctrine ORM + StofDoctrineExtensionsBundle (Gedmo)
메시지 큐Symfony Messenger (Doctrine Transport)
실시간 통신Mercure SSE (dunglas/mercure)
AISymfony 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 app

Mercure Hub는 FrankenPHP에 내장되어 있어 별도로 시작할 필요가 없습니다.

접속 ​

디렉터리 구조 ​

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역할
FrameworkBundleSymfony 핵심
DoctrineBundle + MigrationsBundle데이터베이스 ORM 및 마이그레이션
SecurityBundle보안 인증 및 권한 부여
TwigBundle + TwigExtraBundle템플릿 엔진
MonologBundle로깅
StofDoctrineExtensionsBundleGedmo 확장(트리, 타임스탬프, 소프트 삭제 등)
NelmioCorsBundleCORS 지원
WebauthnBundleWebAuthn 비밀번호 없는 인증
MercureBundle실시간 메시지 푸시
AiBundleSymfony 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 인증

리소스 ​

MIT 라이선스 오픈소스 | Copyright © 2026 Doggy