# Five 기술 수준 평가 및 상업화 단계 분석 **Date:** 2026-04-08 **Author:** Charles KWON OhJun **For:** Google Go Team / 회장님 프레젠테이션 --- ## 1. Five는 무엇인가 Five는 **Harbour(xBase) 코드를 네이티브 Go 바이너리로 변환하는 퓨전 언어**다. 단순 포팅이 아니라, Harbour의 30년 비즈니스 로직 자산을 Go의 성능, 동시성, 크로스 플랫폼 배포 위에 올리는 프로젝트. ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Harbour PRG │ ──→ │ Five 컴파일러 │ ──→ │ Go 바이너리 │ │ (비즈니스 │ │ (PRG → Go │ │ (단일 실행파일 │ │ 로직 30년) │ │ 소스 생성) │ │ 크로스플랫폼) │ └──────────────┘ └──────────────┘ └──────────────┘ ``` --- ## 2. 프로젝트 규모 | 항목 | 수치 | |------|------| | **Go 프로덕션 코드** | 35,534 LOC | | **Go 테스트 코드** | 11,190 LOC (24%) | | **RTL 내장 함수** | 400개 | | **컴파일러 서브시스템** | 8개 (lexer, parser, analyzer, pp, ast, gengo, genpc, token) | | **RDD 드라이버** | 4종 (DBF, NTX, CDX, Memory) | | **PRG 테스트 프로그램** | 125개 | | **기술 문서** | 29개 MD 파일 | | **Git 커밋** | 65 (2026년 집중 개발) | | **FiveSql2 SQL 엔진** | 10,458 LOC (14 PRG 파일) — Five 위에서 구동 | --- ## 3. 기술 수준 평가 ### 3.1 컴파일러 (Compiler) — 성숙 | 기능 | 상태 | 비고 | |------|------|------| | 전처리기 (#include, #define) | ✅ 완성 | Harbour 호환 | | 렉서/파서 | ✅ 완성 | 전체 Harbour 문법 | | AST 분석기 | ✅ 완성 | 변수 스코프, 타입 추론 | | Go 코드 생성 (gengo) | ✅ 완성 | 인라인 최적화 포함 | | Pcode 생성 (genpc) | ✅ 완성 | FRB 바이너리 모듈 | | Short-circuit AND/OR | ✅ 완성 | 이번 세션에서 수정 | | 코드 블록 클로저 캡처 | ✅ 완성 | 외부 변수 자동 캡처 | | FOR..NEXT LOOP 의미론 | ✅ 완성 | goto 라벨 방식 | | CLASS/METHOD/INHERIT | ✅ 완성 | 단일/다중 상속 | | STATIC 변수 | ✅ 완성 | 모듈 레벨 | | 매크로 컴파일 (&) | ⚠️ 부분 | 기본 동작, 복잡한 패턴 미완 | | @byref 참조 전달 | ⚠️ 구현 중 | RefCell 설계 완료, 통합 진행 중 | ### 3.2 런타임 (VM) — 고성능 | 기능 | 상태 | 성능 | |------|------|------| | 24바이트 Tagged Value | ✅ | Harbour 32B 대비 25% 절약 | | 스택 기반 VM | ✅ | push/pop + fused opcodes | | BEGIN SEQUENCE / RECOVER | ✅ | Go recover() 기반 | | ErrorBlock 에러 핸들링 | ✅ | Harbour 호환 | | Goroutine 확장 | ✅ | GO BLOCK, CHANNEL | | 대화형 디버거 | ✅ | TUI + CLI 모드 | | FRB 동적 모듈 로딩 | ✅ | 런타임 심볼 해석 | | GC 최적화 | ✅ | COW 레코드, 소형 객체 풀 | **벤치마크 (Intel Core Ultra 7 255H):** | 연산 | Five | 비고 | |------|------|------| | MakeInt | 12ns | Zero alloc | | AddInt | 26ns | Zero alloc | | TypeCheck | 0.38ns | 비트 시프트 1회 | | Function call | ~50ns | Frame + EndProc | ### 3.3 RTL 표준 라이브러리 — 광범위 400개 함수, Harbour 700+ 대비 약 57% 커버리지. | 카테고리 | 함수 수 | 예시 | |----------|---------|------| | 문자열 | 50+ | Str, Val, SubStr, AllTrim, Upper, Lower, PadR, At, RAT | | 배열 | 30+ | AAdd, ASize, AScan, ASort, ADel, AIns, AClone | | 날짜/시간 | 20+ | Date, DToS, SToD, Day, Month, Year, Seconds | | 파일 I/O | 20+ | FOpen, FRead, FWrite, FClose, MemoRead, MemoWrit | | 데이터베이스 | 40+ | dbUseArea, dbGoTop, dbSkip, FieldGet, FieldPut, dbSeek | | 수학 | 15+ | Abs, Int, Round, Sqrt, Log, Exp, Max, Min | | 변환 | 15+ | ValType, hb_ValToExp, hb_CStr, hb_Ntos | | 콘솔 | 10+ | QOut, QQOut, Inkey, Row, Col | | 에러 | 5+ | ErrorBlock, ErrorNew, Break | | 해시 | 10+ | hb_Hash, hb_HHasKey, hb_HGet, hb_HSet | ### 3.4 RDD (데이터베이스 엔진) — 실전 수준 | 드라이버 | 상태 | 벤치마크 (10K rows) | |----------|------|-------------------| | **DBFNTX** | ✅ 완성 | APPEND: 227ms, SEEK: 29ms, SCAN: 1ms | | **DBFCDX** | ✅ 완성 | Compound index, multi-tag | | **MEMRDD** | ✅ 완성 | In-memory 테스트용 | | dbCreate/USE/CLOSE | ✅ | | | dbAppend/Delete/Pack | ✅ | PACK: 9,149ms (최적화 여지) | | INDEX ON / dbSeek | ✅ | B-tree 검색 | | SET DELETED ON/OFF | ✅ | 소프트 삭제 | | Record locking | ⚠️ 스텁 | dbRLock/dbRUnlock 존재, 실제 잠금 미구현 | ### 3.5 FiveSql2 — Five 위에서 동작하는 SQL 엔진 **10,458줄의 순수 Harbour PRG로 작성된 완전한 SQL 엔진.** Five의 언어 기능 전체를 검증하는 리트머스 테스트. | SQL 기능 | 테스트 | 상태 | |----------|--------|------| | SELECT / WHERE / ORDER BY | 12 | ✅ ALL PASS | | GROUP BY / HAVING / DISTINCT | 3 | ✅ ALL PASS | | INSERT / UPDATE / DELETE | 3 | ✅ ALL PASS | | WITH (CTE) Non-Recursive | 6 | ✅ ALL PASS | | WITH RECURSIVE | 4 | ✅ ALL PASS | | Window Functions (ROW_NUMBER, RANK, LAG, LEAD, SUM OVER) | 12 | ✅ ALL PASS | | CHECK / UNIQUE / FK 제약 | 8 | ✅ ALL PASS | | MERGE / UPSERT | 3 | ✅ ALL PASS | | Combined CTE+Window+JOIN | 5 | ✅ ALL PASS | | **총계** | **43/43** | **100%** | **SQL 성능 (100 rows, ext4):** | 쿼리 | 시간 | 수준 | |------|------|------| | SELECT * | 0.8ms | 실용 | | WHERE filter | 1.6ms | 실용 | | GROUP BY HAVING | 3.0ms | 실용 | | INNER JOIN (100x200) | 8.0ms | Hash Join 적용 | | Window Function | 1.5~5ms | 실용 | | CTE + Window + JOIN | 18ms | 최적화 여지 있음 | --- ## 4. 경쟁 제품 비교 ### 4.1 Harbour → 다른 언어 변환기 | 프로젝트 | 방식 | 타겟 | 상태 | |----------|------|------|------| | **Five** | PRG → Go source → native binary | Go | **활발 개발, 43/43 SQL pass** | | xHarbour | C 기반 인터프리터 | C binary | 유지보수 모드 | | Harbour Core | C 기반 인터프리터 | C binary | 커뮤니티 유지 | | LetoDB | 네트워크 RDD | C client/server | 특수 목적 | **Five의 차별점:** - 유일한 **Go 네이티브** 타겟 — 단일 바이너리, 크로스 컴파일 - 유일한 **goroutine/channel** 통합 — Harbour 코드에서 직접 Go 동시성 사용 - 유일한 **SQL 엔진** — DBF 위에서 SQL:1999 표준 쿼리 ### 4.2 xBase 시장 규모 전 세계 xBase/Clipper/dBASE 레거시 코드베이스: - 추정 **수억 줄** 의 비즈니스 로직 (금융, 유통, 제조, 정부) - 한국: 대기업 ERP, 은행 시스템, 정부 시스템에 Clipper/FoxPro 기반 다수 - 브라질: Harbour 최대 시장 — 수천 기업이 Harbour로 운영 - 유럽: 독일, 스페인, 이탈리아에 xBase 기반 기업 소프트웨어 다수 이들에게 **현대화 경로** 가 없다: - C → Go 포팅? 수년, 수백만 달러 - 전체 재작성? 비즈니스 로직 손실 위험 - **Five? 기존 코드 그대로 컴파일 → Go 바이너리** ← 이것 --- ## 5. 상업화 단계 분석 ### 5.1 현재 위치: **Late Alpha → Early Beta** ``` ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ PoC │ → │ Alpha │ → │ Beta │ → │ RC │ → │ GA │ │ 개념증명 │ │ 핵심기능 │ │ 안정화 │ │ 릴리스 │ │ 상용 │ │ │ │ 완성 │ │ + 최적화│ │ 후보 │ │ 출시 │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ ▲ 현재 위치 (Alpha 후반) ``` **Alpha 완료 기준 달성:** - [x] 전체 Harbour 문법 파싱 - [x] Go 코드 생성 + 네이티브 바이너리 - [x] 400개 RTL 함수 - [x] DBF/NTX/CDX RDD - [x] CLASS/INHERIT - [x] BEGIN SEQUENCE / RECOVER - [x] 실전 규모 프로그램 구동 (FiveSql2: 10,458 LOC) **Beta 진입에 필요한 것:** - [ ] @byref 참조 전달 구현 (P0) - [ ] LOCAL 의미론 확정 (P0) - [ ] go test ALL PASS 유지 (현재 달성) - [ ] Harbour 호환성 테스트 스위트 - [ ] 성능 프로파일링 + 병목 해결 ### 5.2 상업화까지의 거리 | 단계 | 예상 | 필요 작업 | |------|------|----------| | **Beta** (기능 완성) | 1~2개월 | @byref, LOCAL, 호환성 테스트 | | **RC** (릴리스 후보) | +1개월 | 성능 최적화, 문서화, 엣지 케이스 | | **GA 1.0** (상용 출시) | +1개월 | 패키징, 라이선스, 마케팅 자료 | ### 5.3 상업 모델 제안 #### Model A: 개발 도구 라이선스 ``` Five Community Edition — 무료 (오픈소스, 개인/소규모) Five Professional — $499/yr (기술 지원, 상업 라이선스) Five Enterprise — $2,999/yr (우선 지원, 커스텀 RTL, SLA) ``` **타겟:** Harbour/Clipper 코드를 현대화하려는 기업 #### Model B: 마이그레이션 서비스 ``` 코드 분석 리포트 — $5,000 (기존 PRG 코드 호환성 분석) 마이그레이션 지원 — $50,000~$500,000 (규모에 따라) 연간 유지보수 — 마이그레이션 비용의 15% ``` **타겟:** 레거시 시스템 현대화가 급한 대기업 #### Model C: SaaS/PaaS ``` Five Cloud — 클라우드에서 Harbour 앱 실행 Go 바이너리로 컴파일 → 컨테이너 배포 $99/mo 기본, $499/mo 프로 ``` **타겟:** DevOps 역량 없는 중소기업 --- ## 6. 리스크 분석 ### 6.1 기술 리스크 | 리스크 | 심각도 | 대응 | |--------|--------|------| | @byref 미구현 | **높음** | RefCell 설계 완료, 구현 1주 이내 | | Harbour 700+ 함수 중 300+ 미구현 | 중간 | On-demand 구현, 사용 빈도순 | | 매크로 컴파일 제한 | 중간 | 런타임 파서 필요, 복잡도 높음 | | 성능 (JOIN, CTE) | 낮음 | 최적화 계획 수립 완료 | | Record locking | 낮음 | 단일 사용자/프로세스 환경에서는 불필요 | ### 6.2 시장 리스크 | 리스크 | 심각도 | 대응 | |--------|--------|------| | xBase 시장 축소 | 중간 | 레거시 현대화 수요는 오히려 증가 | | Go 생태계 변화 | 낮음 | Go 하위 호환성 보장 정책 | | 경쟁자 출현 | 낮음 | 선점 효과, 기술 장벽 높음 | --- ## 7. 회장님께 보여줄 데모 시나리오 ### Demo 1: "30년 된 코드가 Go 바이너리로" (2분) ```bash # Harbour PRG 파일 (비즈니스 로직) cat employees.prg # Five로 컴파일 → 단일 Go 바이너리 ./five build employees.prg -o employees ls -la employees # 18MB 단일 실행파일 # 실행 ./employees ``` ### Demo 2: "SQL 엔진 — 10,458줄이 그대로 동작" (3분) ```bash # FiveSql2: 순수 Harbour로 작성된 SQL 엔진 ./five build test_sql1999.prg src/*.prg -o sql_test # 43개 SQL:1999 표준 테스트 실행 ./sql_test # → 43/43 ALL PASS (100%) ``` ### Demo 3: "벤치마크" (1분) ```bash ./bench_sql # SELECT *: 0.8ms # JOIN: 8ms (Hash Join) # Window: 1.5ms # CTE: 5.6ms (Recursive) ``` ### Demo 4: "Goroutine in Harbour" (1분) ```harbour // Harbour 코드에서 Go goroutine 직접 사용 PROCEDURE Main() GO BLOCK {|| HeavyTask() } GO BLOCK {|| AnotherTask() } ? "Both running concurrently" RETURN ``` --- ## 8. 결론 ### Five의 현재 수준 > **"Alpha 후반 — 실전 규모 프로그램(10K+ LOC)이 100% 통과하는 유일한 Harbour→Go 트랜스파일러"** ### 상업화 준비도 | 항목 | 점수 (10점 만점) | |------|-----------------| | 기술 완성도 | **7/10** — 핵심 기능 완성, @byref/매크로 남음 | | 성능 | **8/10** — 서브밀리초 쿼리, Hash Join, fused opcodes | | 안정성 | **6/10** — 43/43 통과하나 엣지 케이스 검증 필요 | | 문서화 | **7/10** — 29개 기술문서, 부족한 건 사용자 가이드 | | 시장 준비 | **5/10** — 제품은 있으나 패키징/마케팅 없음 | | **종합** | **6.6/10** | Beta 진입 직전 | ### 한 줄 요약 > **Five는 "Harbour의 30년 비즈니스 로직 + Go의 현대적 성능"을 결합한** > **세계 유일의 실전 검증된 Harbour→Go 퓨전 언어이며,** > **상용화까지 약 3개월의 안정화 작업이 남아있다.**