마이크로서비스 아키텍처에서 마이크로서비스 간에 Java 모델을 공유하는 방법
저는 제 새로운 앱의 아키텍처를 디자인하고 있습니다.저는 마이크로서비스 아키텍처를 선택했습니다.아키텍처에서 저는 다른 마이크로 서비스에서 사용되는 모델이 있다는 것을 알게 되었습니다.각 마이크로 서비스에 모델 코드를 작성하는 대신 마이크로 서비스 간에 모델 코드를 공유할 수 있는 방법이 있는지 알고 싶습니다.
그런데 저는 제 앱에 스프링 부트 프레임워크를 사용하고 있습니다.
마이크로 서비스의 API를 정의하는 모델만 공유해야 합니다.프로토버프.proto
파일 또는 파일에서 생성된 Java 클래스입니다.
이 작업은 일반적으로 별도의 프로젝트를 만들거나 마이크로서비스 프로젝트를 다중 모듈 프로젝트로 변환하여 수행되며, 모듈 중 하나는 인터페이스 정의가 있는 씬 API 모듈입니다.
마이크로 서비스 간에 코드를 공유하는 것은 잘못된 것이 아니지만 주의해야 합니다.내부 구현 세부 정보를 너무 많이 공유하면 마이크로 서비스 대신 분산된 모노리스가 됩니다.
공통 모델로 별도의 프로젝트를 만들고, 이 프로젝트의 jar를 만들고, 다른 microservices에 이 jar의 종속성을 추가할 수 있습니다.
하지만 저는 실제적인 경험이 있습니다. 이 공통 프로젝트를 유지하는 것은 악몽입니다. 매번 변경할 때마다 새로운 버전을 만들고 모든 마이크로서비스의 빌드 스크립트를 업데이트해야 하기 때문입니다.
제 생각에 우리는 마이크로 서비스 간에 모델을 공유해서는 안 됩니다.
마이크로서비스 아키텍처에서 각 아키텍처는 다른 아키텍처와 완전히 독립적이며 내부 구현의 세부 정보를 숨겨야 합니다.
모델을 공유하면 마이크로서비스를 결합하게 되고 각 팀이 제한 없이 마이크로서비스를 개발할 수 있는 가장 큰 이점 중 하나를 잃게 됩니다. 다른 마이크로서비스가 어떻게 발전하는지 알아야 합니다.각 언어에서 다른 언어를 사용할 수도 있습니다. 마이크로 서비스를 결합하기 시작하면 이는 어렵습니다.
만약 당신이 이 결정에 대해 엄격하다면, 당신은 어떤 식으로든 만족스럽지 못한 조건에 부딪힐 것입니다.SDLC와 팀의 역학 관계에 따라 다릅니다.Ipswitch에는 모두가 협업하는 많은 서비스가 있으며 기기 및 모니터와 같은 공유 개념이 있습니다.각 서비스가 이러한 서비스에 대한 자체 모델을 보유하는 것은 지속 불가능합니다.우리는 한 경우에 그렇게 했고, 번역은 단지 추가적인 작업을 만들고 불일치 결함을 초래했습니다.하지만 전체 시스템은 하나의 대규모 개발 팀에 의해 함께 구축됩니다.공유하는 것이 가장 의미가 있습니다.그러나 마이크로서비스 전반에 걸쳐 여러 팀과 여러 SDLC가 있는 기업의 경우 결합을 방지하기 위해 모델을 격리하는 것이 더 합리적입니다.그러나 이 경우에도 특정 팀에서 관리하는 긴밀한 협업 서비스 세트는 팀이 위험/이익을 인정할 경우 모델을 공유할 수 있습니다.학문과 철학 외에는 아무 문제가 없습니다.
간단히 말해서, 최소한의 공유는 하되 팀을 위해 불필요한 작업은 피하세요.
모델 클래스를 다른 프로젝트/저장소로 이동하고 이를 공유해야 하는 마이크로서비스에 종속성으로 추가할 수 있습니다.
마이크로서비스가 Swagger를 사용하는지는 모르겠지만 Swagger Codegen을 사용하여 모델을 생성할 수 있습니다.
예를 들어 User 개체를 수락하거나 반환하는 UserService가 있는 경우.UserService의 소비자는 Swagger Codegen 플러그인을 사용하여 빌드 시 사용자 클래스를 자동으로 생성할 수 있습니다.
당신은 스웨거 코덴겐 메이븐이나 그라들 플러그인을 꽤 쉽게 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/55394469/how-to-share-java-models-between-microservices-in-microservice-architecture
'IT' 카테고리의 다른 글
배열에 특정 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.07.22 |
---|---|
도커 작곡 라라벨은 데이터베이스가 로딩되기를 기다리는 방법은 무엇입니까? (0) | 2023.07.22 |
컴파일러는 함수 호출의 쉼표가 쉼표 연산자가 아님을 어떻게 알 수 있습니까? (0) | 2023.07.22 |
어레이의 첫 번째 요소를 가져오고 Aggregate를 사용하여 반환하시겠습니까? (0) | 2023.07.17 |
logging.info 이 콘솔에 표시되지 않지만 경고 및 오류가 나타납니다. (0) | 2023.07.17 |