2009-02-09 5 views
2

이전에 내 ASP.NET 웹 응용 프로그램은 ADO.NET을 사용하여 데이터베이스에 직접 연결합니다. 이제 3 계층, ASP.NET 계층, 중간 웹 서비스 계층 및 백엔드 데이터베이스 계층으로 변경하려고합니다. 느슨하게 결합 된 ASP.NET 프론트 레이어에 데이터 소스를 추상화하고 잠재적 인 보안 위험을 줄여 외부 노출 된 ASP.Net 웹 응용 프로그램이 데이터베이스에 직접 액세스 할 수 있도록하는 이점이 있다고 생각합니다.ASP.NET 웹 응용 프로그램 아키텍처 디자인 조언

3 레이어 아키텍처의 2 레이어 아키텍처, 나는 2 가지 주요한 문제를 만났다.

  1. 추가 중간 웹 서비스 계층은 더 많은 트래픽을 발생시킵니다. ASP.NET은 데이터베이스와 직접 대화하지 않지만 웹 서비스와 대화하고 데이터베이스와 웹 서비스가 대화를하면 더 많은 트래픽이 발생합니다. 병목 현상이 될 것인가? 병목 현상이있는 경우이 문제를 해결하기위한 일반적인 조언은 무엇입니까?

  2. ASP.NET은 데이터베이스에 연결할 수 없지만 웹 서비스에 연결하기 때문에 DataSet/DataTable 개체를 쉽게 가져올 수 없습니다. 테이블 양식 데이터를 데이터 바인딩 된 컨트롤에 표시하기가 어려워집니다. ASP.NET에서 표현 레이어를 쉽게 만드는 코딩 아이디어가 있습니까?

감사합니다,
조지

답변

8

는 이익이을 생각한다면, 당신은 그것을 할 것이다. 당신은 많은 양의 복잡성을 추가하고 성능, 코드 단순성 및 아키텍처 단순성을 희생하면서 자신을 위해 노력하고 있습니다. 이 비용에 해당하는 것은 무엇을 얻게됩니까?

당신을 수행
  • 는 데이터베이스 서버에서 웹 프런트 엔드를 분리 할 필요 긴급 보안 관련 요구 사항 (아니, 가설 "이 더 안전 할 것입니다 내기"하지만 입증, 되세요 콘크리트 보안 당신이 당신의 ASP.NET 응용 프로그램)

  • 것은 아마 반복 (미래의 어떤 시점에서 완전히 데이터 계층을 교환 할 것으로 예상) 부여 어떤 DB의 권리에 대한 스마트 됨으로써 해결 될 수없는 문제, 따라서 절연 할 필요가있다. 급진적 인 DB 변경으로 인한 웹 코드베이스?

매우 거의 모든 경우에 대한 답변은 아니오입니다. 이렇게하면이 앱을 터치 할 수있는 사람과 다른 사람에게 고통이 가중됩니다.

+0

+1 - 아키텍처가 필요없이 얻을 수 있다면 레이어를 추가하는 대신 프런트 엔드를 개선하는 데 그 노력을 사용하십시오. – Brandon

+0

+1 - 물론 이에 동의합니다. 방공호가 자기 자신에게 두통을 줄 것 같아. – nickohrn

+0

Rex, "보안을 위해 웹 프론트 엔드에서 데이터베이스 서버의 연결을 완전히 끊어야합니까?" 다른 말로 말해요? – George2

1

질문 2와 관련하여 웹 서비스에서 DataSet을 확실히 반환 할 수 있습니다. http://tinyurl.com/ah58xc

그러나 더 나은 옵션은 응용 프로그램을 다층으로 만드는 대신 리팩터링하는 것입니다. 예를 들어, "데이터 액세스"를 ASP.NET 프로젝트에서 참조하는 별도의 클래스 라이브러리 프로젝트로 분리하십시오. 이것은 일을보다 조직화 할 수 있고 다중 계층 아키텍처로 원하는 것을 성취 할 수 있습니다.

그런데 다중 계층을 만들 때 가장 큰 위험은 더 나은 용어가 부족하여 "프록시"코드를 작성하게된다는 것입니다.즉, 동일한 매개 변수를 사용하여 "실제"백엔드 메서드를 호출하는 것 이외의 다른 용도로 사용되지 않는 메서드입니다. 예를 들어 메소드에 매개 변수를 추가하는 경우에는 백엔드, 프록시 계층 및 메소드를 세 번 추가해야하므로 깨끗한 계층 분리로 유지 보수 문제로 이어질 수 있으므로 처음에는 더 낫습니다. 표현 계층).

+0

'프록시'코드의 잘못된 사용에 동의합니다. 나는 끔찍한 아치에서 일했습니다. 문자 그대로 6 개의 레이어가 있었고, 그 중 4 개의 레이어는 매개 변수를 통과했습니다. 중간 계층이 버스 로직과 같은 어떤 일도하지 않을 경우 하나를 만드는 것을 괴롭히지 마십시오. – CodingWithSpike

+0

안녕하세요 .Npingme, 내가 추천 한 문서를 읽었습니다. 내 관심사는 가까운 미래에 웹 서비스에 액세스 할 수있는 Java 기반 응용 프로그램이있을 수 있습니다. Java에서 .Net DataSet 유형을 인식 할 수 있습니까? 나는 의심한다. 다른하실 말씀 있나요? – George2

+0

routeNpingme, 새로운 설명입니다. 앞으로 캐시 서버 및 파일 기반 서버를 도입 할 것이며 중간 계층 웹 서비스를 사용하여 ASP.Net 계층과의 데이터 소스 차이를 투명하게 전달하려고합니다. 다른하실 말씀 있나요? 그런 디자인이 감각을 만드나요? – George2

0

나의 첫 번째 질문은 : 왜 웹 서비스가 중간에 있습니까? 이것이 모두 동일한 물리적 시스템에서 실행될 경우, 인터페이스 세트를 통해 사용되고 직접 메소드 호출을 사용하여 중간 계층을 리팩터링 할 수 있습니다.

중간 계층 웹 서비스와 분리되어 있지만 모든 중요한 비즈니스 논리가 포함되어 있으며 인터넷에 직접 노출되지 않는 아키텍처로 작업하고 있습니다. 예 :

{인터넷} -> | DMZ | -> 웹 서버 -> | 방화벽이있는 LAN | -> 응용 프로그램 서버 -> 데이터베이스 서버

그런 경우에는 중요한 보안 기능이 DMZ에 없기 때문에 보안 계층을 추가한다고 생각합니다. 웹 서버가 앱 서버에 접속할 수 있기 때문에 기술적 보안 문제를 기술적으로 위반하지만, 단일 포트를 통해 DMZ의 특정 IP에 노출 된 앱 서버가 인터넷에 노출되는 것보다 낫습니다.

WCF를 사용하여 서버간에 통신하려면 SOAP 대신 TCP를 통한 바이너리 직렬화와 같은 것을 사용하는 것이 좋습니다. 그게 더 잘 수행되어야합니다 (빠른 테스트를 자유롭게 설정하십시오). 직접 시도하지는 않았지만 WCF가 데이터 집합이나 테이블을 직렬화 할 수 있습니다. here을 참조하십시오.

+0

감사합니다 rally25rs! 1. "DMZ"는 무엇을 의미합니까? 2. 미래에는 캐시 서버 및 파일 기반 서버를 소개 할 수 있으며 중간 계층 웹 서비스를 사용하여 ASP.Net 계층과의 데이터 원본 차이를 투명하게 전달하려고합니다. 다른하실 말씀 있나요? 그런 디자인이 감각을 만드나요? – George2

+0

DMZ : http://en.wikipedia.org/wiki/Demilitarized_zone_(computing) – CodingWithSpike