나는 약 4 년 전에이 답변을 썼는데 제 의견은 변하지 않았습니다. 그러나 그 이후로 마이크로 서비스 분야에서 상당한 발전이있었습니다. 마지막에 마이크로 서비스 관련 메모를 추가했습니다 ...
표를 뒷받침 할 실제 경험을 바탕으로 아이디어에 반대합니다.
단일 데이터베이스에 대한 5 개의 컨텍스트가있는 큰 응용 프로그램으로 전환되었습니다. 결국 우리는 하나의 컨텍스트로 돌아가는 것을 제외하고 모든 컨텍스트를 제거했습니다.
처음에는 여러 상황에 대한 아이디어가 좋은 아이디어처럼 보입니다. 데이터 액세스를 도메인으로 분리하고 몇 가지 깔끔하고 가벼운 컨텍스트를 제공 할 수 있습니다. DDD처럼 들리 죠? 이는 데이터 액세스를 단순화합니다. 또 다른 주장은 필요한 컨텍스트에만 액세스한다는 점에서 성능에 대한 것입니다.
그러나 실제로 응용 프로그램이 커짐에 따라 많은 테이블이 다양한 컨텍스트에서 관계를 공유했습니다. 예를 들어, 컨텍스트 1에서 테이블 A에 대한 쿼리는 컨텍스트 2에서 테이블 B를 조인해야했습니다.
이것은 우리에게 몇 가지 잘못된 선택을 남겼습니다. 다양한 상황에서 테이블을 복제 할 수 있습니다. 우리는 이것을 시도했다. 이로 인해 각 엔티티에 고유 한 이름이 있어야하는 EF 제한 조건을 포함한 여러 맵핑 문제점이 발생했습니다. 그래서 우리는 다른 상황에서 Person1과 Person2라는 엔티티로 끝났습니다. 우리는 이것이 저조한 디자인이라고 주장 할 수 있지만 최선의 노력에도 불구하고 이것이 실제로 응용 프로그램이 실제로 성장하는 방식입니다.
또한 필요한 데이터를 얻기 위해 두 컨텍스트를 모두 쿼리했습니다. 예를 들어, 우리의 비즈니스 로직은 컨텍스트 1에서 필요한 것의 절반을 컨텍스트 2에서 요구합니다. 단일 컨텍스트에 대해 하나의 쿼리를 수행하는 대신 서로 다른 컨텍스트에서 여러 쿼리를 수행해야했습니다. 이것은 실제 성능 저하가 있습니다.
결국 좋은 소식은 여러 컨텍스트를 쉽게 제거 할 수 있다는 것입니다. 문맥은 가벼운 물체로 만들어졌습니다. 따라서 여러 상황에서 성능이 좋은 주장이라고 생각하지 않습니다. 거의 모든 경우에있어, 단일 컨텍스트는 더 단순하고 덜 복잡하며 성능이 더 우수 할 것으로 생각하며,이를 위해 많은 해결 방법을 구현할 필요가 없습니다.
여러 상황이 유용 할 수있는 상황을 생각했습니다. 실제로 하나 이상의 도메인을 포함하는 데이터베이스의 물리적 문제를 해결하기 위해 별도의 컨텍스트를 사용할 수 있습니다. 이상적으로 컨텍스트는 도메인과 일대일이며 데이터베이스와 일대일입니다. 즉, 테이블 세트가 주어진 데이터베이스의 다른 테이블과 관련이없는 경우 별도의 데이터베이스로 가져와야합니다. 이것이 항상 실용적이지는 않다는 것을 알고 있습니다. 그러나 테이블 세트가 너무 다르기 때문에 테이블을 별도의 데이터베이스로 분리하는 것이 편하다고 생각하지만 (그렇지 않은 경우) 실제로는 별도의 도메인이 두 개 있기 때문에 별도의 컨텍스트를 사용하는 경우를 볼 수 있습니다.
마이크로 서비스와 관련하여 하나의 단일 컨텍스트가 여전히 의미가 있습니다. 그러나 마이크로 서비스의 경우 각 서비스에는 해당 서비스와 관련된 데이터베이스 테이블 만 포함하는 고유 한 컨텍스트가 있습니다. 다시 말해, 서비스 x가 테이블 1 및 2에 액세스하고 서비스 y가 테이블 3 및 4에 액세스하는 경우, 각 서비스는 해당 서비스에 특정한 테이블을 포함하는 고유 한 컨텍스트를 갖습니다.
나는 당신의 생각에 관심이 있습니다.