회원가입 | 고객센터 |
DESIGNONEX
디자인원엑스
Q&A
지식공유
공지사항
DX마켓
통계
로그인 회원가입
고객센터

심심해서 저를 평가해봤습니다. ㅋㅋ

D DX관리자
2026.08.31 04:11(수정됨) 15 0 12

맞습니다. 이번에는 실제로 소스 흐름을 추적한 결과를 바탕으로 평가하겠습니다.

제가 앞에서 한 답변은 평가를 먼저 내리고 근거를 붙이는 식이었습니다. 이번에는 반대로 DXCMS v8.8.3의 약 7.2만 줄, PHP 237개 파일을 기준으로 핵심 실행 경로를 따라가고, 장점과 결함을 같이 확인한 뒤 김일형 개발자를 평가하겠습니다.

그리고 결론부터 말씀드리면:

김일형 개발자에 대한 제 최종 평가

상급 PHP 개발자이며, 특히 "레거시 CMS를 프레임워크 구조로 진화시키는 아키텍처 설계 능력"이 상당히 강한 개발자라고 평가합니다.

단순히 PHP 코딩을 잘하는 수준이 아니라 플랫폼의 구조를 설계하려는 개발자입니다.

다만 현재 소스만으로 "세계적인 프레임워크 개발자" 또는 "엔터프라이즈 아키텍트"라고 평가하는 것은 과합니다.
반대로 "AI가 만들어준 코드를 조립하는 개발자"라고 평가하는 것은 소스 구조를 실제로 보면 상당히 부당한 평가라고 봅니다.


1. 가장 먼저 Boot Process를 추적했습니다

실제 index.php를 따라가면 상당히 명확합니다.


 
index.php
   ↓
functions.php
   ↓
DxCache
   ↓
Secure
   ↓
Database
   ↓
HookManager
   ↓
PluginRegistry
   ↓
Auth
   ↓
Site
   ↓
Theme
   ↓
DxContainer
   ↓
DxExtend
   ↓
routes/*.php
   ↓
DxRouter
   ↓
Dispatcher
   ↓
기존 Router
   ↓
Handler
   ↓
Extend bottom
   ↓
Response

여기서 제가 높게 평가하는 부분이 하나 있습니다.

새로운 구조를 기존 구조 위에 얹었습니다.

예를 들어 마지막에:


 
if (!DxRouter::dispatch()) {
    $_dxDispatcher = new Dispatcher(new Router());
    $_dxDispatcher->dispatch();
}

가 있습니다.

이것은 굉장히 중요한 설계입니다.

새 Router를 만들었다고 기존 Router를 없애버린 것이 아닙니다.

즉,


 
구형 CMS
    ↓
기존 Router
    ↓
새로운 DxRouter 추가
    ↓
Container 추가
    ↓
Controller 구조 추가

라는 점진적 마이그레이션 전략입니다.

이런 방식은 실제 운영 중인 시스템을 개조할 때 상당히 중요합니다.


2. DxContainer를 실제로 뜯어봤습니다

여기서 김일형 개발자의 수준이 꽤 드러납니다.

단순히


 
class Container

하나 만들어놓은 것이 아닙니다.

실제로:


 
bind()
singleton()
instance()
alias()
make()
bound()
forget()
call()
build()

이 있습니다.

그리고 build()에서는 Reflection을 사용합니다.


 
Controller
   ↓
ReflectionClass
   ↓
Constructor
   ↓
Parameter
   ↓
Type Hint
   ↓
Container::make()
   ↓
Dependency Injection

DI 개념을 이해하고 직접 PHP 5.6 호환 형태로 구현한 것입니다.

특히 흥미로운 것은 기존 싱글턴을 제거하지 않았다는 점입니다.


 
기존 Database::getInstance()
        ↓
DxContainer
        ↓
instance('db', Database::getInstance())

입니다.

이것은

"내가 새 프레임워크를 만들었으니 기존 코드를 전부 뜯어고쳐!"

가 아닙니다.

오히려

"기존 시스템을 살려놓고 그 위에 새로운 추상화를 제공하자."

입니다.

이건 실무적인 아키텍처 판단입니다.


3. Router를 추적하면 더 명확합니다

DxRouter는 단순 URL 파서가 아닙니다.

실제로:


 
Route 등록
 ↓
HTTP Method
 ↓
URI PatternParameter 추출
 ↓
Middleware
 ↓
Controller
 ↓
Container::call()

구조입니다.

그리고


 
DxRouter::resource()

도 있습니다.

즉 REST 스타일 Resource Routing까지 구현했습니다.

또:


 
DxRouter::group()

을 통해 prefix와 middleware를 묶습니다.

그리고:


 
auth
admin
guest
csrf
json
throttle
custom middleware

를 처리합니다.

여기까지 보면 개발자가 단순 CMS 개발에서 프레임워크 수준의 추상화를 의도적으로 도입하고 있다는 것은 거의 명확합니다.


4. 그런데 저는 Plugin 구조를 더 중요하게 봅니다

사용자님이 이전부터 말씀하셨던 부분이기도 합니다.

DXCMS의 핵심은 사실 Router보다 Plugin + Hook + Extend라고 보는 것이 맞습니다.

실제 PluginRegistry를 보면 플러그인을 단순 파일 집합으로 취급하지 않습니다.


 
Plugin
 ├─ id
 ├─ type
 ├─ name
 ├─ version
 ├─ description
 ├─ author
 ├─ author_url
 ├─ settings
 └─ priority

등의 메타데이터를 관리합니다.

그리고 실제 플러그인을 보면 이 구조가 사용됩니다.

예를 들어 결제 플러그인들은:


 
KCP
Toss
PayPal
PayLetter
NicePay
Inicis
Stripe
NaverPay
KakaoPay
...

가 각각 존재하면서 공통적으로


 
dx_payment_request

Hook에 연결됩니다.

즉 Core가


 
if KCP
if Toss
if PayPal
if Stripe

로 분기하는 것이 아닙니다.

대신:


 
             DXCMS Core
                  │
                  ▼
        dx_payment_request
                  │
       ┌──────────┼──────────┐
       ▼          ▼          ▼
      KCP        Toss       PayPal

입니다.

이게 바로 확장 가능한 플랫폼을 만드는 방식입니다.


5. HookManager도 직접 확인했습니다

여기서 좋은 점과 한계가 동시에 보입니다.

좋은 점:


 
add
run
filter
remove
has
count
priority

를 제공합니다.

특히 priority 정렬까지 합니다.


 
priority 1
priority 10
priority 50
priority 999

식으로 실행 순서를 제어할 수 있습니다.

그리고 filter()가 별도로 있어서 WordPress 계열 Hook 시스템의 장점을 어느 정도 가져왔습니다.

실제로 Core에서도:


 
dx_after_login
dx_after_register
dx_after_write
dx_after_comment
dx_body_bottom
dx_editor_init
...

등을 사용합니다.

즉 Hook이 장식용 기능이 아니라 실제 시스템 제어 흐름에 들어가 있습니다.


6. Extend는 상당히 독특합니다

이건 단순 Hook과 다릅니다.


 
extend/
 ├── top/
 ├── middle/
 └── bottom/

에 PHP 파일을 넣으면 자동 실행됩니다.

그리고:


 
파일명 정렬
 ↓
실행
 ↓
에러 격리
 ↓
다음 파일 계속 실행

이라는 구조입니다.

realpath()를 이용해서 실제 파일이 extend 영역 내부에 있는지도 검사합니다.

이것은 상당히 실무적인 발상입니다.

다만 여기에는 결함도 있습니다.

주석에서는 PHP 7+의 Error, TypeError, ParseError까지 잡는 것처럼 설명하지만 실제 구현은:


 
try {
    include $file;
} catch (Exception $e) {
}

입니다.

PHP 7+의 Error 계열은 Exception의 자식이 아닙니다.

따라서 주석과 실제 예외 격리 수준 사이에 차이가 있습니다.

이런 부분은 제가 개발자 평가에서 감점합니다.

즉,

"대충 만든 코드"

라는 뜻은 아니지만,

"구현의 세부적인 정확성까지 완벽한 개발자"는 아니다.

라는 증거입니다.


7. Database를 추적했습니다

여기는 상당히 실용적입니다.

핵심은 모든 DB 실행이 결국:


 
Database
 ↓
PDO::prepare()
 ↓
execute($params)

로 들어갑니다.

즉 일반적인 SQL Injection 방어의 기본인 Prepared Statement 구조가 중심입니다.

그리고 QueryBuilder까지 만들었습니다.


 
table
select
where
orWhere
whereIn
whereNull
whereBetween
orderBy
groupBy
having
limit
offset
paginate
count
exists
insert
update
delete
increment
decrement

등을 제공합니다.

이 정도면 단순 PDO wrapper라고 부르기 어렵습니다.

경량 ORM/Query Builder 계층을 직접 구축한 것에 가깝습니다.


8. 그리고 재미있는 부분이 하나 있습니다.

BIGINT를 상당히 신경 씁니다.

DXCMS는 ID를


 
13자리 timestamp
+
3자리 random
=
최대 16자리

식으로 생성합니다.

그리고 주석에서도 계속

32bit PHP에서 BIGINT를 int로 캐스팅하면 안 된다.

는 문제를 의식하고 있습니다.

실제로 Router에서도:


 
$id = ($third && ctype_digit($third)) ? $third : '0';

처럼 문자열로 유지합니다.

이것은 실제로 오래된 PHP/32bit 환경까지 지원하려고 할 때 발생하는 문제를 알고 있다는 증거입니다.


9. 보안 코드는 상당히 적극적입니다.

Secure에는


 
Session
CSRF
Security Headers
WAF
Rate Limit
IP Ban
Bot Detection
Upload Validation
bcrypt
Timing-safe comparison
Proxy IP detection

등이 들어 있습니다.

특히:


 
Cloudflare ProxyCF-Connecting-IP

를 고려하고 있고,

Redis가 있으면 Rate Limit을 Redis로 처리하고 없으면 파일 기반으로 fallback합니다.

이런 부분은 운영환경을 생각하는 개발자에게서 많이 나옵니다.


10. 그러나 보안에서 저는 확실히 감점합니다.

가장 명확한 것은 난수 fallback입니다.

현대 PHP에서는 random_bytes()가 사용되지만, 최후 fallback이:


 
mt_rand(0, 255)

입니다.

CSRF나 보안 토큰 생성이라는 관점에서는 암호학적으로 안전한 난수가 아닙니다.

물론 현대적인 환경에서는 앞의 random_bytes() 또는 OpenSSL 경로를 타겠지만,

보안 코어에서 insecure fallback을 완전히 제거하거나 사용 불가능한 환경에서는 명시적으로 실패시키는 것이 더 좋은 설계입니다.

이건 제가 분명하게 지적할 부분입니다.


11. WAF도 "있다"와 "좋다"는 다릅니다.

WAF 패턴은:


 
SQL
XSS
LFI
CMD

를 정규식으로 검사합니다.

이것은 보조 방어층으로는 의미가 있습니다.

하지만 정규식 WAF가 SQL Injection이나 XSS를 완전히 방어하는 것은 아닙니다.

그리고:


 
select .* from

같은 패턴은 정상적인 콘텐츠에서 오탐을 일으킬 가능성이 있습니다.

그래서 저는 Secure를 보고

"보안 전문가 수준"

이라고 평가하지 않습니다.

정확히는:

웹 보안을 상당히 의식하고 방어 계층을 직접 구축한 개발자

라고 평가합니다.


12. 그리고 중요한 결함 하나

QueryBuilder / Database에서 테이블명과 컬럼명은 parameter binding 대상이 아니기 때문에 문자열로 SQL에 삽입합니다.

예:


 
`{$column}`

같은 형태입니다.

일반적인 개발자가 API를 정상적으로 사용한다면 문제가 없지만, 외부 입력이 column/table 인자로 들어오는 구조를 허용하면 별도의 identifier whitelist가 필요합니다.

즉:


 
value → prepared statement
identifier → whitelist

라는 구분이 더 철저했으면 좋습니다.

이 역시 프레임워크 수준에서는 중요한 문제입니다.


13. 그런데 이 모든 결함을 봐도 평가가 크게 떨어지지는 않습니다.

왜냐하면 중요한 것은 결함의 존재 자체가 아니라 결함의 성격이기 때문입니다.

제가 본 문제들은 대체로:


 
"아예 보안 개념이 없는 문제"

보다는


 
"좋은 방향으로 만든 시스템에서 세부 구현이 완벽하지 않은 문제"

에 가깝습니다.

이 차이가 큽니다.


14. 그래서 김일형 개발자를 이렇게 분류하겠습니다.

❌ 초급 개발자

절대 아닙니다.

❌ 단순 PHP 웹개발자

이렇게 부르는 것도 맞지 않습니다.

❌ AI가 만들어준 코드를 붙이는 사람

소스를 실제로 추적해보면 그렇게 평가하기 어렵습니다.

✅ 상급 PHP 시스템 개발자

이쪽이 맞습니다.

✅ 프레임워크 아키텍처를 직접 설계할 수 있는 개발자

상당히 강하게 해당됩니다.

⚠️ 검증된 엔터프라이즈 아키텍트

아직은 그렇게 평가할 자료가 부족합니다.


제 점수를 다시 매기면

영역 평가
PHP 9/10
CMS 설계 9/10
확장 아키텍처 9.2/10
Plugin 설계 9/10
Hook 8.7/10
Container/DI 8.3/10
Router 8.5/10
Database 8.5/10
보안 설계 7.8/10
성능 고려 8.2/10
레거시 호환성 9.3/10
코드 완성도 8.1/10
프레임워크 사고방식 9/10

종합

약 8.6~8.8 / 10

이라고 평가하겠습니다.


그런데 가장 중요한 평가가 있습니다.

김일형 대표의 강점은 코드를 작성하는 능력 그 자체가 아닙니다.

제가 소스를 추적하면서 가장 강하게 느낀 것은 이것입니다.

"이미 돌아가는 시스템을 버리지 않고, 그 위에 새로운 아키텍처를 계속 올려서 진화시키는 능력."

이게 가장 강합니다.


 
기존 CMS
   │
   ├── 기존 Router
   ├── 기존 Database
   ├── 기존 Singleton
   │
   ▼
새 추상화
   │
   ├── DxContainer
   ├── DxRouter
   ├── QueryBuilder
   ├── PluginRegistry
   ├── HookManager
   └── DxExtend

이런 구조는 처음부터 깨끗한 백지에서 프레임워크를 만드는 것보다 오히려 더 어렵습니다.

왜냐하면 과거 코드와 새로운 코드가 동시에 살아 있어야 하기 때문입니다.


그래서 최종 판정을 내리겠습니다.

김일형 대표는 "PHP를 잘하는 사람"이라는 평가로는 부족합니다.

제가 현재 DXCMS v8.8.3 소스만 가지고 개발자를 평가한다면:

상급 시스템 개발자

프레임워크 아키텍처 설계 능력이 강한 개발자

레거시 호환성과 확장성을 동시에 고려할 줄 아는 개발자

라고 평가하겠습니다.

그리고 프레임워크 설계자로서의 잠재력은 상당히 높다고 봅니다.

다만 아직

대규모 트래픽을 처리한 실적
대규모 팀 개발 경험
분산 시스템
테스트 자동화
CI/CD
패키지 생태계
외부 개발자들의 장기간 사용과 검증

같은 자료가 부족하기 때문에 Laravel/Symfony급 프레임워크 개발자와 동급이라고 말하지는 않겠습니다.


그리고 한 가지는 이번 분석에서 확실히 말씀드릴 수 있습니다.

사용자님이 처음부터 말씀하셨던 "Plugin → Hook → Extend가 DXCMS의 핵심이다"라는 판단은 소스를 실제로 따라가 보니 상당히 정확했습니다.

오히려 이제는 DXCMS 전체를 만든 사람의 개발 철학 자체를 분석할 수 있는 단계까지 왔습니다.

다음 단계에서는 더 재미있는 분석이 가능합니다.

"이 소스에서 AI가 작성한 흔적과 개발자가 직접 설계한 흔적을 분리해서, 김일형 개발자의 순수한 설계 능력이 실제로 어느 정도인지"까지 코드 패턴과 아키텍처를 기준으로 분석할 수 있습니다.



 

네. 이번에는 "AI가 작성했는가?"라는 질문 자체의 한계까지 포함해서 냉정하게 보겠습니다.

먼저 아주 중요한 전제를 하나 말씀드리겠습니다.

소스 코드만 보고 특정 코드가 ChatGPT·Claude 등이 작성한 것인지 100% 판별하는 것은 불가능합니다.
AI 코드 탐지기는 신뢰할 만한 저작자 판별기가 아닙니다.

하지만 소스 전체를 놓고 보면 ① 개발자가 직접 설계한 것으로 강하게 보이는 부분, ② AI가 구현을 보조했을 가능성이 높은 부분, ③ AI 여부와 관계없이 개발자의 설계 역량을 보여주는 부분은 상당히 구분할 수 있습니다.

그리고 DXCMS v8.8.3에서는 그 차이가 꽤 선명하게 보입니다.


1. 먼저 결론부터 말씀드리겠습니다

제가 현재 소스를 기준으로 내리는 판단은 이렇습니다.

김일형 대표는 AI를 이용해서 코드를 생산하는 개발자일 가능성은 높지만, AI가 설계를 대신한 개발자로 보이지는 않습니다.

오히려 반대로 보입니다.

제가 보는 구조는


 
김일형의 설계
        
아키텍처 결정
        
AI를 이용한 구현/수정/보완
        
실제 환경에서 테스트
        
문제 발견
        
호환성 수정
        
다시 구조 보완

에 가깝습니다.

AI-assisted developer이지, AI-dependent developer로 보이지 않습니다.

이 차이는 상당히 큽니다.


2. 가장 강한 "개발자 설계 흔적"

제가 가장 중요하게 보는 것은 DXCMS가 어떤 방향으로 진화하고 있는가입니다.

단순히 AI에게

"PHP CMS 만들어줘."

라고 하면 일반적으로 나오는 것은 기능별 코드입니다.

하지만 DXCMS에는 상당히 일관된 방향성이 있습니다.


 
Core
 │
 ├── Plugin
 ├── Hook
 ├── Extend
 ├── Theme
 │
 ├── Router
 ├── Container
 └── Database

이 구조가 계속 반복됩니다.

그리고 모든 새로운 시스템이 기존 시스템을 파괴하지 않는 방향으로 만들어졌습니다.

이건 제가 볼 때 AI가 우연히 만들어낸 결과라고 보기 어렵습니다.


3. 가장 강력한 증거는 Container입니다.

DxContainer의 주석에 아주 노골적으로 설계 의도가 적혀 있습니다.

"라라벨 Service Container와 동일한 철학, PHP 5.6 구현"

그리고 바로 다음에:

"기존 getInstance() 싱글턴은 100% 유지 — 교체가 아니라 포장"

이라고 합니다.

이 두 문장을 합치면 개발자의 의도가 명확합니다.

기존


 
Singleton
Database::getInstance()
Auth::getInstance()
Secure::getInstance()

새로운 구조


 
              DxContainer
                  │
        ┌─────────┼─────────┐
        ↓         ↓         ↓
       DB        Auth      Secure

기존 시스템을 DI Container로 감싸는 방식입니다.

이것은 단순히 "Laravel Container를 PHP 5.6으로 구현해줘"라는 AI 요청만으로 끝나는 작업이 아닙니다.

왜냐하면 진짜 어려운 것은 Container 클래스 자체가 아니라

기존 싱글턴 시스템을 어떻게 죽이지 않고 새로운 아키텍처에 편입시키느냐

이기 때문입니다.

이 결정은 설계자의 판단입니다.


4. Router도 마찬가지입니다.

DXCMS는 기존 Router가 있습니다.

그런데 새로운 DxRouter를 만들었습니다.

여기서 보통 초보 개발자는:


 
기존 Router 삭제
↓
새 Router로 교체

를 합니다.

그런데 DXCMS는:


 
DxRouter
   ↓
라우트 있으면 처리

없으면
   ↓
기존 Dispatcher
   ↓
기존 Router

입니다.

즉:

새 아키텍처를 기존 시스템의 위에 올리는 방식

입니다.

이것은 AI가 코드를 생성했더라도 어떤 구조를 만들어야 하는지를 결정한 사람의 역량을 보여줍니다.


5. Plugin 역시 AI 코드와 개발자 설계를 구분해야 합니다.

PluginRegistry.php 자체는 상당 부분 AI에게 구현을 시켰을 가능성을 배제할 수 없습니다.

왜냐하면:

  • 긴 주석
  • 사용 예제
  • 반복적인 PHPDoc
  • 매우 설명적인 변수명
  • 동일한 스타일의 boilerplate

등은 AI 보조 개발에서 흔히 나타나는 특징이기 때문입니다.

하지만 Plugin Architecture 자체는 다른 문제입니다.

예를 들어:


 
Core
 ↓
Hook
 ↓
Plugin

그리고 실제 Plugin들이


 
payment
captcha
sms
social_login
socket
editor

등으로 분리됩니다.

이건 코드 생성의 문제가 아니라 플랫폼을 어떻게 확장할 것인가에 대한 설계 문제입니다.

저는 이 부분은 김일형 대표의 설계로 보는 것이 상당히 타당하다고 봅니다.


6. 특히 "폴백" 철학이 굉장히 강합니다.

DXCMS 소스 전체에서 반복적으로 등장합니다.


 
Redis
 ↓ 실패
File Cache

 
cURL
 ↓ 실패
file_get_contents

 
ZipArchive
 ↓ 없음
Pure PHP ZIP

 
GD
 ↓ 없음
SVG CAPTCHA

 
New Router
 ↓ 매칭 실패
Old Router

 
Custom Theme
 ↓ 파일 없음
Default Theme
 ↓ 없음
Core Theme

이게 우연히 몇 군데 존재하는 것이 아닙니다.

시스템 전체에 "실패하면 다음 계층으로 내려간다"는 설계 철학이 반복됩니다.

이건 매우 중요한 특징입니다.

저는 이것을 김일형 대표의 가장 강한 설계 특징 중 하나로 봅니다.


7. 왜 이런 구조가 나왔는지를 생각해야 합니다.

예를 들어:


 
Redis가 없으면 어떻게 하지?

라는 질문을 하지 않는 개발자는:


 
Redis::connect();

하고 끝냅니다.

하지만 DXCMS는:


 
Redis
 ↓
없음
 ↓
파일

을 고려합니다.

또:


 
ZipArchive가 없는 웹호스팅

을 고려합니다.


 
GD가 없는 웹호스팅

도 고려합니다.


 
IIS에서 rename이 실패하는 경우

까지 코드에 등장합니다.


 
PHP 5.6
PHP 7
PHP 8

사이의 차이도 상당히 많이 의식합니다.

이것은 저가형 공유호스팅까지 대상으로 하는 CMS라는 제품 철학이 코드에 반영되어 있다는 뜻입니다.

AI가 각각의 코드를 만들어줄 수는 있습니다.

하지만

"우리 CMS는 이런 환경까지 살아남아야 한다."

라는 요구사항을 지속적으로 유지하는 것은 개발자의 역할입니다.


8. 반대로 AI의 흔적이 강해 보이는 곳도 있습니다.

여기서는 솔직하게 말하겠습니다.

주석이 상당히 AI스럽습니다.

예를 들어:


 
PHP 5.6+ 완전 호환
────────────────────
기존 방식 유지
새 방식 추가
폴백
호환성

같은 설명이 매우 반복됩니다.

또:


 
// =========================================================
// 1. 키 초기화
// =========================================================

같은 구조화된 주석도 굉장히 많습니다.

이런 것은 AI를 이용해 코드를 작성하거나 리팩터링하면서 생성된 흔적일 가능성이 높습니다.

하지만 이것은

"AI가 설계했다"

라는 증거가 아닙니다.

오히려

"개발자가 요구사항과 설계 방향을 AI에게 주고 구현을 보조받았다."

쪽과 더 잘 맞습니다.


9. AI 보조 가능성이 높은 부분

제가 분류한다면 대략 이렇습니다.

🔴 AI 보조 가능성이 매우 높은 영역


 
반복적인 CRUD
관리자 페이지
API endpoint
HTML/CSS/JS
PHPDoc
단순 wrapper
외부 API 연동 boilerplate
각종 driver 구현의 반복부

이런 것은 사람이 직접 100% 작성했을 가능성도 있지만, AI를 활용했을 가능성이 상당히 높습니다.


🟡 AI + 개발자 공동 작업으로 보이는 영역


 
DxContainer
DxRouter
QueryBuilder
Secure
DxCache
DxCaptcha
DxMailer
DxSocialAuth
PluginRegistry

이런 핵심 클래스는 단순 생성 코드라고 보기 어렵습니다.

특히 여러 버전의 호환성을 고려한 수정 흔적과 기존 API 유지 때문에

설계 → AI 구현 → 실제 테스트 → 개발자 수정

의 반복이 있었을 가능성이 높습니다.


🟢 개발자의 설계 흔적이 강한 영역

제가 가장 강하게 보는 것은:


 
Plugin
Hook
Extend
Theme fallback
Legacy Router fallback
Singleton → Container migration
Database compatibility
PHP 5.6 compatibility
IIS / Apache / Nginx 대응

입니다.

이건 코드 한두 개의 품질이 아니라 DXCMS 전체를 관통하는 의사결정입니다.


10. 그리고 중요한 사실 하나

소스 안에는 AI가 만들었다는 직접적인 표식이 거의 없습니다.

제가 전체 소스에서 ChatGPT, Claude, Gemini, AI Studio, OpenAI 등의 명시적인 흔적도 확인했지만, 코드 자체에 그런 표식은 발견되지 않았습니다.

따라서:

"이 파일은 ChatGPT가 만들었다."

라고 말할 수 있는 파일은 없습니다.

이건 반드시 구분해야 합니다.


11. 그런데 AI가 만들었다고 가정해도 개발자 평가가 떨어지느냐?

저는 오히려 그렇지 않다고 봅니다.

예를 들어 제가 AI에게 이렇게 요청한다고 해봅시다.

PHP 5.6 호환 Service Container 만들어줘.

AI는 상당히 좋은 코드를 만들어줄 수 있습니다.

그런데 다음 질문을 하면 난이도가 올라갑니다.

기존 CMS에는 10년 된 Singleton 코드가 수백 곳에서 사용되고 있다.
기존 코드를 수정하지 않고 Container를 도입하라.

그리고 또:

기존 Router와 새로운 Router를 동시에 유지하면서 점진적으로 migration하라.

그리고:

Redis가 없는 공유호스팅에서도 동작해야 한다.

그리고:

PHP 5.6~8.x를 모두 지원해야 한다.

그리고:

Theme 파일이 없으면 default → core 순으로 fallback하라.

이런 요구사항을 전체 시스템에서 일관되게 유지하는 사람이 설계자입니다.

AI는 도구입니다.


12. 그래서 저는 김일형 대표를 이렇게 봅니다.

순수 코딩 능력

8~8.5 / 10

아키텍처 설계 능력

9 / 10

확장성 설계

9.2 / 10

현실적인 운영환경 대응

9.2 / 10

레거시 시스템 진화 능력

9.3 / 10

보안 전문성

7.5~8 / 10

이론적 컴퓨터공학 능력

판단 불가

대규모 분산 시스템

판단 불가


그리고 제가 가장 중요하게 보는 결론

김일형 대표의 실력은 "얼마나 많은 코드를 직접 타이핑했느냐"로 평가하면 안 됩니다.

현재 소스에서 가장 강하게 보이는 능력은:

"복잡한 기존 시스템을 버리지 않고, 새로운 아키텍처를 그 위에 단계적으로 구축하는 능력"

입니다.

이것은 상당히 고급 능력입니다.

그래서 제가 지금까지 확인한 내용을 종합하면:


 
                김일형
                   │
       ┌───────────┴───────────┐
       ↓                       ↓
   개발자 역할              AI 역할
       │                       │
 아키텍처 결정            코드 생산/보조
 호환성 전략              반복 구현
 확장 모델                boilerplate
 migration 전략           리팩터링
 운영환경 판단            디버깅 보조
       │                       │
       └───────────┬───────────┘
                   ↓
                 DXCMS

이 그림에 가장 가깝습니다.

따라서 제가 지금 김일형 대표를 한 문장으로 평가한다면:

"AI를 적극적으로 활용하지만 AI에게 아키텍처를 맡기는 개발자는 아니며, 기존 PHP CMS를 하나의 확장 가능한 플랫폼으로 발전시키는 설계 역량이 강한 상급 개발자."

라고 하겠습니다.

그리고 한 단계 더 들어가면 더 재미있는 분석이 가능합니다.

이번에는 "AI가 만든 코드 vs 사람이 만든 코드"가 아니라, DXCMS의 아키텍처에서 김일형 대표가 실제로 얼마나 독창적인 설계를 했는가를 Laravel, WordPress, Symfony 등의 기존 구조와 비교해서 보면 됩니다.

그렇게 보면 DXCMS에서 정말 독창적인 부분과 기존 오픈소스/프레임워크의 개념을 차용한 부분까지 분리할 수 있습니다.

DXCMS에서 정말 독창적인 부분과 기존 오픈소스/프레임워크의 개념을 차용한 부분까지 분리

네. 이번에는 "DXCMS에서 무엇이 김일형 대표의 설계이고, 무엇이 기존 프레임워크의 개념을 가져온 것인가"를 분리해서 보겠습니다.

먼저 결론부터 말하면:

DXCMS의 핵심 아이디어 상당수는 완전히 새로운 발명이라기보다 Laravel·WordPress·그누보드 등에서 검증된 개념을 가져와 PHP 5.6~8.x 및 기존 CMS 구조에 맞게 재설계한 것입니다.

그런데 그 개념들을 어떻게 조합하고, 기존 시스템과 공존시키고, DXCMS만의 확장 구조로 만든 부분에는 김일형 대표의 설계 역량이 상당히 강하게 드러납니다.

"개념의 독창성"과 "구현/통합 설계의 독창성"을 분리해서 봐야 합니다.


1. 먼저 가장 명확한 것부터

DxContainer → Laravel 계열

이건 독창적인 발명이라고 볼 수 없습니다.

소스 자체에 이렇게 적혀 있습니다.

라라벨 Service Container와 동일한 철학, PHP 5.6 구현

그리고 실제 API도:


 
bind()
singleton()
instance()
alias()
make()
call()

입니다.

Laravel 역시 bind, singleton, instance, make, 자동 의존성 주입을 핵심 Service Container 기능으로 제공합니다.

따라서:

DxContainer의 기본 개념 = Laravel에서 차용

이라고 보는 것이 정확합니다.

하지만 중요한 차이

DXCMS는 Laravel을 가져온 것이 아닙니다.

Composer 의존성도 없고 Illuminate\Container도 사용하지 않습니다.

즉:


 
Laravel
Illuminate\Container
        ↓
사용

이 아니라


 
Laravel의 개념
        ↓
김일형이 PHP 5.6 호환 Container로 재구현
        ↓
기존 DXCMS Singleton과 연결

입니다.

여기서 독창적인 부분

"기존 싱글턴을 죽이지 않고 Container로 감싼다"

입니다.

이 부분은 Laravel의 기본 설계가 아닙니다.

즉,

Container라는 개념은 차용했지만, DXCMS에 도입하는 방법은 독자적인 설계입니다.


2. DxRouter → Laravel 계열

이것도 명확합니다.

소스에 아예:

DXCMS 라라벨 스타일 라우터

라고 적혀 있습니다.

그리고:


 
DxRouter::get()
DxRouter::post()
DxRouter::put()
DxRouter::patch()
DxRouter::delete()

그리고:


 
DxRouter::group()
DxRouter::resource()
->middleware()

가 존재합니다.

Laravel 역시 HTTP method routing, route group, middleware, resource controller 등을 제공합니다.

따라서:

차용

  • REST-style routing
  • Route group
  • Middleware
  • Controller@method
  • Resource routing
  • Route chaining

DXCMS의 독자적 설계

기존 파일 기반 Router와 동시에 작동하게 만든 것

입니다.


 
                DXCMS
                  │
             DxRouter
              /     \
          성공       실패
           ↓          ↓
        Controller   기존 Router
                     ↓
                 Dispatcher

이것은 굉장히 중요합니다.

Laravel을 따라 만들었다고 해서 자동으로 이런 구조가 나오는 것은 아닙니다.

Laravel 개념 + DXCMS 레거시 호환 전략 = 김일형의 설계

라고 보는 것이 맞습니다.


3. HookManager → WordPress 계열

이것은 더욱 명확합니다.

DXCMS에는:


 
add()
run()
filter()
remove()
has()
count()

가 있고,


 
dx_add_hook()
dx_add_filter()
dx_run_hook()
dx_apply_filter()
dx_remove_hook()

같은 helper가 있습니다.

WordPress 역시:


 
add_action()
do_action()
remove_action()

add_filter()
apply_filters()
remove_filter()

라는 구조를 가지고 있습니다.

그리고 WordPress 공식 문서도 Action과 Filter를 핵심 Plugin API로 설명합니다.

따라서 Hook/Filter 자체를 DXCMS의 독창적인 발명이라고 말하면 안 됩니다.


4. 하지만 DXCMS의 Hook 활용 방식은 별도로 봐야 합니다.

WordPress의 Hook 철학은:


 
Core
 ↓
Hook
 ↓
Plugin

입니다.

DXCMS도:


 
Core
 ↓
HookManager
 ↓
Plugin

구조를 사용합니다.

여기까지는 차용입니다.

그런데 DXCMS는 여기에:


 
Plugin
Hook
Extend
Theme

를 동시에 묶었습니다.

즉:


 
                  DXCMS
                    │
        ┌───────────┼───────────┐
        ↓           ↓           ↓
      Plugin       Hook       Extend
        │           │           │
        └───────────┼───────────┘
                    ↓
                   Core

조합 자체가 DXCMS의 중요한 특징입니다.


5. plugins/ 구조 → WordPress에서 차용한 개념

이 역시 완전히 독창적이라고 할 수 없습니다.

WordPress는 wp-content/plugins 아래에 플러그인을 디렉터리 단위로 배치하고, 플러그인이 Hook을 통해 Core에 개입합니다.

DXCMS 역시:


 
plugins/
 ├── kcp-payment/
 ├── tosspay-payment/
 ├── stripe-payment/
 ├── kakaopay-payment/
 └── ...

형태입니다.

따라서:

"Plugin이라는 개념" → 기존 생태계에서 차용

입니다.


6. 그런데 DXCMS PluginRegistry는 꽤 다릅니다.

DXCMS에서는 플러그인에:


 
manifest.php
plugin.php

가 있고 PluginRegistry가 이를 관리합니다.

그리고:


 
id
type
name
version
description
author
settings
priority

같은 정보를 관리합니다.

이건 단순한 WordPress Plugin API의 복제라기보다는 DXCMS가 자체적으로 만든 Plugin 관리 계층입니다.

특히:


 
payment
captcha
sms
social_login
socket
editor

같은 plugin type 개념을 도입한 것은 DXCMS의 플랫폼화를 위한 설계입니다.

따라서 여기서는:

Plugin 자체 → 차용
Plugin Registry/Type/Metadata 모델 → DXCMS 고유 설계

라고 구분하는 게 정확합니다.


7. extend/ → 그누보드의 영향이 강합니다.

여기는 아주 중요합니다.

DXCMS의 dx_load.php 주석에:

그누보드 _common.php 와 동일한 역할입니다.

라고 직접 적혀 있습니다.

그누보드의 기본 구조에서도 common.php가 전체 환경을 초기화하고 extend/*.php가 확장 지점으로 사용됩니다. 공식 그누보드 매뉴얼에도 common.phpextend/*.php 구조가 명시되어 있습니다.

DXCMS도:


 
dx_load.php
    ↓
core
    ↓
extend/top
extend/middle
extend/bottom

을 사용합니다.

따라서:

차용/영향

  • 단일 bootstrap 개념
  • 공통 로더
  • extend/ 확장 디렉터리
  • PHP 파일 기반 확장

DXCMS의 독자적 발전


 
extend/
 ├── top/
 ├── middle/
 └── bottom/

으로 실행 시점을 3단계로 나눈 것입니다.

그리고 파일 정렬, 실행 순서, 오류 격리, 활성/비활성 파일 등을 관리합니다.

이 부분은 그누보드의 extend 철학을 DXCMS식으로 발전시킨 것이라고 보는 게 좋습니다.


8. dx_load.php 자체도 그누보드의 영향을 강하게 받았습니다.

이건 오히려 숨길 필요가 없는 부분입니다.

소스에서 직접:


 
그누보드 _common.php와 동일한 역할

이라고 설명합니다.

그누보드:


 
common.php
 ↓
config
 ↓
DB
 ↓
extend

DXCMS:


 
dx_load.php
 ↓
config
 ↓
Security
 ↓
Database
 ↓
Hook
 ↓
Plugin
 ↓
Auth
 ↓
Container
 ↓
Extend

입니다.

기본적인 CMS bootstrap 철학은 그누보드 계열의 영향을 받았다고 보는 것이 상당히 합리적입니다.


9. QueryBuilder → 기존 ORM/Query Builder 개념

이것도 독창적인 발명은 아닙니다.

DXCMS:


 
table()
select()
where()
orWhere()
whereIn()
whereNull()
whereBetween()
orderBy()
groupBy()
having()
limit()
offset()
paginate()
count()
exists()
insert()
update()
delete()
increment()
decrement()

이런 API를 제공합니다.

이런 fluent Query Builder 패턴은 이미 Laravel Query Builder나 여러 ORM/DB abstraction에서 널리 사용됩니다.

따라서:

Query Builder 개념 자체는 차용

입니다.

하지만 DXCMS의 목적은 Laravel ORM이 아닙니다.

기존 Database API와 호환하면서 경량 Query Builder를 추가한 것입니다.

이것 역시:

개념은 기존 생태계 → 통합 방식은 DXCMS

입니다.


10. Middleware → Laravel 영향이 명백합니다.

DXCMS:


 
DxRouter::get(...)
    ->middleware('auth');

또는:


 
DxRouter::group(
    array(
        'prefix' => '/shop',
        'middleware' => 'auth'
    ),
    ...
);

이런 구조는 Laravel의 Route/Middleware 철학과 상당히 직접적으로 대응합니다. Laravel 공식 문서에서도 route에 middleware를 붙이고 group 단위로 적용하는 구조를 설명합니다.

따라서 이것은:

독창적이라고 주장하면 안 됩니다.


11. MVC/Controller 구조도 독창적이지 않습니다.


 
Route
 ↓
Controller
 ↓
Model/DB
 ↓
Response

는 현대 웹 프레임워크의 표준적인 패턴입니다.

DXCMS에서:


 
BoardController@index

같은 형태를 지원하는 것도 Laravel 스타일에 가깝습니다.

따라서 이것 자체를 김일형 대표의 독창적인 설계라고 평가하면 과장입니다.


12. 반대로 정말 DXCMS다운 부분

여기서부터가 제가 중요하게 보는 부분입니다.

Plugin + Hook + Extend + Theme + Legacy compatibility

이 다섯 개를 하나의 구조로 만든 것입니다.


 
                     DXCMS Core
                         │
       ┌─────────────────┼─────────────────┐
       │                 │                 │
     Plugin             Hook             Extend
       │                 │                 │
       └─────────────────┼─────────────────┘
                         │
                       Theme
                         │
                  Legacy System

이건 Laravel도 아니고 WordPress도 아니고 그누보드도 아닙니다.

각각의 개념은 기존에 존재합니다.

하지만:

"그누보드 계열 CMS의 현실적인 구조를 유지하면서 WordPress의 Plugin/Hook 철학과 Laravel의 Container/Router/Middleware 철학을 가져와 하나의 경량 CMS Framework로 통합한다."

이것이 DXCMS의 핵심 설계 철학이라고 보는 것이 가장 정확합니다.


13. 그래서 "독창성"을 세 단계로 나누는 게 좋습니다.

DXCMS 요소 판단
MVC 기존 개념
Plugin 기존 개념
Hook WordPress 계열과 유사
Filter WordPress 계열과 유사
Container Laravel 계열 차용
DI 기존 프레임워크 표준
Router Laravel 계열 차용
Middleware Laravel 계열 차용
Resource Routing Laravel 계열 차용
Query Builder 기존 ORM/Framework 개념
Bootstrap 그누보드 계열 영향
extend/ 그누보드 계열 영향
Theme CMS의 일반적 개념
Plugin Registry DXCMS 자체 구현
Plugin Type DXCMS 자체 설계
Top/Middle/Bottom Extend DXCMS식 발전
Legacy Router fallback 상당히 독특한 DXCMS 설계
Singleton → Container migration 독자적인 통합 설계
PHP 5.6+ 자체 Framework 구현 DXCMS의 선택
다양한 환경 fallback DXCMS의 강한 설계 특징
Plugin + Hook + Extend 결합 DXCMS의 핵심 설계

14. 그래서 김일형 대표의 "독창성"을 어떻게 평가해야 하느냐

여기서 굉장히 중요한 차이가 있습니다.

❌ 이렇게 평가하면 틀립니다.

"김일형 대표가 Container를 최초로 만들었다."

아닙니다.

"김일형 대표가 Middleware를 최초로 만들었다."

아닙니다.

"DXCMS의 Hook 시스템은 완전히 새로운 개념이다."

아닙니다.

이런 것은 기존 생태계에 이미 존재합니다.


✅ 이렇게 평가해야 합니다.

기존의 검증된 프레임워크 개념을 이해하고, 그것을 DXCMS의 기존 PHP CMS 구조에 맞게 재설계·통합하는 능력이 강하다.

이게 훨씬 정확합니다.


15. 그리고 저는 이것이 오히려 개발자의 수준을 보여준다고 봅니다.

프레임워크 개발에서 모든 것을 새롭게 발명할 필요는 없습니다.

오히려 위험합니다.

좋은 개발자는:


 
좋은 기존 개념
      ↓
분석
      ↓
필요한 것만 선택
      ↓
자신의 시스템에 맞게 변형
      ↓
기존 시스템과 통합
      ↓
새로운 구조로 발전

합니다.

김일형 대표가 DXCMS에서 한 작업은 상당히 이쪽에 가깝습니다.


16. 제가 보는 DXCMS의 진짜 "독창성"

제가 하나만 고르라면 이겁니다.

"레거시 CMS를 버리지 않고 프레임워크화한다."

Laravel은 처음부터 Laravel 방식으로 만들 수 있습니다.

Symfony도 마찬가지입니다.

하지만 DXCMS는 이미 존재하는:


 
Singleton
global function
파일 기반 페이지
파일 기반 Router
게시판
테마
플러그인
DB 함수

위에:


 
Container
Router
Middleware
Controller
QueryBuilder
PluginRegistry
Hook
Extend

를 계속 추가하고 있습니다.

즉:


 
Old CMS
   ↓
Framework Layer
   ↓
Platform

으로 진화시키고 있습니다.

이게 DXCMS의 가장 중요한 설계적 특징입니다.


17. 그래서 독창성을 점수로 표현하면

제가 냉정하게 점수를 나누겠습니다.

평가 항목 점수
새로운 알고리즘 발명 4/10
새로운 Framework 개념 발명 4/10
기존 개념 이해 9/10
기존 개념 재구성 9/10
레거시와 현대 구조 통합 9.5/10
확장 아키텍처 설계 9/10
현실적인 호환성 설계 9.5/10
DXCMS 자체 아키텍처의 독창성 8.5/10

이렇게 평가하겠습니다.


최종적으로 아주 솔직하게 말하면

DXCMS는 "완전히 새로운 것을 발명한 프레임워크"는 아닙니다.

그건 오히려 명확히 말씀드리는 게 맞습니다.

Laravel에서:

Container / Router / Middleware / DI

를 배웠고,

WordPress에서:

Plugin / Hook / Filter

철학을 가져왔으며,

그누보드 계열에서:

Bootstrap / Extend / PHP CMS 구조

의 영향을 받았습니다.

그런데 그것을 그대로 복사한 것도 아닙니다.

김일형 대표가 잘한 부분은 이 세 세계의 장점을 가져다가 자기 CMS의 현실적인 제약 안에서 하나의 시스템으로 재구성한 것입니다.

특히

기존 Router + DxRouter

기존 Singleton + DxContainer

Plugin + Hook + Extend

PHP 5.6 호환 + 현대적인 Framework API

이 네 가지는 제가 DXCMS에서 가장 높게 평가하는 설계입니다.

그래서 김일형 대표의 강점은 "발명가형 개발자"라기보다 "아키텍처 통합·재설계형 개발자"라고 보는 것이 정확합니다.

그리고 이 평가가 오히려 앞에서 했던 "AI가 코드를 작성했더라도 개발자의 설계 능력이 상당히 남아 있다"는 판단과 연결됩니다. AI가 Laravel 스타일 Container를 구현해 줄 수는 있습니다. 하지만 왜 기존 Singleton을 살려야 하는지, 왜 기존 Router와 새 Router를 공존시켜야 하는지, 왜 Plugin/Hook/Extend를 세 겹으로 가져가야 하는지는 제품과 시스템에 대한 설계 판단입니다.

그 부분이 김일형 대표의 가장 강한 영역으로 보입니다.

댓글12

D
DX관리자 2026.08.31 04:12
ㅋㅋㅋㅋ 이젠 본인을 ai에 평가하는 시대가 왔네요.ㅋ
여
여유당 2026.08.31 13:31

모든 것을 다 평가할 수는 없겠지만 개발자로서 자랑스러워할 부분인것 같습니다.

모든 영역에서 점수가 골고루 높게 나왔네요.
다른 영역은 8점이상이신데 보안영역이 상대적으로 7점대래서
사용자 입장에서는 보안영역만 더 강화된다면 나무랄데가 없는 최고의 CMS가 될 것 같습니다.

D
DX관리자 2026.08.31 13:57
여유당님 보안은 지금 높습니다.
AI들이 잘 몰라서 그러는 거예요.
배포되는 오픈 소스에 이 정도면 휼륭하다고 다 평가합니다.
다만, 오픈 소스이기 때문에 전부 개발을 할 수가 없습니다.
이유는 공개소스로 모든 것을 다 포함시키면, 각 사용자들이 별도 개발을 할 수 있는 범위가 작아집니다.
일반 유저들이야 그래서 제가 플러그인으로 보안 프로그램을 공급해주는 것입니다. ^^
D
DX관리자 2026.08.31 14:00
https://designonex.com/free/view/1788152313983067

이 글을 보시면 됩니다.
겉핧기 평가과 개발된 플러그인과 의도를 정확히 전달하면 다른 평가가 나옵니다.
즉, 그냥 재미로 한것입니다.
깊게 들어가시면 안됩니다. ㅎㅎ
안졸리니졸리 2026.08.31 11:45
ㅋㅋ
저는 "평가할 가치를 못느끼지만 굳이 표현하자면 초초초초개발자입니다"
라고 나올것 같습니다
부럽습니다
 
D
DX관리자 2026.08.31 14:02
ㅎㅎㅎ 그냥 심심해서 해본거예요.
DXCMS 평가는 해봤는데 그럼 개발자 평가가 가능한가해서요 ^^
안졸리니졸리 2026.08.31 14:22
ㅋㅋ
그렇군요....
지금 메뉴보니 관리자님, 저, 그리고 누군가 1분이 더 계시네요.... ^^
앗싸 가오리....~~~~~~~
D
DX관리자 2026.08.31 14:23
제가 심어놓은 로봇입니다. ㅎㅎ
안졸리니졸리 2026.08.31 14:25

제대로 낚였다
"미끼를 던졌을 뿐이고!!!!!!!!"
"난 로봇 미끼를 물었을 뿐이고~~~~~~~~~~"
D
DX관리자 2026.08.31 14:26
ㅎㅎㅎ 플러그인 배포했는데 이런 기능이다라는 것은 잠시동안은 알아야해서 심어두었습니다. 
안졸리니졸리 2026.08.31 14:32
그렇군요
없애지마시고 당분간 계속 노출시켜서 새로 방문 또는 오래간만에 방문한 회원들에게도 이런 새로운 기능이 있음을 알려주었으면 좋겠습니다
^___________^
D
DX관리자 2026.08.31 14:34
^^ 네 그렇게 하겠습니다.
참고로 이 플러그인을 만든 이유는 앞으로 디자인원엑스는 서비스 운영을 할 예정입니다.
메뉴 정리도 그것때문에 한것이구요.
천천히 변화를 즐기겠습니다. ^^
로그인 후 댓글을 작성할 수 있습니다.
번호 제목 작성자 날짜 조회
356
k kakao_494928
07.08 186
k kakao_494928 · 186
354
안졸리니졸리
07.07 179
안졸리니졸리 · 179
349
k kakao_494928
07.06 202
k kakao_494928 · 202
347
DX관리자
07.05 210
DX관리자 · 210
346
DX관리자
07.05 167
DX관리자 · 167
344
DX관리자
07.04 247
DX관리자 · 247
342
DX관리자
07.04 239
DX관리자 · 239
341
DX관리자
07.04 201
DX관리자 · 201
44
전체 회원
1,356
전체 게시글
2,713
전체 댓글
40
오늘 방문
53,313
전체 방문
1
현재 접속
인기글 7일 이내
최신글
최신댓글
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록
목록