sgcHTML vs UniGUI, TMS WEB Core, IntraWeb: Delphi 웹 프레임워크 선택 가이드

· 컴포넌트

Delphi 팀이 비즈니스 애플리케이션을 브라우저에서 제공해야 할 때 항상 같은 질문이 먼저 나옵니다: 어떤 웹 프레임워크를 사용할 것인가? 2026년 현재 Delphi 네이티브 옵션은 다섯 가지입니다: IntraWeb, UniGUI, TMS WEB Core, TMS XData, 그리고 sgcHTML. 각각은 문제를 다르게 해결하며, 각각 다른 상황에서 빛을 발합니다. 이 글에서는 각 옵션을 솔직하게 살펴본 후 sgcHTML이 뚜렷한 장점을 제공하는 경우를 설명합니다.

IntraWeb — 최초의 Delphi 웹 프레임워크

IntraWeb은 2001년부터 존재해 왔습니다. 기본 모델은 간단합니다: VCL 폼을 서버 측에서 HTML로 렌더링합니다. Delphi 폼을 안다면 IntraWeb 페이지를 만들 수 있습니다. 상태는 서버에 저장되고, 브라우저는 기본적으로 얇은 디스플레이 계층 역할을 합니다. 동시 사용자 수가 적당한 내부 도구에서는 이 방식이 아직도 잘 작동합니다.

IntraWeb이 어려움을 겪는 부분은 테마 적용과 현대적인 레이아웃입니다. IntraWeb은 Bootstrap과 flexbox 이전 시대에 설계된 자체 HTML과 CSS를 생성합니다. 반응형, 모바일 친화적인 페이지를 만들려면 상당한 CSS 재정의 작업이 필요합니다. 생성된 마크업은 장황하고 현대적인 디자인 시스템과 통합하기 어렵습니다. IntraWeb은 또한 완전히 상태 유지 방식입니다: 각 사용자는 방문하는 동안 서버 측 세션 객체를 보유하므로 수평적 확장성이 제한됩니다.

UniGUI — 성숙하고 기능이 풍부한 상태 유지 방식

UniGUI는 가장 기능이 완전한 Delphi 웹 프레임워크입니다. 컴포넌트 팔레트가 방대하며(그리드, 차트, 트리, 지도, 파일 업로드, 리치 텍스트 편집기, 터치 지원), 테마 시스템도 성숙되어 있습니다. 내부적으로는 Sencha ExtJS를 사용하며, 이는 네이티브 데스크탑 품질에 가까운 세련된 인터페이스를 생성하는 강력한 JavaScript 컴포넌트 라이브러리입니다.

단점은 복잡성과 상태 유지 아키텍처입니다. UniGUI 세션은 서버에 전체 컴포넌트 상태를 보유합니다. 동시 사용자가 많은 애플리케이션은 상당한 메모리와 신중한 세션 관리가 필요합니다. ExtJS 계층은 강력하지만 Bootstrap이 아니기 때문에, Bootstrap을 아는 신규 입사자는 별도의 어휘를 익혀야 합니다. 라이선스는 개발자별, 서버별로 부과되며, 클라우드 배포에서는 서버별 라이선스 비용이 중요하게 작용합니다.

TMS WEB Core — JavaScript로 컴파일되는 클라이언트 측 Pascal

TMS WEB Core는 정반대의 접근 방식을 취합니다: WebAssembly 지원 컴파일러를 사용하여 Object Pascal 애플리케이션을 JavaScript로 컴파일합니다. 결과물은 브라우저에서 완전히 실행되며, Delphi 폼 이벤트가 JavaScript 이벤트로 발생합니다. UI는 Bootstrap 또는 Material Design을 사용하고, TMS WEB Core는 점점 늘어나는 시각적 컴포넌트 세트를 제공합니다.

이것은 진정으로 영리한 기술이며, 특히 오프라인 기능이나 매우 낮은 서버 부하가 필요한 독립형 브라우저 애플리케이션 같은 특정 사용 사례에서 잘 작동합니다. 제한은 배포 모델입니다. 컴파일된 출력은 정적 JavaScript 파일과 에셋 집합으로, 빌드, 버전 관리, 서빙이 필요합니다. 기능을 추가하면 클라이언트 번들을 다시 빌드하고 재배포해야 합니다. 이전에는 서버에 안전하게 있던 비즈니스 로직이 이제 브라우저에서 실행되므로, 민감한 계산에 대한 보안 문제가 제기됩니다. 기존 Delphi 서버 측 컴포넌트(TsgcWebSocketClient, FireDAC 연결)와 통합하려면 아키텍처 작업이 필요합니다. 컴파일된 JavaScript는 네이티브 Delphi 유닛을 직접 호출할 수 없기 때문입니다.

TMS XData — 웹 UI 프레임워크가 아닌 REST 백엔드

TMS XData는 웹 UI 프레임워크와 자주 비교되기 때문에 언급할 가치가 있지만, 실제로는 그렇지 않습니다. XData는 OpenAPI 3.0과 JSON을 사용하여 Delphi 서비스 클래스에서 REST API를 생성합니다. 프론트엔드는 별도로 구축해야 합니다. TMS WEB Core, React, Angular 또는 HTTP를 사용하는 무엇이든 가능합니다. XData는 자신이 하는 일을 훌륭하게 수행합니다. 단지 브라우저 인터페이스를 원할 때 별도의 프론트엔드 기술의 필요성을 없애주지는 않습니다.

sgcHTML — 표준 Bootstrap 5 기반 서버 측 컴포넌트

sgcHTML은 위의 모든 것과 다른 위치를 취합니다. 출력이 표준 Bootstrap 5 HTML인 서버 측 컴포넌트 라이브러리입니다. 컴포넌트 자체는 Delphi 클래스(TsgcHTMLComponent_Chart, TsgcHTMLComponent_DataTable 등)이며, 속성을 통해 구성하고 HTML 문자열을 읽습니다. 그 문자열이 HTTP 응답에 포함됩니다. 브라우저는 Bootstrap을 사용하여 렌더링합니다. htmx(14 KB 라이브러리, 빌드 단계 없음)가 상호작용을 처리합니다: 클릭과 폼 제출이 Delphi 핸들러로 반환되고, 핸들러는 HTML 프래그먼트로 응답하며, htmx가 페이지의 해당 섹션을 교체합니다.

아키텍처는 무상태입니다. 각 요청은 필요한 것을 구축하고 HTML을 반환한 후 완료됩니다. 서버에 유지해야 할 사용자별 세션 컴포넌트 트리가 없습니다. 수평적 확장은 간단합니다: 동일한 .exe의 두 인스턴스 앞에 로드 밸런서를 놓기만 하면 됩니다.

나란히 비교

기능 IntraWeb UniGUI TMS WEB Core sgcHTML
아키텍처 상태 유지 서버 측 폼 상태 유지 ExtJS 세션 클라이언트 측 Pascal→JS 무상태 서버 측 HTML
출력 마크업 독점 HTML + CSS ExtJS JSON/HTML 표준 Bootstrap 표준 Bootstrap 5
상호작용 전체 페이지 리로드 또는 AJAX ExtJS AJAX 브라우저에서 실행 htmx 프래그먼트 + WebSocket
실시간 WebSocket 푸시 없음 (애드온 필요) 제한적 JS WebSocket API를 통해 예 — 일급 지원 (sgcWebSockets)
확장성 세션 상태로 제한 세션 상태로 제한 무상태 (정적 파일) 무상태, 수평적
작성해야 할 JavaScript 없음 최소 없음 (Pascal에서 컴파일) 없음
npm / Node.js 필요 아니오 아니오 예 (빌드 단계) 아니오
단일 바이너리 배포 아니오 (JS 번들 + 에셋)
DataSet 바인딩 JS 브리지를 통해 예 (직접 TDataSet/TDataSource)
UI 컴포넌트 수 ~40 80+ 50+ 60+
모바일/반응형 부분적 예 (ExtJS Touch) 예 (Bootstrap) 예 (Bootstrap 5)
.NET 에디션 아니오 아니오 아니오 예 (.NET 6+)

sgcHTML이 명확한 장점을 갖는 경우

실시간 대시보드. sgcHTML은 sgcWebSockets 위에 구축되어 있기 때문에, HTML 페이지를 제공하는 동일한 서버가 WebSocket 연결도 처리합니다. 주가 업데이트, 새로운 센서 수치, 또는 완료된 생산 실행은 단일 Broadcast 호출로 연결된 모든 브라우저 탭에 HTML 프래그먼트를 푸시할 수 있습니다. 폴링 없이, 별도의 푸시 인프라 없이, 추가 라이선스 없이. IntraWeb과 UniGUI 모두 추가 통합 작업이 필요한 제한적인 WebSocket 지원을 갖추고 있습니다. TMS WEB Core는 브라우저의 네이티브 WebSocket API를 사용할 수 있지만 수신 메시지를 처리하기 위한 클라이언트 측 JavaScript 로직이 필요합니다.

커스터마이징 오버헤드 없는 표준 마크업. 출력이 Bootstrap 5 HTML이기 때문에, Bootstrap을 아는 디자이너라면 누구나 스타일을 적용할 수 있습니다. 테마는 표준 Bootstrap 테마입니다. 수백 개의 무료 및 유료 테마가 존재하며 즉시 적용됩니다. IntraWeb과 UniGUI는 별도의 스타일링 시스템을 배워야 하는 프레임워크 전용 마크업을 생성합니다.

무상태 및 수평적 확장 가능. 각 sgcHTML 요청은 독립적입니다. 서버에 사용자별 세션 객체가 없습니다. 동일한 실행 파일의 두 로드 밸런싱된 인스턴스가 요청을 상호 교환적으로 처리합니다. IntraWeb과 UniGUI는 세션을 보유한 특정 서버 인스턴스로 요청을 라우팅해야 하므로 클라우드 배포가 복잡해집니다.

단일 실행 파일 배포. Bootstrap CSS, Chart.js, htmx는 Delphi 바이너리 안에 내장된 리소스입니다. sgcHTML 배포는 하나의 .exe를 복사하는 것을 의미합니다. TMS WEB Core는 JavaScript 번들과 에셋 세트를 생성하며, 이는 버전 관리와 별도 서빙이 필요합니다.

빌드 체인 없음. npm도, webpack도, Babel도, Node.js도 없습니다. Delphi 프로젝트를 컴파일하고 배포하면 됩니다. 이는 Node.js 툴체인 설치에 IT 승인이 필요한 규제 환경과 온프레미스 배포에서 매우 중요합니다.

직접 코드 비교: 데이터 그리드

차이를 구체적으로 보여주기 위해, sgcHTML에서 FireDAC 쿼리로 검색 가능하고 페이지네이션된 데이터 그리드를 렌더링하는 방법을 소개합니다:

uses
  sgcHTML_Component_DataTable;

var
  oTable: TsgcHTMLComponent_DataTable;
begin
  oTable := TsgcHTMLComponent_DataTable.Create(nil);
  oTable.PageBuilder  := oPage.PageBuilder;
  oTable.Section      := 'data';
  oTable.Title        := 'Customers';
  oTable.ShowSearch   := True;
  oTable.ShowExport   := True;
  oTable.LoadFromDataSet(fdqCustomers, 25); // 25 rows per page
  // Read oTable.HTML and include it in your response
end;

결과는 정렬 표시기, 검색 박스, 내보내기 버튼이 있는 반응형, 검색 가능, 페이지네이션된 Bootstrap 테이블입니다. 브라우저는 초기 페이지에 대한 추가 서버 왕복 없이 렌더링합니다. 필터링과 페이지네이션은 htmx를 사용하여 전체 페이지가 아닌 테이블 프래그먼트만 교체합니다.

대안을 선택해야 할 때

sgcHTML이 항상 올바른 선택은 아닙니다. 수백 개의 폼과 잘 정립된 테마 시스템을 갖춘 대규모 기존 IntraWeb 또는 UniGUI 애플리케이션이 있다면 마이그레이션은 거의 의미가 없습니다. UniGUI는 Excel에 필적하거나 능가하는 깊은 그리드 기능(고정 열, 셀 편집기, 행 그룹화, 피벗)이 필요하거나, 파워 유저 백오피스 도구에 ExtJS의 세련된 완성도를 원할 때 더 나은 선택입니다. TMS WEB Core는 서버 없이 브라우저에서 오프라인으로 실행되는 애플리케이션이 필요하거나, 단일 페이지 애플리케이션을 CDN을 통해 정적 파일로 배포하고 싶을 때 올바른 선택입니다.

sgcHTML이 가장 강력한 선택인 경우:

sgcHTML 체험하기

60개 이상의 모든 컴포넌트와 기능 제한 없이 무료 체험판을 esegece.com/products/sgchtml/download에서 이용할 수 있습니다. 다운로드에는 네 가지 작동하는 데모 애플리케이션(ERP, Admin Console, Live Monitor, Customer Portal)이 포함되어 있으며, 실제 시나리오에서 컴포넌트 팔레트를 보여줍니다.

질문이 있거나 특정 기존 프로젝트와 비교하고 싶으신가요? 문의하기. 코드를 작성한 담당자에게 직접 답변을 받으실 수 있습니다.