[IntelliJ] Gradle 멀티 모듈 프로젝트 생성법

식빵·2025년 8월 3일
0

intellij

목록 보기
19/19

1. Spring Initializr를 통해 Spring Boot 프로젝트를 하나 만듭니다.
( gradle-groovy 기반으로 만들어주세요 )

2. 해당 프로젝트를 Intellij IDE 로 열고,
최상위 디렉토리의 src 디렉토리는 사용 안하므로 삭제합니다.

3. 최상위 디렉토리에 하위 모듈로 사용할 디렉토리를 생성합니다.
저는 producer, consumer 라는 디렉토리 2개를 만들었습니다.

4. 최상위 디렉토리에 있는 build.gradle 파일을 열어 봅니다.
아마 처음에는 아래처럼 생겼을 겁니다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.5.4'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'coding.toast'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
    	languageVersion = JavaLanguageVersion.of(17)
    }
}

configurations {
	compileOnly {
    	extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
	useJUnitPlatform()
}

위처럼 생긴 파일의 내용을 아래와 같이 수정해줍니다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.5.4'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'coding.toast'
version = '0.0.1-SNAPSHOT'

allprojects {

    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    repositories {
        mavenCentral()
    }

    dependencies {
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    }

    tasks.named('test') {
        useJUnitPlatform()
    }

}

보면 알겠지만 allprojects 라는 걸 하나 만들고 그 하위에 모든 내용을 집어 넣은 후,
apply plugin 을 사용해서 최상위에 작성된 plugin 들을 하나하나 적용한 것을
확인할 수 있습니다.


6. 이후에 최상위 디렉토리에 있는 settings.gradle 파일을 수정하는데,
앞서 3번에서 여러분들이 생성한 모듈로 사용할 디렉토리리 명칭을 include 를 통해서
적용해줘야 합니다. 저는 consumer, producer 2개의 디렉토리를 생성했으므로 아래와 같이 수정합니다.

rootProject.name = 'root'

include 'consumer'
include 'producer'

rootProject.name 은 건들지 마세요! 여러분들이랑 저랑 다를 수 있습니다!
include 만 여러분들이 생성한 디렉토리명을 잘 지정해주세요.


7. 최상위 디렉토리 하부에 생성한 각각의
디렉토리(consumer, producer 디렉토리)에 들어가서 build.gradle 파일을 생성합니다.

그리고 내용을 아래와 같이 내용을 작성하여 dependency 하나를 추가해줬습니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

8. 이쯤에서 최상위 디렉토리에 있는 build.gradle 파일을 열고,
오른쪽 상단에 있는 코끼리 버튼(Sync Gradle Changes) 버튼을 클릭해줍니다.


  1. 최상위 디렉토리 하위 모듈 디렉토리(producer, consumer) 각각에
    아래와 같은 방법으로 src 디렉토리를 생성합니다.

결과적으로 하위 모듈 디렉토리는 아래와 같은 디렉토리 구조가 됩니다.


  1. 이후에 src/main/java 하위에 여러분들의 패키지를 생성합니다.

여기서 패키지명을 지정할 때는 웬만하면 최상위 디렉토리에 있는 build.gradle 파일
에 있는 group 명칭(저의 경우에는 group = 'coding.toast')을 사용해서
패키지명을 지정해주시기 바랍니다. 이래야 통일성이 생긴답니다.


10. 마지막으로 생성한 패키지 하위에 SpringApplication 클래스를 하나 생성하고,
가볍게 테스트만 해보겠습니다. 에러 없이 실행됐다면 잘 된겁니다.

package 여러분들의.패키지.;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@SpringBootApplication
public class SampleApplication {

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(SampleApplication.class);

        // Set properties programmatically
        Map<String, Object> props = new HashMap<>();
        props.put("server.port", 0); // 랜덤 포트 사용
        app.setDefaultProperties(props);

        ConfigurableApplicationContext context = app.run(args);

    }

}

@RestController
class SampleController {
    @GetMapping("/hello")
    public Map<String,String> some() {
        return Map.of("hello", "world");
    }
}
profile
백엔드 개발자로 일하고 있는 식빵(🍞)입니다.

0개의 댓글