본문 바로가기

TIL

[TIL] 🌱 2023.04.24 - 멀티 모듈

🛹 목표

목표 난이도 달성 여부
패스트 캠퍼스 강의 듣기
😘 ✔️
알고리즘 문제풀이 🥺 ✔️

📋 공부 내용 & 기록

스프링 Mutil Module 개념 학습

▶ Multi Module

  • 필요한 기능별로 Module을 생성하여 서로 결합하여 사용
  • 중복된 기능들을 모듈화하여 하나로 관리함으로써 리스크를 줄일 수 있음
  • 멀티 모듈 구조에서는 원하는 모듈을 골라서 빌드, 배포 가능

 모듈간 의존성 설정 방법

  1. root 프로젝트의 settings.gradle에 생성할 모듈을 작성 include {'참조하려는 모듈 이름'}
  2. 각 모듈의 settings.gradle은 제거(각 모듈에 존재한다면 루트의 settings.gradle보다 우선순위를 높게하여 확인)
  3. 현재 사용 중인 모듈에서 다른 모듈을 참조하려면 build.gradle의 dependencies에 implementation project({'참조하려는 모듈 이름'})을 입력한다.

 컴포넌트 스캔하기

@SpringBootApplication(
        scanBasePackages = { "dev.be.moduleapi", "dev.be.modulecommon" }
)
@EntityScan("dev.be.modulecommon.domain")
@EnableJpaRepositories(basePackages = "dev.be.modulecommon.repositories")
  • 외부 모듈의 빈을 주입하기 위해서는 별도의 설정이 필요
  • scanBasePackages에서 Bean으로 등록할 Package path를 지정해준다.
  • JPA와 관련된 Entity와 Repository는 여기서 Scan이 되지 않아 @EntityScan, @EnableJpaRepositories 어노테이션을 별도로 사용해서 등록을 시도해야 한다.(명시적으로 등록해주지 않으면 컴파일 시점에 에러 발생)

 

 gradle로 빌드

  • tasks.bootJar { enabled = false }
    • 기본값 true
    • 빌드 시에 xxx.jar 파일 생성
    • 애플리케이션을 실행시키는데 필요한 파일, 클래스, 리소스, 디펜던시 내용을 추가
  • tasks.jar { enabled true }
    • 기본값 true
    • 빌드 시에 xxx-plain.jar 파일 생성
    • 클래스와 리소스만 포함(디펜던시를 갖고있지 않음)
  • ex) ./gradlew clean :module-api:buildNeeded --stacktrace --info --refresh-dependencies -x test
    • clean : 기존에 빌드되어 있는 폴더를 지우고 새로 빌드
    • module-api:buildNeeded : 모듈-api를 빌드할 것
    • --stacktrace : 로깅이나 예외가 발생했을 때 추적하기 위해 trace를 볼 것
    • --info : 로깅 레벨을 설정할 것인데 debug -> info -> warn -> error info 이상(info, warn ,error)으로 설정하겠다.
    • --refresh-dependencies : 디펜던시를 한번 더 리프레쉬
    • -x test : 테스트는 동작시키지 않고 빌드

 Profile이 필요한 이유(yaml 파일)

  • 실제 회사에서 개발할 때 N개의 profile을 설정(local, dev, test, prod 등)
  • 프로파일을 나누는 이유는 환경 별로 설정해야 하는 Property 값들이 다르기 때문
  • 실제 프로젝트에서는 다음과 같은 파일로 환경 별 Property를 구분
    • ex) application-{env}.yaml
    • ex) application-local.yaml, application-pdev.yaml, application-prod.yaml
  • 터미널에서 프로파일 설정방법 : java -jar -Dspring.profiles.active=local module-api-0.0.1-SNAPSHOT.jar