오류 처리 및 테스트 기능이 부족한 RequestFactory (GWT의 내부에서 대부분의 작업을 처리하기 때문에)와 달리 RPC를 사용하면보다 서비스 지향적 인 접근 방식을 사용할 수 있습니다. RequestFactory는 복잡한 다형성 데이터 구조를 호출해야하는 경우 유용한 접근 방식을 제공 할 수있는보다 현대적인 종속성 주입 스타일 접근 방식을 구현합니다. RPC를 사용할 때는 마샬링 유틸리티가 json / xml과 Java 모델간에 변환 할 수 있도록 데이터 구조가 더 평평해야합니다. RPC를 사용하면 Google 웹 사이트의 gwt dev 섹션에서 인용 한 것처럼보다 강력한 아키텍처를 구현할 수도 있습니다.
"간단한 클라이언트 / 서버 배포
서비스 정의를 생각하는 가장 간단한 첫 번째 방법은이를 애플리케이션의 전체 백엔드로 취급하는 것입니다. 이러한 관점에서 클라이언트 측 코드는 "프런트 엔드"이고 서버에서 실행되는 모든 서비스 코드는 "백 엔드"입니다. 이 접근 방식을 취하면 서비스 구현은 하나의 특정 애플리케이션에 밀접하게 결합되지 않은보다 범용적인 API 인 경향이 있습니다. 서비스 정의는 JDBC 또는 Hibernate 또는 서버의 파일 시스템에있는 파일을 통해 데이터베이스에 직접 액세스 할 수 있습니다. 많은 응용 프로그램의 경우이보기가 적절하며 계층 수를 줄이므로 매우 효율적일 수 있습니다.
다중 계층 배포
보다 복잡한 다중 계층 아키텍처에서 GWT 서비스 정의는 J2EE 서버와 같은 백엔드 서버 환경을 호출하는 경량 게이트웨이 일 수 있습니다. 이러한 관점에서 서비스는 애플리케이션 사용자 인터페이스의 "서버 절반"으로 볼 수 있습니다. 일반 용도가 아닌 사용자 인터페이스의 특정 요구에 맞게 서비스가 생성됩니다. 서비스는 예를 들어 J2EE 서버의 클러스터로 구현 된보다 범용적인 백엔드 서비스 계층에 대한 호출을 함께 연결하여 작성된 "백엔드"클래스에 대한 "프론트 엔드"가됩니다. 이러한 종류의 아키텍처는 백엔드 서비스를 HTTP 서버와 물리적으로 분리 된 컴퓨터에서 실행해야하는 경우에 적합합니다. "
또한 단일 RequestFactory 서비스를 설정하려면 RPC에 3 개만 필요한 자바 클래스를 6 개 정도 만들어야합니다. 더 많은 코드 == 내 책에서 더 많은 오류와 복잡성이 발생합니다.
RequestFactory는 또한 데이터 프록시와 실제 Java 모델 간의 직렬화를 마샬링해야하므로 요청 처리 중에 약간 더 많은 오버 헤드가 있습니다. 이 추가 된 인터페이스는 엔터프라이즈 또는 프로덕션 환경에서 실제로 추가 될 수있는 추가 처리주기를 추가합니다.
또한 RequestFactory 서비스가 RPC 서비스와 같은 직렬화라고 생각하지 않습니다.
대체로 얼마 동안 두 가지를 모두 사용한 후에는 항상 RPC를 더 가볍고 테스트 및 디버깅하기 쉽고 RequestFactory를 사용하는 것보다 빠릅니다. RequestFactory는 RPC 카운터 부분보다 더 우아하고 확장 가능할 수 있습니다. 복잡성이 추가되었다고해서 더 나은 도구가 필요한 것은 아닙니다.
제 생각에는 최고의 아키텍처는 두 개의 웹 앱, 하나의 클라이언트와 하나의 서버를 사용하는 것입니다. 서버는 servlet.jar 라이브러리를 사용하는 간단한 경량의 일반 Java 웹 애플리케이션입니다. 클라이언트는 GWT입니다. GWT-RPC를 통해 클라이언트 웹 애플리케이션의 서버 측에 RESTful 요청을합니다. 클라이언트의 서버 측은 서버 서블릿 웹 애플리케이션에서 단일 서블릿으로 실행중인 요청 핸들러에 지속성 터널을 사용하는 http 클라이언트를 아파치하는 것입니다. 서블릿 웹 애플리케이션은 데이터베이스 애플리케이션 계층 (hibernate, cayenne, sql 등)을 포함해야합니다.이를 통해 실제 클라이언트에서 데이터베이스 개체 모델을 완전히 분리하여 애플리케이션을 개발하고 단위 테스트하는 훨씬 더 확장 가능하고 강력한 방법을 제공 할 수 있습니다. 초기 설정 시간이 약간 필요합니다. 하지만 결국 GWT 외부에있는 동적 요청 팩토리를 만들 수 있습니다. 이를 통해 두 세계의 장점을 모두 활용할 수 있습니다. gwt 클라이언트를 컴파일하거나 빌드하지 않고도 서버 측을 테스트하고 변경할 수 있다는 것은 말할 것도 없습니다.