WCF가 원래 느린걸까요? 아니면 코딩실력에 따라 시스템 속도 편차가 클까요?

안녕하세요. 저는 초보자라서 문의 드립니다.
많이 부족해서 양해부탁드립니다.

현재 Web 방식이 아닌 Client - Server 형식으로(옛날 방식이죠…) 개발 프로젝트에
포함되어 업무를 하고 있습니다.
Web 방식 외에 Client-server 방식은 처음이라 잘 모르기에 닷넷데브 분들께 문의드립니다.

  1. 현재 상황 :

    1. Client - Server 베이스로 C# .net으로 구축 중
    2. Client와 DB가 다이렉트로 붙는 건 보안정책에 위배되어 중간에 Middleware로
      app 서버를 두고 WCF를 이용해 Query 및 dataset을 xml 형태로 message로 주고 받을 수 있게
      구성 중(app서버에 agent 프로그램 상시 돌고 있음)
    3. Client - DB 다이렉트로 연결 시 속도가 느리진 않는데
      WCF 를 통해 시스템 사용을 하면 클릭 한 번 할 때마다 3초 정도가 걸립니다.
      이 정도면 시스템 사용을 할 수 없을 것 같음
  2. 문의 사항
    WCF는 분산처리 등을 이용해 속도 측면에서는 문제 없을 것이라고 생각했는데
    코딩이 잘못 된 걸까요? 아니면 원래 middleware를 통해서 데이터가 전달되다 보니
    다이렉트보다 느린게 맞는걸까요? 경험 많으신 분들께 조언 여쭙습니다.
    이론적으로 Client-DB 다이렉트로 연결되는게 당연히 빠르겠지만, WCF 통해 연결 시
    너무 느려서 이게 원래 그런건지, 아니면 코딩문제로 잘못 된 것인지 궁금합니다.

    많이 부족한 질문이지만 답변 부탁드립니다. 개선할 수 있는 방법이 있을까요?

2개의 좋아요

오래된 기억이긴한데 경험상 WCF 자체가 느려서 이슈가 된 적은 없었던거 같습니다.
3초면 꽤 긴 시간인데 미들웨어 구성이 어떻게 되어 있는지 모르는 상황에서 선뜻 말씀드시기 어렵긴 하네요.
WCF도 여타 다른 프레임워크처럼 trace 기능이 있는 것으로 알고 있습니다.
WCF Trace 옵션을 활성화 하신 다음 프레임워크 자체 성능과 작성하신 코드의 수행 시간을 stopwatch 등으로 측정하여 비교해 보시면 답을 찾으실수 있지 않을까 싶네요

5개의 좋아요

똥볼도 많이 차지만 맹색이 시총 2위 마이크로소프트가 설마 현업에 사용할 수 없을 만큼 느리게 만들지는 않았겠죠?ㅎ

규모에 따라 다르겠지만 WCF로도 사용성에 맞는 적절한 바인딩과 옵션을 주면 준 실시간 응답성을 가지는 곳에서도 가능합니다.

현재 추측 가능한 부분은 대략 아래 세 가지 정도 인데요,

  1. Client측 설정에 의한 연결 구성 지연 (Proxy 설정 등)
  2. Server 측 Request Lifecycle 설정에 따른 초기화 오버헤드 (세션 및 인스턴스 설정)
  3. XML 직력화 오버헤드 (ADO.NET 기반일 경우 DataTable 타입 직렬화 시간 및 전송 크기)

사용된 닷넷 버전과 바인딩 구성에 대한 정보, 서비스 정의에 특별하게 사용된 코드, 테스트 환경 등 좀 더 자세한 정보를 알려주시면 답변에 도움이 될 것 같습니다.

5개의 좋아요

답변 감사드립니다.
한번 확인 해볼게요!

2개의 좋아요

답변 감사합니다.
한 번 확인해볼게요!

2개의 좋아요

WCF가 풀 커스텀으로 TCP 소켓 통신하는 것보다야 이론적으로는 느리겠지만 리얼 월드에서 사용을 못할만큼 느리지는 않습니다.

HTTP 기반인 WCF의 기본 바인딩 대신 NetTcpBinding을 사용하시면 성능을 더 올릴 수 있으며, 제가 보기에는 WCF의 문제라기 보다는 XML Data Serialization이 병목 부분인 것 같습니다.

4개의 좋아요