개요.

  • 멀티모듈 프로젝트 만들때마다 고민되는 것들이 몇가지 있다.
  • 멀티모듈 만들때마다 실수하는 것들이 있다.

Queue

  • 다른 모듈 내 도메인(엔티티) 컴포넌트 스캔
  • 다른 모듈 내 디펜던시를 타 모듈에서도 중복되게 사용해도 되는지.
    • 안된다면 서비스 레이어 간의 브릿지 형태로 호출하는게 맞는가.

다른 모듈 내 빈을 인식하지 못하는 현상

그래들 멀티모듈로 프로젝트를 생성해서 진행하다 보면, 빈들이 제 각기 프로젝트에 있다. 이러한 경우에 특정 빈을 주입받아 실행되는 프로젝트에서 해당 빈이 정의되지 않는 문제가 있다.

  • Consider defining a bean of type '{package}.{class-name}' in your configuration
@SpringBootApplication
@ComponentScan({
        "com.pasudo123.study.web",
        "com.pasudo123.study.common"
})
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

컴포넌트 스캔을 모듈별로 구분해서 패키지 경로 여러 개로 나타낼 수 있도록 한다.

 

 

다른 모듈 내 디펜던시를 타 모듈에서도 중복되게 추가해도 상관없는지

예를 들어, jpa 관련 모듈을 common 또는 core 라는 공통모듈로 옮겼을 때, 해당 모듈에서만 JpaRepository 관련 메소드 수행은 물론이거니와 엔티티 관련한 내용도 여기에 포함된다. 이럴 경우 어떻게 하는게 좋을까 라는 의문이 생겼다. 

 

회사의 다른 분들은 도메인을 바라보는 관심사가 다르다면 서로 의존성을 추가해준다고 답변을 들었다. 나의 경우에는 A 라는 모듈에서 B 라는 모듈의 서비스를 호출하는 형태로 취해서 의존성이 겹치지 않도록 수행했다.

   [web]
	 |
	 |-- service layer   	(1)
     |
     
  [common]
     |
     |-- service layer		(2)
     |		
	 |-- repository layer	(3)
     |
  • 1번에서 3번을 호출을 못하니 1번을 통해 2번을 호출하고 2번에서 3번을 호출하도록 하였다.

 

다른 모듈 내 yml 파일을 읽어들어야 하는 경우

서브모듈를 여러갈래로 나누다보면 특정한 모듈은 다른 모듈에 대해서 종속성을 갖게된다. 그러면 종속되는 모듈의 설정파일을 읽어들여야 하는게 그 부분은 해당 모듈을 가진 상위 모듈에서 yml 을 읽어들일 수 있도록 해주어야 한다. 그렇게 하기 위해선 할 수 있는 경우가 두 가지가 있다.

  • spring.profiles.active
  • spring.profiles.include

include 를 통해서 {name} 여러개 기입이 가능하다.

   [web]
	 |
	 |-- application-override.yml
     |-- applicatino.yml
     
  [common]
     |
     |-- application-storage.yml
     |-- application-jpa.yml
	 |-- application-{name}.yml

이렇게 하였을 때 가장 상위 application.yml 파일을 아래와 같이 작성하면 종속된 모듈의 yml 파일을 읽어들일 수 있다.

spring:
	profiles:
    	include:
        	- jpa
            - storage
            - ...

 

 

참고할링크

Posted by doubler
,