Spring

특정 스프링 빈을 나머지 엔드 포인트의 소비자에게 반환하면 어떻게 되나요?

기록만이살길 2021. 3. 12. 05:04
반응형

특정 스프링 빈을 나머지 엔드 포인트의 소비자에게 반환하면 어떻게 되나요?

1. 질문(문제점):

여러 스프링 부트 모듈이있는 프로젝트가 있습니다. 우리의 데이터 계층은 모델 객체에 대한 CRUD 및 파인더의 더 단순하고 일반적인 상황이 아니며 데이터와 상호 작용하는 서비스에 필요한 메타 데이터에 대한 더 많은 구성 및 지식이 있습니다. 다른 여러 모듈에 중요한 구성을 통합하는 모듈이 있고 이러한 인스턴스를 스프링 빈으로 등록한 경우 나머지 엔드 포인트에서 소비자에게 반환하면 어떻게됩니까? 예를 들어 이러한 개체 중 하나가 사용자 지정MongoRepository이행. 반환 된 인스턴스가 작동합니까? 두 모듈이 인스턴스를 요청하기 위해 엔드 포인트를 호출 한 경우 소비자 모듈에서 역 직렬화되었을 때 인스턴스가 작동합니까? 소비자가 나머지 엔드 포인트를 호스팅하는 서비스와 다른 JVM에있는 경우 차이가 있습니까?

나머지 컨트롤러가 모델 객체를 보내고 소비자가받을 때 어떤 일이 발생하는지 고려할 때 대답이 간단 해 보이는지 확실하지 않습니다. 저장소에는 SSL 일 수도 있고 아닐 수도있는 데이터베이스에 대한 설정된 연결이 포함됩니다. 인증 및 권한 부여와 같은 것에서는이 접근 방식이 실행 가능하지 않은 것처럼 보이지만 실제로 이것을 이해하는지 확인하기 위해 질문을 할 것이라고 생각했습니다. 이 구성이 필요한 모듈에 포함 할 수있는 라이브러리 (jar)로이 모듈을 만드는 것과 비교하여이 접근 방식을 비교하고 있습니다. 그래도 jar / library 메서드로만이 작업을 수행 할 수 있다고 생각합니다.

2. 해결방안:

(휴식) 엔드 포인트를 통해 리포지토리, 서비스, 데이터 소스 등과 같은 인프라 빈을 리소스로 노출해서는 안됩니다. 그것은 (이상한) 문제로 이어질 것입니다.

예를 들어 노출 MongoRepository하고 직렬화되면 (java를 통해 Serialization) 왜 내 컴퓨터에서 작동해야합니까? 나는 MongoDB에 연결되어 있Map 않고, 심지어 그것에 대해 신경 쓰Map 않을 수도 있습니다. JpaRepositoryOracle 또는 DB2와 같은 엔터프라이즈 급 데이터베이스 서버에 연결하는 경우도 마찬가지입니다 . 나는 확실히 그것도, 모든 스키마와 데이터를 가지지 않을 것입니다.

따라서 일반적으로 (나머지) 엔드 포인트를 통해 이러한 서비스를 노출하지 마십시오.

(나머지) 엔드 포인트는 인프라 (또는 애플리케이션) 관련 Bean이 아닌 모델 만 노출해야합니다.

65718361
반응형