일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript async await
- JPA플러시
- JPA플러쉬
- javascript api 호출
- spring gradle 모듈
- jpa 영속성
- springboot gradle 모듈 프로젝트
- 코틀린
- js await
- JPA준영속 상태
- gradle 모듈 프로젝트
- js fetch
- ja async
- jpa준영속
- javascript fetch
- 스프링부트
- springboot 모듈
- JavaScript
- 코프링
- js api 호출
- 준영속상태
- spring 모듈 프로젝트
- Flutter
- JPA
- jpa 플러시
- javascript async
- 코틀린 클래스
- js async await
- JS
- jpa 플러쉬
Archives
- Today
- Total
매일 한줄 코딩
Springboot + gradle 모듈 프로젝트 생성 본문
아래의 구조와 같이 현재 하바쪽 플래닛관련 프로젝트를 생성했습니다.
큰 구조는
project-module (가칭 명칭은 알아서 바꾸시면 됩니다. ) 이라는 껍데기 (부모모듈)이
하위 모듈을 감싸는 형태로 개발되어있습니다.
모듈화의 장점중 하나는 공통적으로 쓰이는 model(entity, request, response 등) 객체와, util 등을 한곳에 두고 추후 빌드시 jar화 되어 각각 프로젝트에 포함되어 사용하기 때문에 한곳만 수정하면 공통적인 부분은 모두 반영할 수 있습니다.
즉,
project-module은 gradle module 프로젝트입니다.
project-module(parents) : 하위 모듈을 감싸기위한 root 프로젝트라고 보시면 됩니다.
project-module 프로젝트에는 하위 프로젝트가 존재합니다.
- core : 공통적인 model, util 등을 작성하여 다른 프로젝트에서 참조 가능하도록 구성
- api : api 서버를 담당.
- batch : batch 서버를 담당.
project-module/
├── api
│ ├── gradle
│ │ └── wrapper
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── com
│ │ │ └── project
│ │ │ └── api
│ │ │ ├── config
│ │ │ ├── domain
│ │ │ │ ├── project
│ │ │ │ │ ├── repository
│ │ │ │ │ └── service
│ │ │ │ ├── queue
│ │ │ │ └── trace
│ │ │ │ ├── repository
│ │ │ │ └── service
│ │ │ └── infra
│ │ └── resources
│ └── test
│ └── kotlin
│ └── com
│ └── project
│ └── api
├── batch
│ ├── gradle
│ │ └── wrapper
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── com
│ │ │ └── project
│ │ │ └── batch
│ │ └── resources
│ └── test
│ └── kotlin
│ └── com
│ └── project
│ └── batch
├── core
│ ├── gradle
│ │ └── wrapper
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── com
│ │ │ └── project
│ │ │ └── core
│ │ │ ├── model
│ │ │ │ ├── project
│ │ │ │ ├── queue
│ │ │ │ └── trace
│ │ │ └── utils
│ │ └── resources
│ └── test
│ └── kotlin
│ └── com
│ └── project
│ └── core
├── build
│ └── kotlin
│ └── sessions
└── gradle
└── wrapper
- 만드는 방법
먼저 껍데기 부모 모듈 프로젝트를 하나 만듭니다. (스프링부트 + gradle 설정)
껍데기 부모 모듈은 src를 포함하여 하위 디렉토리는 모두 삭제합니다.
그다음 아래와같이 부모 모듈에서 New→Module… 을 선택하여줍니다.
저는 스프링 이니셜라이져를 사용했으나, 그래들이 있으면 그래들 프로젝트로 생성하여도 무관합니다.
생성해준다음, 부모 모듈의 settings.gradle.kts 파일을 열어 추가한 모듈의 명칭을 기입하여줍니다.
rootProject.name = "project-module"
include("api")
include("core")
include("batch")
부모 모듈의 build.gradle.kts 파일을 열어 아래와같이 해줍니다.
importorg.jetbrains.kotlin.gradle.tasks.KotlinCompile
importorg.springframework.boot.gradle.tasks.bundling.BootJar
plugins {
id("org.springframework.boot") version "2.7.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21" applyfalse
}// -- end plugins
java.sourceCompatibility = JavaVersion.VERSION_17
allprojects {
group = "com.project"
version = "0.0.1-SNAPSHOT"
repositories {
mavenCentral()
}
}// -- end of allprojects
subprojects {
apply(plugin = "io.spring.dependency-management")
apply(plugin = "org.springframework.boot")
apply(plugin = "org.jetbrains.kotlin.plugin.spring")
apply(plugin = "kotlin")
apply(plugin = "java")
dependencies {
// org.springframework.boot관련 dependencies
implementation("org.springframework.boot:spring-boot-starter")
developmentOnly("org.springframework.boot:spring-boot-devtools")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
implementation("org.springframework.boot:spring-boot-starter-validation")
// kotlin관련 dependencies
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
// test관련 dependencies
testImplementation("org.springframework.boot:spring-boot-starter-test")
// DB관련 dependencies
}// -- end of subprojects-dependencies
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.register("prepareKotlinBuildScriptModel"){}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
}// -- end of subprojects
//각각의 모듈에 build.gradle.kts내에서 쓸것만 정의하도록 구현함.
//여기에 하나의 파일로 분류할 수는 있으나..큰(부모)모듈을 reload해야 되는 상황이 발생하거나,
//각각 필요에따라 빌드 스크립트를 넣을 경우를 때문에..
//따로 각각의 모듈에 build.gradle.kts를 두어 불필요한 빌드는 하지 않는 방향으로 작성함.
//api
project(":api") {
dependencies {
implementation(project(":core"))
}
}
//batch
project(":batch") {
dependencies {
implementation(project(":core"))
}
}
//core
project(":core") {
valjar: Jarbytasks
valbootJar: BootJarbytasks
// jar는 만드나, boot로 실행되는 jar는 만들지 않도록 하는 설정
bootJar.enabled =false
jar.enabled =true
}
주석을 보면 이해하기 쉽습니다.
- 위와같이하면 사실상 끝이납니다. 그다음으로는 각각 하위 모듈 프로젝트에 필요한 dependency 들을 각각의 build.gradle.kts 에 추가하여 주면 됩니다. 그럼 공통적으로 쓰지 않는 dependency만 각각 모듈에서 추가하여 필요한 프로젝트에 알맞게 사용 가능합니다. 모든 프로젝트에서 사용할 공통적인 dependency는 부모 모듈의 build.gradle.kts에 넣어주면 됩니다.
'develop > spring' 카테고리의 다른 글
#6] 젠킨스 jenkins와 github 연동 후 배포하기. (2) | 2021.11.24 |
---|---|
#5] Spring Swagger 설정하기 (0) | 2021.09.29 |
#4] 스프링부트 DB 연동 하기. (0) | 2021.09.26 |
#3] 스프링부트 logback 설정 및 로그유틸 설정 (1) | 2021.09.18 |
#2] 스프링부트 properties 설정 (0) | 2021.09.18 |
Comments