WiRL 및 WebBroker
Source: Dev.to

WebBroker 소개
WebBroker는 아마도 Embarcadero(당시에는 Borland)에서 개발한 최초의 기술로, Web 프로그래밍을 Delphi와 통합하려고 시도했습니다. 이 시스템은 TWebModule 컴포넌트(특수한 형태의 DataModule)를 기반으로 하며, 개별 호출을 라우팅할 수 있습니다. 이 작업을 수행하기 위해 두 가지 방법으로 동작할 수 있습니다:
- WebAction – WebModule을 더블 클릭하면 팝업 창이 열리고 하나 이상의 WebAction을 생성할 수 있습니다; 각 액션마다 HTTP 요청(메서드, URL 등)과 매치하기 위한 기준을 정의하고, 응답을 정의하는 이벤트를 처리할 수 있습니다.
- Dispatcher – 대안으로
IWebDispatch인터페이스를 구현하는 클래스를 작성하고 이를 WebModule에 등록할 수 있습니다.
WiRL 및 WebBroker
WiRL은 이 접근 방식을 사용합니다. 최신 버전에서는 TWiRLDispatcher라는 새로운 컴포넌트가 도입되어 WebBroker에 대한 모든 호출을 WiRL로 전달할 수 있게 되었습니다.
디스패처는 해당 요청을 처리하도록 구성된 WiRL 엔진이 존재하는지 확인합니다. 존재한다면 엔진에 응답 처리를 요청하고, 그렇지 않으면 WebBroker에 처리할 수 없음을 알립니다. 이 경우 WebBroker는 다른 디스패처나 구성된 WebAction을 시도합니다.
코드 관점에서 보면, 일반적인 WebBroker 애플리케이션을 생성해야 합니다(예: 마법사 사용: File → New → Others → Web → Web Server Application) 그리고 TWiRLServer와 TWiRLDispatcher를 인스턴스화합니다.
interface
uses
// .............
WiRL.http.Server,
WiRL.http.Server.WebBroker;
type
TMainWebModule = class(TWebModule)
private
FWiRLServer: TWiRLServer;
FDispatcher: TWiRLDispatcher;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
var
WebModuleClass: TComponentClass = TMainWebModule;
implementation
{$R *.dfm}
constructor TMainWebModule.Create(AOwner: TComponent);
begin
inherited;
FWiRLServer := TWiRLServer.Create(Self);
FWiRLServer.AddEngine('/rest')
.SetEngineName('RESTEngine')
.AddApplication('/app')
.SetResources('*')
.SetFilters('*');
FWiRLServer.Active := True;
// È fondamentale che l'owner dei dispatcher sia Self, che deriva da TWebModule
// In questo modo il dispatcher viene automaticamente registrato sul WebModule
FDispatcher := TWiRLDispatcher.Create(Self);
FDispatcher.Server := FWiRLServer;
end;
WebBroker와 WiRL의 장점과 단점
장점
- 기존 WebBroker 애플리케이션에 REST 서비스를 통합할 수 있음.
- WebBroker가 지원하는 아키텍처(Apache 모듈, ISAPI, CGI, FastCGI(Delphi 13에서 도입), Standalone)를 사용한 통합 애플리케이션 생성.
- WebBroker 고유 기능 사용: 네이티브 로깅 및 세션.
단점
- WebBroker 사용으로 인한 복잡성 증가.
- SSE(Server‑Sent Events) 및 chunked transfer encoding과 같은 일부 기능이 없음.
개인적인 조언: 새로운 프로젝트에서는 WiRL을 Indy 기반 전통 아키텍처로 사용하는 것이 바람직합니다. 다만 기존 WebBroker 애플리케이션에 REST 서비스를 통합해야 하거나 WebBroker가 지원하는 아키텍처(Apache 모듈, ISAPI, CGI, FastCGI) 중 하나를 활용해야 할 경우는 예외입니다. Indy 접근 방식은 설정 및 관리가 더 간단하며, WiRL의 모든 기능을 완전히 지원합니다.