현재 우리는 2 년 가까이 개발 된 대형 내부 애플리케이션을 보유하고 있습니다. 방금 최근 프로젝트에 참여했으며 일부 아키텍처가 약간 당황했습니다. 그래서 건축가 에게이 같은 질문을하기 전에 나가서 조언을 해 줄 수 있기를 바랍니다. ).
아래 내용이 조금 길다면 죄송합니다. 제 질문을하기 전에 시스템의 상태를 잘 그려보고 싶습니다. :)
시스템 설정 방법은 주로 다양한 다른 서비스의 데이터를 집계하는 하나의 기본 웹 응용 프로그램 (asp.net, AngularJS)을 사용하는 것입니다. 기본적으로 AngularJS 응용 프로그램의 호스트입니다. 말 그대로 클라이언트 측을 부트 스트랩하는 하나의 MVC 컨트롤러가 있으며 다른 모든 컨트롤러는 WebAPI 컨트롤러입니다.
클라이언트 측으로부터의 호출은이 컨트롤러에 의해 처리되며, 항상 웹 응용 프로그램을 호스팅하는 상자에만 배포됩니다. 우리는 현재 그러한 상자를 4 개 가지고 있습니다.
그러나이 호출은 궁극적으로 또 다른 WebAPI 응용 프로그램 집합 (일반적으로 보안, 고객 데이터, 제품 데이터 등의 비즈니스 영역 별)으로 라우팅됩니다. 이러한 WebAPI는 모두 전용 박스에 함께 배포됩니다. 이 상자들 중 4 개도 있습니다.
단 하나의 예외로, 이러한 WebAPI는 조직의 다른 부분에서는 사용되지 않습니다.
마지막으로 이러한 WebAPI는 "백엔드"서비스에 대한 또 다른 호출 세트를 작성합니다.이 서비스는 일반적으로 다양한 ERP 시스템 및 데이터 저장소 (통합 할 수없는)의 상단에있는 기존 asmx 또는 wcf 서비스입니다.
애플리케이션의 비즈니스 로직의 대부분은 레거시 데이터 변환, 집계, 비즈니스 규칙 실행, 일반적인 유형과 같은 WebApi에 있습니다.
내가 혼란스럽게 한 것은 WebApplication과 WebAPI를 제공하는 것과 같은 분리가 있으면 가능한 이점입니다. 다른 사람이 사용하지 않기 때문에 확장 성 이점이 없습니다 (즉, API 서버의 부하가 증가하면 웹 서버의 부하가 증가해야함에 따라 부하 증가를 처리하기 위해 다른 4 개의 API 상자를 넣을 필요가 없습니다- 따라서 웹 서버 대 Api 서버의 1 : 1 비율이 있어야합니다)
또한 여분의 HTTP 호출 Browser => HTTP => WebApp => HTTP => WebAPI => HTTP => 백엔드 서비스를 만들어야하는 이점이 전혀 없습니다. (WebApp과 WebAPI 간의 HTTP 호출은 내 문제입니다)
그래서 현재는 현재 WebAPI를 별도의 솔루션에서 WebApplication 솔루션 내에서 별도의 프로젝트 참조로 단일 프로젝트 모델과 단일 배포 모델로 이동하도록 추진하려고합니다. 그래서 그들은 궁극적으로 클래스 라이브러리가 될 것입니다.
배포 측면에서 이는 4 + 4가 아닌 8 개의 "풀 스택"웹 상자가 있음을 의미합니다.
새로운 접근 방식의 장점은 다음과 같습니다.
- 웹 응용 프로그램과 WebAPI 서버간에 직렬화 / 직렬화주기가 1 회 줄어들 기 때문에 성능이 향상됩니다.
- 웹 애플리케이션 및 WebApi 서버의 발신 및 수신 경계에서 각각 DTO 및 맵퍼 측면에서 삭제할 수있는 많은 코드 (즉, 유지 보수 / 테스트 불필요).
- 백엔드 서비스를 간단하게 모의하고 미드 티어 HTTP 점프 주위의 혼란을 피할 수 있기 때문에 의미있는 자동화 된 통합 테스트 생성 기능이 향상되었습니다.
그래서 질문은 : 내가 틀렸습니까? WebApplication 상자와 WebAPI 상자를 분리 한 기본적인 "마법"을 놓쳤습니까?
N-Tier 아키텍처 자료를 연구했지만 상황에 구체적인 이점을 줄 수있는 것을 찾을 수없는 것 같습니다 (확장 성이 내가 말할 수있는 한 문제가 아니기 때문에 내부 응용 프로그램이므로 WebAPI 응용 프로그램의 관점에서 보안은 문제가되지 않습니다.)
또한 시스템을 제안 된 설정으로 재구성하면 이점 측면에서 무엇을 잃을 것입니까?