2017-10-05 9 views
0

SQL Server 데이터베이스를 채우는 서비스가 있습니다. 서비스는 nodejs로 작성됩니다.여러 프로젝트에서 공유하는 데이터베이스 스키마를 저장하는 방법은 무엇입니까?

곧 데이터베이스의 데이터를 표시하는 웹 사이트를 만들어야합니다. 그런 다음 데이터베이스의 관리 패널 인 별도의 웹 사이트를 만듭니다.

데이터베이스와 상호 작용하는 서비스가 곧 추가 될 것입니다. 새로운 서비스는 동일한 언어 또는 플랫폼을 사용할 수 없습니다.

현재 데이터베이스 스키마는 서비스 코드와 함께 제공되는 SQL 파일에 포함되어 있습니다. 단위 테스트는 각 테스트 전에 파일을 사용하여 테스트 데이터베이스를 설정합니다.

2, 3 개 이상의 프로젝트가 데이터베이스 스키마를 공유하는 가장 좋은 방법은 무엇입니까?

데이터베이스를 변경하면 프로젝트 또는 해당 테스트 중 하나를 업데이트하는 것을 잊지 않도록하고 싶습니다.

업계 최고의 권장 사항은 무엇입니까? 데이터베이스 스키마가 별도의 모듈에 있어야하며 종속성을 유지해야합니까? 다른 언어를 사용하는 문제를 해결하는 방법은 무엇입니까?

+0

모범 사례에 대해 확신하지 못합니다. 하지만 각 웹 사이트에 대한 통합 테스트를 수행 할 수 있습니까? – mike123

답변

1

이것은 복잡한 문제이며 단 하나의 최상의 답변이 있는지 확신하지 못합니다.

당신이 직면하고있는 문제는 커플 링 중 하나입니다. 솔루션에는 여러 다른 인공물에 대한 종속성이 있습니다. 소프트웨어에서 가장 오래된 아키텍처 원칙 중 하나는 커플 링을 줄이는 것입니다. 버그가 발생하고 개발 속도가 느려지 며 수정하기가 더 어려워집니다.

소프트웨어 디자인에서 커플 링을 줄일 수있는 방법에는 여러 가지가 있습니다. 고전적인 대답은 인터페이스와 의존성 주입을 도입하는 것입니다. 그것은 분명히 데이터베이스에서는 실용적이지 않습니다.

"가장 깨끗한"방법은 데이터베이스를 통해 API에 액세스 할 수있게하는 것입니다. 버전 관리를 사용하면 여러 응용 프로그램이 해당 종속성을 관리 할 수 ​​있습니다. 응용 프로그램 A는 API 버전 1.0에 대해 코딩되었으며 해당 버전을 변경하지 않을 것을 약속합니다 (적어도 비추천 통지가없는 경우는 제외). 이로 인해 잠재적 인 성능 문제뿐만 아니라 상당량의 추가 작업이 도입됩니다.

보다 실용적인 솔루션은 모든 환경에 대한 자동화 된 배포 메커니즘을 고집하고 중앙 위치에서 데이터베이스 스키마를 검색하고 모든 응용 프로그램에 모든 데이터베이스 기능을 사용하기위한 통합 테스트 세트가 포함되도록하는 것입니다. 스키마의 "읽기 전용"상태와 같이 VM 이미지를 통해 개발자 및 테스트 데이터베이스를 배포 할 수 있습니다.

나는 다양한 기법을 사용하여 이것을 수행했다. 첫 번째 단계는 데이터베이스를 소스 코드 저장소에서 관리 할 수있는 텍스트 파일로 변환하는 프로세스를 작성하고 재생하여 작동중인 데이터베이스를 작성하는 것입니다. Here's 이렇게하는 방법에 대한 정보가 많은 SO 질문.

데이터베이스를 버전 제어하에 놓으면 배포 방법을 결정할 수 있습니다. 프로젝트를 요청하여 데이터베이스를 체크 아웃하고 빌드합니다. 또는 도커 이미지 또는 VM 또는 기타로 지정할 수 있습니다.

응용 프로그램에 따라 기술적 기능에 의해 강제되는 것은 아니지만 솔루션에 중요한 새 레이어를 추가하지 않아도됩니다.

+0

db 스키마의 중앙 소스를 만들려면 어떻게해야합니까? 현재 아이디어 : 1. 데이터베이스를 설정하는 SQL 파일을 저장하는 git 저장소를 만듭니다. 2. 공식 db 이미지에서 시작하여 SQL을 적용하여 db 도커 이미지를 만듭니다. 3. 각 프로젝트에 대해 도커가 파일을 작성하여 프로젝트 + db를 실행합니다. – Euphe

+0

답변을 업데이트했습니다. 데이터베이스를 버전 제어하에 가져와 통제 된 방식으로 스키마를 업데이트 할 수 있습니다. 당신이 가지고있는 것, 당신은 도커 이미지 등을 만들 수 있습니다. –