소개

Flexagon은 가볍고 빠른 PHP 웹 프레임워크입니다.

복잡한 추상화보다 PHP가 가진 단순함을 살리고, 적은 규칙으로 빠르게 개발하는 것을 지향합니다.

  • 쉽고 자유로운 라우팅 --- 파일 구조가 곧 URL 구조가 되어 직관적이고 간결합니다.
  • 모든 요청의 독립적 실행 --- 불필요한 상태를 남기지 않아 안정적이고 예측 가능합니다.
  • PHP다운 간결한 개발 --- 별도의 템플릿 문법 없이 PHP 본연의 방식으로 개발할 수 있습니다.

왜 Flexagon인가

PHP를 알면 바로 시작할 수 있습니다.
페이지는 .php 파일이고, 화면은 PHP와 HTML로 작성하며, 데이터베이스에는 익숙한 SQL을 그대로 사용할 수 있습니다. 별도의 라우팅 문법이나 서비스 컨테이너, 쿼리 DSL을 먼저 익힐 필요가 없습니다.

런타임 의존성이 없습니다.
PHP 8.3과 pdo, openssl, json 확장만 있으면 동작합니다. 프레임워크를 사용하기 위해 수십 개의 외부 패키지를 함께 설치할 필요가 없습니다.

작고 빠릅니다.
동일한 환경에서 프레임워크 부팅까지 1.09ms, 메모리 2MB, 로드 파일 15개를 사용합니다. 프레임워크 자체도 PHP 39개 파일, 7,148줄로 작게 유지됩니다.

Flexagon 3.5.0 Laravel 13.26.1
런타임 의존성 0개 77개 패키지
설치 크기 532KB (PHAR 237KB) 42MB
부팅 시간 1.09ms 12.85ms
부팅 메모리 2MB 20MB
부팅 시 로드 파일 15개 336개

배포가 단순합니다.
프레임워크 전체를 237KB의 PHAR 파일 하나로 배포할 수 있습니다. 대상 서버에 Composer를 설치하거나 별도의 캐시 워밍 과정을 수행할 필요가 없습니다.

설계 원칙

URL은 곧 파일 경로입니다

/user/profile 요청은 public/user/profile.php로 연결됩니다.

별도의 라우팅 테이블을 관리할 필요가 없습니다. 파일을 만들면 URL이 생기고, 파일을 옮기면 URL도 함께 바뀝니다. URL만 보아도 어떤 파일이 실행되는지 쉽게 알 수 있습니다.

스키마의 기준은 데이터베이스입니다

DAO는 첫 쿼리에서 DESCRIBE를 실행해 컬럼, 기본키, auto_increment 정보를 읽고 요청 동안 재사용합니다.

데이터베이스에 이미 정의된 스키마를 PHP 코드에 다시 작성하지 않습니다. 따라서 스키마가 변경되어도 별도의 매핑 정보를 함께 관리할 필요가 없습니다.

전역 설정을 숨기지 않습니다

설정은 _Global 정적 클래스에 모아 둡니다.

DI 컨테이너나 서비스 로케이터를 거치지 않으므로 설정이 어디에 있고 어떤 값이 사용되는지 쉽게 확인할 수 있습니다. IDE에서 _Global::을 입력하면 사용할 수 있는 설정도 바로 확인할 수 있습니다.

요청당 비용을 최소화합니다

프레임워크 부팅 과정은 상수 정의, 오토로더 등록, 설정 파일 로드로 구성됩니다.

필요 이상의 객체나 서비스를 미리 생성하지 않으며, 데이터베이스 연결은 DataSourceManager가 요청 안에서 재사용합니다.