개발자가 DB에 직접 연결하는 대신 웹 서비스를 사용하는 이유는 무엇입니까? [닫은]
DB에 직접 연결하는 대신 웹 서비스를 통해 원격 데이터베이스에 연결해야하는 이유에 대한 "10 대"목록을 찾고 있습니다. 현재 현재 내부 주장 나는 프로 웹 서비스이지만 주장을 잃고 있습니다. 나는 WCF / 웹 서비스에 대한 기본적인 이해를 제공합니다. 우리는 앞으로 나아가고 싶은 것이 무엇이든 할 수 있도록 지금 선택하는 것이 무엇이든 고수해야합니다.
여기 내가 생각 해낸 것입니다. 더 있나요?
- WCF 웹 서비스는 선택 가능한 경우 더 안전 할 수 있습니다.
- DB 변경은 서비스 수준 (구성 파일 또는 재 수행 서비스)에서만 수행됩니다.
- 일단 설정 및 호스팅 웹 서비스를 더 쉽게 사용할 수 있습니다.
보안. 웹 서버 / 앱 사용자를 소유 한 누구에게도 DB 액세스 권한을 부여하지 않습니다.
이는 사용자가 많을 때 더욱 중요합니다. DB 측에서 사용자 / 역할 유지 관리의 고통을 피할 수 있습니다.
DB 부하 감소. 웹 서비스는 DB에서 검색 한 데이터를 캐시 할 수 있습니다.
데이터베이스 연결 풀링 (hat / tip @Dogs).
웹 서비스는 영구적으로 열린 DB 연결의 작은 풀을 사용할 수 있습니다. 다양한 방법으로 도움이됩니다.
DB 연결 풀은 데이터베이스 서버 측에서 제한됩니다.
새 DB 연결을 여는 많은 비용이 많이 들었습니다.
내결함성 기능-서비스 소비자가 장애 조치에 대한 세부 사항을 구현하지 않아도 서비스가 기본 / DR 데이터 소스간에 전환 할 수 있습니다.
확장 성-서비스는 서비스 소비자가 리소스 선택에 대한 세부 정보를 구현하지 않고 여러 개의 데이터 소스간에 요청을 요청할 수 있습니다.
캡슐화. 서비스 사용자에게 영향을주지 않고 기본 DB 구현을 사용합니다.
데이터 보강 (여기에는 클라이언트 사용자 정의에서 현지화, 내재화에 모든 것이 포함됩니다). 기본적으로 이들 중 어느 것이 든 유용 할 수 있고 이들 중 어느 것도 데이터베이스에 큰 부하가 있고 종종 DB 내부에서 구현하기가 매우 어렵습니다.
귀하에게 적용되지 않을 것입니다. 특정 아키텍처 결정은 DB 액세스 권한이 없습니다. 예를 들어, Unix에서 실행되는 Java 서버는 데이터베이스에 쉽게 액세스 할 수있는 반면 Windows PC에서 실행되는 Java 클라이언트는 데이터베이스를 인식하지 못하며 사용자가 없을 수도 있습니다.
바이 성. 클라이언트가 모두 동일한 플랫폼 / 아키텍처 / 언어에 있지 않을 수 있습니다. 이들 각각에서 좋은 데이터 액세스 계층을 다시 만드는 것은 웹 서비스를 소비자의 계층을 구축하는 것보다 더 어렵습니다 (위에서 많은 한 장애 조치 등의 문제를 정리하기 때문에).
성능 조정. 대안이 클라이언트가 자체 쿼리 (미리 준비된 저장 프로 시저가 아님)를 실행 준비된 가정하면 최적의 준비 쿼리를 사용하기 시작하기를 100 % 확신 할 수 있습니다. 또한 웹 서비스가 허용 가능한 쿼리 집합을 제한하는 경우 데이터베이스 조정에 크게 도움이 될 수 있습니다. 이 논리는 웹 서비스에 고유하지 않고 저장 프로 시저에도 동일하게 적용 할 점을 추가해야합니다.
이 페이지 는 좋은 목록을 사용할 수 있습니다 . '데이터베이스 액세스 캡슐화 : 민첩한 "최상"사례'
명확하게하기 위해 배포 문제 중 일부는 모든 상황에 적용되지 않습니다. 어떤 사람들은 이식성에 관심이 없습니다. 어떤 사람들은 DB 보안에 대해 걱정할 필요가 없습니다. 어떤 사람들은 DB 확장성에 대해 걱정할 필요가 없습니다.
제 생각에는 데이터베이스를 웹 서비스로 자동으로 노출 될 수 있습니다. 데이터를 노출 할 서비스가 필요하다고 판명하면 하나를 작성하십시오. 그러나 모든 데이터베이스 액세스가 웹 서비스를 통해 수행되어야하는 것이 아닙니다.
- 데이터베이스 연결이 안전하지 않습니다.
- 데이터 액세스 계층 (아마도 Entity Framework)에서 데이터베이스를 캡슐화 할 수 있습니다.
- 웹 서비스는 잘 보관되는 데이터 액세스 계층보다 사용하기 쉽습니다.
- 웹 서비스는 API를 형성하여 외부 시스템과 애플리케이션 데이터 허용 된 상호 작용을 정의합니다.
- 웹 서비스는 데이터베이스를 외부 상호 작용에서 분리하고 데이터 계층을 외부 영향과 독립적으로 관리 할 수 있도록합니다.
- 웹 서비스에 의한 액세스 만 허용하면 애플리케이션이 실행될 수있는 기회를 확보하여 데이터 무결성을 보호 할 수 있습니다.
- 웹 서비스를 사용하면 사용자 이름과 암호 / 테이블 수준 권한이 필요한 데이터베이스와 달리 가장 적절한 인증 / 권한 부여 조치를 취할 수 있습니다.
- 웹 서비스는 자동 서비스 검색 및 구성을 사용할 수있는 기회를 제공합니다.
- 웹 서비스 트래픽은 보안되지 않은 네트워크를 통해 전송을 위해 암호화 될 수 있습니다. 이를 가능하게하는 직접 DB 연결 솔루션을 모르십니까? ...?
대부분의 경우 웹 서비스가 아닌 API에 적용됩니다.
저장 프로 시저에 대한 호출을 단순히 래핑하는 웹 서비스를 작성하는 것은 좋은 DAL을 설계하는 데 잘못된 접근 방식 인 것 같습니다. 아마도 저장 프로시 저는 이전 클라이언트-서버 시스템에서 남겨진 레거시 코드입니다. 즉 비즈니스 규칙이 SP에 묻혀 있습니다. 만약 그렇다면, 당신은 정말로 모돈의 귀에서 실크 지갑을 만드는 것을 시도하고 있습니다.
또한이 '돼지'의 연대를 '강제'한 웹 앱에 성능 저하를 추가하는 SOAP 메시지 프로토콜 계층을 추가합니다. 나는 지금 우리의 새로운 MVC-4 앱이 그러한 DAL을 사용하도록 지시받은 프로젝트를 진행하고 있습니다. 이러한 변경을 필요로하는 새 사용자 스토리가 올 때마다 WebMethod 서명과 SP 서명을 모두 변경해야하는 부담이 있습니다. 우리에게는 모든 단일 스프린트입니다. 이러한 패스 스루 접근 방식에는 밀접하게 연결된 두 계층이 내재되어 있습니다.
1) 개발자 측에서 데이터베이스 유지 관리의 어려움을 줄여 개발에만 집중할 수 있습니다.
2) 웹 서비스는 매우 쉽고 효과적인 방법으로 다양한 플랫폼 (Windows, iOS, Android 등의 운영 체제)의 통신을 지원합니다. 예를 들어 안드로이드 애플리케이션과 ios 애플리케이션이 자바 기반의 웹 사이트와 통신하기를 원하는 상황을 생각 해보자. 따라서 세 가지의 모든 통신을 위해서는 웹 서비스가 세 가지 다른 데이터베이스를 유지하는 것이 아니라 최상의 솔루션이다.
일반적으로
- 웹 서비스 수준은 여러 응용 프로그램에 대한 공통 데이터 요청의 재사용을 촉진합니다.
- 웹 서비스는 애플리케이션 레벨 개발에서 발생하는 많은 문제를 완화하는 버전 관리로 설정할 수 있습니다. 예를 들어 기존 애플리케이션을 처음 사용하는 경우 기존 데이터베이스 소스를 사용하도록 애플리케이션을 구성하는 좋은 모델로 사용합니다.
- 웹 서비스는 간단한 URI를 사용하여 요청을 보내고 응답 결과를 JSON과 같은 일반적인 형식으로 되 돌리는 유연한 옵션을 허용하도록 발전했습니다. 즉, 신뢰할 수있는 균일 한 인터페이스를 장려하는보다 일반적인 표준을 사용하여 클라이언트 응용 프로그램을 개발할 수 있습니다.
ASP.NET Web Api에 관심이 있고 먼저 데이터 서비스를 만들 계획입니다.
저는 최근 엔터티 프레임 워크를 사용하여 .NET MVC 웹 애플리케이션에 중점을두고 있습니다.
- 이미 MVC를 사용하고 있다면 Web Api는 Api 컨트롤러와 함께 MVC도 사용하므로 서비스 구축을위한 학습 곡선이 상당히 어렵지 않습니다.
저는 최근에 Oracle 저장 프로 시저를 기반으로 구축하고 있던 MVC 웹 앱으로 인해 좌절감을 느꼈습니다. 웹 구성 연결 및 TNS 이름을 기반으로 사용할 올바른 dll 파일을 찾는로드 시간 어셈블리를 사용하여보다 현대적인 연결 팩토리 접근 방식을 추진하는 Visual Studio 2012의 또 다른 문제를 제시 한 Oracle 9 또는 이전 버전의 원래 버전.
데이터베이스에 대한 연결 시도가 '더 이상 지원되지 않음'오류 메시지와 함께 실패했습니다. 호기심으로 Oracle 12c를 다운로드하고 TNS 이름과로드 어셈블리 dll과 잘 작동하는 애플리케이션 수준 연결을 만들었으며 문제없이 Oracle과 함께 작업 할 수있었습니다.
이전 Oracle 버전에 대한 연결로 작동하는 웹 서비스가 구축되었습니다. 그들은 내 실망 스럽지만 선택한 테이블에 특별히 매핑 된 방법으로 구축되었습니다. 나는 직접 써야 할 것입니다.
Oracle 데이터베이스를 유지 관리하는 그룹은 클라이언트 인터페이스와 비즈니스 논리 계층을 추상화하는 데 사용했던 이전 저장 프로 시저를 대체하기 위해 새 저장 프로 시저를 작성할 것이라고 들었습니다.
그래서 첫 번째 생각은 드롭 다운 목록 채우기 또는 엔터프라이즈 급 데이터로 자동 완성과 같은 모든 일반적인 데이터 요청이 Oracle 저장 프로 시저를 호출하는 데이터 서비스를 통해 수행된다는 것입니다. 각 애플리케이션에 대해이 프로세스를 반복하고 각 개발자가 구성 및 버전 /로드 어셈블리, TNS 문제로 어려움을 겪게하는 이유는 무엇입니까?
그래서....
- 일반적으로 SQL Server 데이터 사용에 EF를 사용하는 .NET MVC 응용 프로그램에서 Oracle 저장 프로 시저를 사용하는 것과 같은 여러 데이터베이스 서버 문제의 경우 이러한 문제를 이러한 구성 문제를 격리 할 수있는 Web Api 서비스 방법으로 밀어 넣지 않는 것이 좋습니다.
- 클라이언트 인터페이스는 Web Api를 사용하여 SQL Server 데이터 요청을 수행하는 경우 이미 사용중인 JavaScript, JQuery 및 JSON을 사용하여 수행 할 수 있습니다.
저는 DBA가 아닌 응용 프로그램 개발자 / 분석가이므로 데이터베이스 도구가 발전 할 때 응용 프로그램을 지속적으로 수정해야하는 끊임없는 좌절감을 경험 한 경험에서 비롯된 것입니다.
'IT' 카테고리의 다른 글
Google Cloud Datastore와 Firebase (0) | 2020.09.14 |
---|---|
Java 프로세스를 중지하는 방법은 무엇입니까? (0) | 2020.09.14 |
JSF 2에서 faces-config.xml을 사용하는 것은 무엇입니까? (0) | 2020.09.14 |
자바 펼쳐 querySelector 대 getElementById (0) | 2020.09.14 |
JSON에 null 값이 포함되어야 함 (0) | 2020.09.14 |