개발자의 오르막

[SpringBoot] 멀티모듈 프로젝트 생성 본문

SpringFrameWork/SpringBoot

[SpringBoot] 멀티모듈 프로젝트 생성

계단 2020. 7. 12. 23:58

# 멀티모듈 프로젝트 생성

 

1. File → New Project → Gradle, Java SDK 11 을 선택하고 Next 를 누른다. 

 

2. 프로젝트 이름과 저장 위치, 그룹 ID를 설정해준다.

 

* GroupId 란 프로젝트를 생성하는 주체, 회사 이름을 의미한다.

* AritifactId 란 프로젝트의 의미를 의미한다.

 

3. 모듈 생성하기 ( 프로젝트 선택 → new → Module ) 위와 같은 방법으로 모듈 생성

4. 아래와 같은 메뉴트리가 완성됩니다. ( gradle module 3개 )

 

5. settings.gradle 에서 아래와 같이 rootProject.name 과 include 가 명시되어 있는지 확인합니다.

rootProject.name = 'challenge-study'
include 'module-admin', 'module-web', 'module-core'

 

6. challenge-study 의 build.gradle 에서 전체 프로젝트에 적용될 스프링 디펜던시를 정의합니다.

plugins {
    id 'org.springframework.boot' version '2.1.8.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id "org.sonarqube" version "2.7.1"
    id 'java'
}

ext["hibernate.version"] = "5.4.5.Final"

allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://repo.spring.io/libs-milestone'
        }
    }
}

 

7. 이후 각각 서브 프로젝트에 사용할 디펜던시를 정의합니다.

plugins {
    id 'org.springframework.boot' version '2.1.8.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id "org.sonarqube" version "2.7.1"
    id 'java'
}

ext["hibernate.version"] = "5.4.5.Final"

allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://repo.spring.io/libs-milestone'
        }
    }
}

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

    group 'com.gig'
    sourceCompatibility = JavaVersion.VERSION_11

    dependencies {
        compileOnly('org.projectlombok:lombok')
        compile('org.springframework.boot:spring-boot-starter-jdbc')
        testCompile group: 'junit', name: 'junit', version: '4.12'
        testCompile('org.springframework.boot:spring-boot-starter-test')
        runtime('mysql:mysql-connector-java')
        runtime('com.h2database:h2')
    }

    clean {
        delete 'out'
    }
}

project(":module-core") {
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
    }
}

project(':module-web') {
    dependencies {
        compile project(':module-core')
        compile('org.springframework.boot:spring-boot-starter-web')
    }
}

project(':module-admin') {
    dependencies {
        compile project(':module-core')
        compile('org.springframework.boot:spring-boot-starter-web')
    }
}

 

 

8. 아래와 같이 module-admin, module-web 부분에 패키지 및 클래스를 구성해줍니다.

9. 각각 AdminApplication, WebApplication 을 만들어줍니다.

package com.gig;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

10. 해당 모듈에서 컨트롤러를 만들어보고 각각의 포트에서 들어가 화면이 나오는지 확인합니다.

 

- Controller 부분

@RestController
public class IndexController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

- yml 부분 (module-admin, module-web 의 포트는 다르게 구성하고, 어플리케이션 동작)

               Admin 모듈과 Web 부분의 port 는 다르게 구성해야 한다.

server:
  port: 8086

 

 

Comments