Gradle Plugin
plugins {
id 'java-library'
}
- 빌드 프로세스를 확장하고 자동화하는데 사용
- Gradle은 해당 프로젝트를 Java 라이브러리 프로젝트로 인식하고 관련된 기본 설정들을 적용
dependencies {
api 'org.springframework.boot:spring-boot-starter-web'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
- api
- 해당 의존성을 모듈에 공용 API로 노출할 때 사용
- 이 키워드로 선언된 의존성은 이 모듈을 의존하는 다른 모듈에서도 접근할 수 있음
- 예시)
- 지금 프로젝트를 'A'
- 'A' 프로젝트는 Spring Boot Starter Web 이라는 의존성을 포함을 하고 있고
- 또 'B'라는 모듈이 있다라고 가정을 했을 때, 이 'B'가 'A'를 의존한다고 가정
- 그렇게 되면 API로 의존을 하고 있기 때문에 이 'B' 모듈도 Spring Boot Starter Web 이라는 모듈에도 이 의존성에 접근을 할 수 있음
- implementation
- 해당 의존성을 모듈 내부에서만 사용할 때 모듈 내부에만 사용이 되기 때문에 이 키워드로 선언된 의존성은 다른 모듈에서 접근을 할 수가 없게 됨
- 똑같은 상황이 있었을 때 'B' 모듈에서는 'A'를 의존하고 있고 Spring Boot Starter Web에는 볼 수가 없게 됨
- 장단점
- API 방식
- API 방식은 공용 API를 외부에 노출함으로써 재사용성이 좀 높아지는 장점
- 컴파일 클래스 패스가 커지기 때문에 빌드 성능이 저하가 될 수 있음
- 모듈 간의 의존성이 강해지기 때문에 변경에 취약해짐
- Implementation 방식
- 모듈 간의 결합도를 낮춰서 캡슐화가 잘 유지되는 점
- 컴파일 클래스 패스가 작아지기 때문에 빌드 성능이 조금 더 향상 됨
- 재사용성이 떨어질 수 있음
- 사용 권장
- API 방식
Multi Module
my-multi-module-project/
|-- build.gradle
|-- settings.gradle
|-- module1/
| |-- build.gradle
|-- module2/
|-- build.gradle
- 루트에 빌드 그래들 파일과 세팅 그래들 파일이 위치하게 됨
- 하위에 모듈들이 위치하게 됨(module1, module2)
- 각 모듈들은 build.gradle을 각각 갖고 있게 됨
rootProject의 settings.gradle을 보면
// settings.gradle
rootProject.name = 'my-multi-module-project'
include 'module1', 'module2'
- 루트 프로젝트 네임을 명시 해주게 됨
- 각각의 하위 모듈들을 인클루드하는 설정이 들어감
module1 : 하위 모듈의 Gradle 파일을 보면
// module1/build.gradle
plugins {
id 'java-library'
}
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0'
}
- 적용해야 되는 플러그인을 명시, Dependency 설정
module2 :
// module2/build.gradle
plugins {
id 'java-library'
}
dependencies {
implementation project(':module1')
implementation 'com.google.guava:guava:30.1-jre'
}
- 첫번째 모듈을 의존하는 모습을 볼 수 있음
- 콜론 기호를 통해 의존성을 나타낼 수 있음
'Spring관련 기술 > 서버개발' 카테고리의 다른 글
MethodArgumentTypeMismatchException (0) | 2024.08.30 |
---|---|
MissingServletRequestParameterException (0) | 2024.08.30 |
NoResourceFoundException (0) | 2024.08.30 |
부하테스트 툴 Ngrinder (0) | 2024.02.17 |
Forward Proxy, Reverse Proxy, Load Balancer (0) | 2024.01.08 |