문제

동일한 서버에서 여러 다른 응용 프로그램 (클라이언트)에서 사용하는 기능이 있습니다. 서비스로 모델링 될 수 있고 백엔드 데이터베이스가 있으며 한 번에 사용되는 기능과 데이터베이스의 버전 만 있습니다.

지금까지 우리는 기능, 구성 파일 및 사용되는 모든 곳에서 배포 된 간단한 DLL- 반복을 사용했습니다. 이제 여러 곳에서 변경해야 하므로이 방법은 기능의 새로운 버전을 만들거나 새로운 고객이 사용하려는 경우 고통 스럽습니다.

우리는이 작업을 수행하는 더 좋은 방법이 있는지 궁금해하고 두 가지 가능한 대안을 제시했습니다.

  1. GAC에 DLL (및 종속성)을 넣으십시오. 질문은 구성 요소를 구성하는 방법입니다. 클라이언트가 구성에 관심이 없으므로 구성 파일을 서버의 하드 코딩 경로에 저장하는 데 기댈 것입니다.

  2. 기능을 내부 (REST 기반) 서비스로 게시하십시오. 이에 대한 액세스는 방화벽을 사용하여 내부 클라이언트로 제한 될 수 있습니다.

우리가 보았 듯이, #1의 장점은 성능과 보안 인 것처럼 보이지만 #2는 설정하기에 더 간단한 것으로 보일 수 있습니다.

우리는 여기서 중요한 것을 놓치고 있습니까? 전에도 비슷한 상황에 처해 있고 통찰력을 공유하고 싶습니까?

도움이 되었습니까?

해결책

이것은 내가 여러 번 어려움을 겪고있는 문제이며 실제로 다른 대답은 없습니다. 내 개인적인 의견은 몇 가지 이유로 옵션 1에서 멀리 떨어져 있어야한다는 것입니다.

  1. 모든 고객이 단일 바이너리를 공유하도록함으로써 이제 모든 고객이 변경할 때마다 테스트를 받아야합니다. 이제 귀하의 정확한 경우에는 구성 요소 뒤에있는 데이터베이스를 수정한다고 가정 할 수 있기 때문에 어쨌든이 작업을 수행해야 할 수도 있습니다.
  2. 하드 코드는 없습니다. machine.config 파일의 appSettings 섹션에 구성 경로를 저장할 수 있습니다.

옵션 2의 경우 한 가지 대안은 WCF를 사용하는 것입니다 (환경이 지원할 수 있다고 가정). WCF를 사용하면 이진 완법을 사용하여 TCP 전송을 사용할 수 있으며 (공유 메모리 전송이있을 수 있음) 공유 메모리 전송이있을 수 있습니다. 이 두 가지 모두 성능 간격을 더 가깝게 만드는 데 도움이 될 것입니다 (옵션 1은 항상 서비스 기반 접근 방식보다 성능이 우수합니다).

옵션 2를 사용하면 계약이 중단되지 않았 음을 확인하기 위해 자동 테스트를 개발할 수 있으므로 모든 클라이언트를 다시 테스트해야 할 필요성을 완화합니다. 이를 통해 단일 장소에 게시하고 빠른 자동 테스트를 실행하며 고객을 깨뜨리지 않는다는 것을 알 수 있습니다.

이를 통해 옵션 1과 좋은 단위 테스트 세트를 사용하여 동일한 것을 달성 할 수 있지만 내 경험을 바탕으로 옵션 2가 장기적으로 더 쉬울 것입니다.

옵션 2를 사용하면 더 많은 CPU 전력이 필요한 경우 향후 서비스를 확장 할 수 있습니다.

개인적으로 방화벽 구성, 인증 처리, 서비스 설정 등을 처리 할 필요가 없기 때문에 옵션 1은 설정하기가 더 쉽다고 생각합니다 ... 디버그하기가 더 쉽습니다 (애플리케이션 배포 새로운 유형의 실패가 소개됩니다. 예를 들어 서비스 충돌을 호스팅하는 사이트와 고객이 실패를 시작합니다).

마지막 제안 중 하나는 프록시 / 정면 패턴을 사용하여 서비스의 실제 위치에서 고객을 불러 일으킨다는 것입니다. 이렇게하면 클라이언트 코드를 수정하지 않고도 시간이 지남에 따라 확장 할 수 있습니다.

다른 팁

Josh가 이미 말했듯이 불행히도 이러한 종류의 질문에 대한 답은 종종 "의존적"입니다.

나는 GAC의 열렬한 팬이지만 코드를 넣어야하는 코드를 넣어야합니다. 여기에는 완벽하게 작동하며 자주 업데이트 할 필요가 없습니다. 코드가 "개발 중"인 한,이를 사용하는 모든 응용 프로그램과 함께 게시하십시오.

옵션 1을 사용하는 것이 더 간단하고 쉬울 것입니다. 특히 나머지 가용성을 제한하는 데 추가 시간을 소비해야하기 때문입니다. (말장난 의도!)

Josh는 WCF를 옵션으로 지적하며, 이것이 제가 이것과 함께 갈 방식입니다.

이 문제는 SOA가 해결해야 할 것입니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top