IT

개발자가 DB에 직접 연결하는 대신 웹 서비스를 사용하는 이유는 무엇입니까?

lottoking 2020. 9. 14. 21:24
반응형

개발자가 DB에 직접 연결하는 대신 웹 서비스를 사용하는 이유는 무엇입니까? [닫은]


DB에 직접 연결하는 대신 웹 서비스를 통해 원격 데이터베이스에 연결해야하는 이유에 대한 "10 대"목록을 찾고 있습니다. 현재 현재 내부 주장 나는 프로 웹 서비스이지만 주장을 잃고 있습니다. 나는 WCF / 웹 서비스에 대한 기본적인 이해를 제공합니다. 우리는 앞으로 나아가고 싶은 것이 무엇이든 할 수 있도록 지금 선택하는 것이 무엇이든 고수해야합니다.

여기 내가 생각 해낸 것입니다. 더 있나요?

  1. WCF 웹 서비스는 선택 가능한 경우 더 안전 할 수 있습니다.
  2. DB 변경은 서비스 수준 (구성 파일 또는 재 수행 서비스)에서만 수행됩니다.
  3. 일단 설정 및 호스팅 웹 서비스를 더 쉽게 사용할 수 있습니다.

  1. 보안. 웹 서버 / 앱 사용자를 소유 한 누구에게도 DB 액세스 권한을 부여하지 않습니다.

    이는 사용자가 많을 때 더욱 중요합니다. DB 측에서 사용자 / 역할 유지 관리의 고통을 피할 수 있습니다.

  2. DB 부하 감소. 웹 서비스는 DB에서 검색 한 데이터를 캐시 할 수 있습니다.

  3. 데이터베이스 연결 풀링 (hat / tip @Dogs).

    웹 서비스는 영구적으로 열린 DB 연결의 작은 풀을 사용할 수 있습니다. 다양한 방법으로 도움이됩니다.

    • DB 연결 풀은 데이터베이스 서버 측에서 제한됩니다.

    • 새 DB 연결을 여는 많은 비용이 많이 들었습니다.

  4. 내결함성 기능-서비스 소비자가 장애 조치에 대한 세부 사항을 구현하지 않아도 서비스가 기본 / DR 데이터 소스간에 전환 할 수 있습니다.

  5. 확장 성-서비스는 서비스 소비자가 리소스 선택에 대한 세부 정보를 구현하지 않고 여러 개의 데이터 소스간에 요청을 요청할 수 있습니다.

  6. 캡슐화. 서비스 사용자에게 영향을주지 않고 기본 DB 구현을 사용합니다.

  7. 데이터 보강 (여기에는 클라이언트 사용자 정의에서 현지화, 내재화에 모든 것이 포함됩니다). 기본적으로 이들 중 어느 것이 든 유용 할 수 있고 이들 중 어느 것도 데이터베이스에 큰 부하가 있고 종종 DB 내부에서 구현하기가 매우 어렵습니다.

  8. 귀하에게 적용되지 않을 것입니다. 특정 아키텍처 결정은 DB 액세스 권한이 없습니다. 예를 들어, Unix에서 실행되는 Java 서버는 데이터베이스에 쉽게 액세스 할 수있는 반면 Windows PC에서 실행되는 Java 클라이언트는 데이터베이스를 인식하지 못하며 사용자가 없을 수도 있습니다.

  9. 바이 성. 클라이언트가 모두 동일한 플랫폼 / 아키텍처 / 언어에 있지 않을 수 있습니다. 이들 각각에서 좋은 데이터 액세스 계층을 다시 만드는 것은 웹 서비스를 소비자의 계층을 구축하는 것보다 더 어렵습니다 (위에서 많은 한 장애 조치 등의 문제를 정리하기 때문에).

  10. 성능 조정. 대안이 클라이언트가 자체 쿼리 (미리 준비된 저장 프로 시저가 아님)를 실행 준비된 가정하면 최적의 준비 쿼리를 사용하기 시작하기를 100 % 확신 할 수 있습니다. 또한 웹 서비스가 허용 가능한 쿼리 집합을 제한하는 경우 데이터베이스 조정에 크게 도움이 될 수 있습니다. 이 논리는 웹 서비스에 고유하지 않고 저장 프로 시저에도 동일하게 적용 할 점을 추가해야합니다.

이 페이지 는 좋은 목록을 사용할 수 있습니다 . '데이터베이스 액세스 캡슐화 : 민첩한 "최상"사례'

명확하게하기 위해 배포 문제 중 일부는 모든 상황에 적용되지 않습니다. 어떤 사람들은 이식성에 관심이 없습니다. 어떤 사람들은 DB 보안에 대해 걱정할 필요가 없습니다. 어떤 사람들은 DB 확장성에 대해 걱정할 필요가 없습니다.


제 생각에는 데이터베이스를 웹 서비스로 자동으로 노출 될 수 있습니다. 데이터를 노출 할 서비스가 필요하다고 판명하면 하나를 작성하십시오. 그러나 모든 데이터베이스 액세스가 웹 서비스를 통해 수행되어야하는 것이 아닙니다.

  1. 데이터베이스 연결이 안전하지 않습니다.
  2. 데이터 액세스 계층 (아마도 Entity Framework)에서 데이터베이스를 캡슐화 할 수 있습니다.
  3. 웹 서비스는 잘 보관되는 데이터 액세스 계층보다 사용하기 쉽습니다.

  • 웹 서비스는 API를 형성하여 외부 시스템과 애플리케이션 데이터 허용 된 상호 작용을 정의합니다.
  • 웹 서비스는 데이터베이스를 외부 상호 작용에서 분리하고 데이터 계층을 외부 영향과 독립적으로 관리 할 수 ​​있도록합니다.
  • 웹 서비스에 의한 액세스 만 허용하면 애플리케이션이 실행될 수있는 기회를 확보하여 데이터 무결성을 보호 할 수 있습니다.
  • 웹 서비스를 사용하면 사용자 이름과 암호 / 테이블 수준 권한이 필요한 데이터베이스와 달리 가장 적절한 인증 / 권한 부여 조치를 취할 수 있습니다.
  • 웹 서비스는 자동 서비스 검색 및 구성을 사용할 수있는 기회를 제공합니다.
  • 웹 서비스 트래픽은 보안되지 않은 네트워크를 통해 전송을 위해 암호화 될 수 있습니다. 이를 가능하게하는 직접 DB 연결 솔루션을 모르십니까? ...?

대부분의 경우 웹 서비스가 아닌 API에 적용됩니다.


저장 프로 시저에 대한 호출을 단순히 래핑하는 웹 서비스를 작성하는 것은 좋은 DAL을 설계하는 데 잘못된 접근 방식 인 것 같습니다. 아마도 저장 프로시 저는 이전 클라이언트-서버 시스템에서 남겨진 레거시 코드입니다. 즉 비즈니스 규칙이 SP에 묻혀 있습니다. 만약 그렇다면, 당신은 정말로 모돈의 귀에서 실크 지갑을 만드는 것을 시도하고 있습니다.

또한이 '돼지'의 연대를 '강제'한 웹 앱에 성능 저하를 추가하는 SOAP 메시지 프로토콜 계층을 추가합니다. 나는 지금 우리의 새로운 MVC-4 앱이 그러한 DAL을 사용하도록 지시받은 프로젝트를 진행하고 있습니다. 이러한 변경을 필요로하는 새 사용자 스토리가 올 때마다 WebMethod 서명과 SP 서명을 모두 변경해야하는 부담이 있습니다. 우리에게는 모든 단일 스프린트입니다. 이러한 패스 스루 접근 방식에는 밀접하게 연결된 두 계층이 내재되어 있습니다.


1) 개발자 측에서 데이터베이스 유지 관리의 어려움을 줄여 개발에만 집중할 수 있습니다.

2) 웹 서비스는 매우 쉽고 효과적인 방법으로 다양한 플랫폼 (Windows, iOS, Android 등의 운영 체제)의 통신을 지원합니다. 예를 들어 안드로이드 애플리케이션과 ios 애플리케이션이 자바 기반의 웹 사이트와 통신하기를 원하는 상황을 생각 해보자. 따라서 세 가지의 모든 통신을 위해서는 웹 서비스가 세 가지 다른 데이터베이스를 유지하는 것이 아니라 최상의 솔루션이다.


일반적으로

  1. 웹 서비스 수준은 여러 응용 프로그램에 대한 공통 데이터 요청의 재사용을 촉진합니다.
  2. 웹 서비스는 애플리케이션 레벨 개발에서 발생하는 많은 문제를 완화하는 버전 관리로 설정할 수 있습니다. 예를 들어 기존 애플리케이션을 처음 사용하는 경우 기존 데이터베이스 소스를 사용하도록 애플리케이션을 구성하는 좋은 모델로 사용합니다.
  3. 웹 서비스는 간단한 URI를 사용하여 요청을 보내고 응답 결과를 JSON과 같은 일반적인 형식으로 되 돌리는 유연한 옵션을 허용하도록 발전했습니다. 즉, 신뢰할 수있는 균일 한 인터페이스를 장려하는보다 일반적인 표준을 사용하여 클라이언트 응용 프로그램을 개발할 수 있습니다.

ASP.NET Web Api에 관심이 있고 먼저 데이터 서비스를 만들 계획입니다.

저는 최근 엔터티 프레임 워크를 사용하여 .NET MVC 웹 애플리케이션에 중점을두고 있습니다.

  1. 이미 MVC를 사용하고 있다면 Web Api는 Api 컨트롤러와 함께 MVC도 사용하므로 서비스 구축을위한 학습 곡선이 상당히 어렵지 않습니다.

저는 최근에 Oracle 저장 프로 시저를 기반으로 구축하고 있던 MVC 웹 앱으로 인해 좌절감을 느꼈습니다. 웹 구성 연결 및 TNS 이름을 기반으로 사용할 올바른 dll 파일을 찾는로드 시간 어셈블리를 사용하여보다 현대적인 연결 팩토리 접근 방식을 추진하는 Visual Studio 2012의 또 다른 문제를 제시 한 Oracle 9 또는 이전 버전의 원래 버전.

데이터베이스에 대한 연결 시도가 '더 이상 지원되지 않음'오류 메시지와 함께 실패했습니다. 호기심으로 Oracle 12c를 다운로드하고 TNS 이름과로드 어셈블리 dll과 잘 작동하는 애플리케이션 수준 연결을 만들었으며 문제없이 Oracle과 함께 작업 할 수있었습니다.

이전 Oracle 버전에 대한 연결로 작동하는 웹 서비스가 구축되었습니다. 그들은 내 실망 스럽지만 선택한 테이블에 특별히 매핑 된 방법으로 구축되었습니다. 나는 직접 써야 할 것입니다.

Oracle 데이터베이스를 유지 관리하는 그룹은 클라이언트 인터페이스와 비즈니스 논리 계층을 추상화하는 데 사용했던 이전 저장 프로 시저를 대체하기 위해 새 저장 프로 시저를 작성할 것이라고 들었습니다.

그래서 첫 번째 생각은 드롭 다운 목록 채우기 또는 엔터프라이즈 급 데이터로 자동 완성과 같은 모든 일반적인 데이터 요청이 Oracle 저장 프로 시저를 호출하는 데이터 서비스를 통해 수행된다는 것입니다. 각 애플리케이션에 대해이 프로세스를 반복하고 각 개발자가 구성 및 버전 /로드 어셈블리, TNS 문제로 어려움을 겪게하는 이유는 무엇입니까?

그래서....

  1. 일반적으로 SQL Server 데이터 사용에 EF를 사용하는 .NET MVC 응용 프로그램에서 Oracle 저장 프로 시저를 사용하는 것과 같은 여러 데이터베이스 서버 문제의 경우 이러한 문제를 이러한 구성 문제를 격리 할 수있는 Web Api 서비스 방법으로 밀어 넣지 않는 것이 좋습니다.
  2. 클라이언트 인터페이스는 Web Api를 사용하여 SQL Server 데이터 요청을 수행하는 경우 이미 사용중인 JavaScript, JQuery 및 JSON을 사용하여 수행 할 수 있습니다.

저는 DBA가 아닌 응용 프로그램 개발자 / 분석가이므로 데이터베이스 도구가 발전 할 때 응용 프로그램을 지속적으로 수정해야하는 끊임없는 좌절감을 경험 한 경험에서 비롯된 것입니다.

참고 URL : https://stackoverflow.com/questions/2142070/why-should-a-developer-use-web-services-instead-of-direct-connections-to-a-db

반응형