Today
-
Yesterday
-
Total
-
  • Spring Boot 멀티 모듈 프로젝트 생성하기
    Spring Boot 🍃 2023. 12. 7. 00:01

    보고 배운 사이트

    1. Spring Initializr 프로젝트 생성

    1.

    시작은 일반 프로젝트 생성할때와 똑같이 해준다.

    2.

    여기서 선택하는 종속성은

    앞으로 추가하게 될 모듈에서 모두 사용이 가능하게 된다.

    필요한 항목을 추가한 후 생성!

    2. gradle 모듈 생성

    1.

    이제부터 방금 생성한 프로젝트를

    루트 모듈이라고 이야기 할 것이다.

    루트 모듈 이름에 마우스 커서를 두고

    우클릭 -> 새로만들기 -> 모듈 을 순서대로 눌러준다.

    2.

    나타나는 창에서

    새 모듈 을 선택하고

    모듈의 이름 , 언어: java , 시스템 빌드 : gradle 를 선택 및 입력해주고

    상위: 칸에 루트 모듈이 선택되어있는지 꼭 확인한다.

    기본으로 루트 모듈이 선택되어있을 것이다.

    그리고 생성 버튼을 눌러준다.

    이런 식으로, 만들고자 하는 하위 모듈을 만들어주면 된다.

    생성하고 나면 아래와 같은 형태로 모듈이 생성된다.

    나는

    server , client , common 모듈을 생성하였다.

    api 용으로 굴러갈 server 모듈,

    client 용으로 굴러갈 client 모듈,

    server 모듈과 client 모듈에서 함께 사용할 파일을 관리할 common 모듈이다.

    모듈을 모두 생성했다면

    루트 모듈의 settings.gradle 파일을 열어본다.

    이런 식으로 생성한 모듈의 이름으로 include 코드가 작성되어있다면

    일단 성공이다!

    만약, 작성되어있지 않다면 직접 작성해주면 된다.

    3.

    그리고

    루트 모듈의 src/ 디렉토리는

    하위 모듈 사용으로 인해

    쓸 일이 없어져서 제거해주면 된다.

    3. 루트 모듈의 build.gradle 작성

    이 부분이 좀 어렵게 느껴졌었는데

    Spring Boot 3.1.1 기준으로 다음과 같이 작성해주면 된다.

    buildscript {
        ext {
            springBootVersion = '3.1.1'	// spring boot 버전 확인
        }
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
            classpath "io.spring.gradle:dependency-management-plugin:1.1.0"	// gradle 버전 확인
        }
    }
     
    // 하위 모든 프로젝트 공통 세팅
    subprojects {
        apply plugin: 'java'
        apply plugin: 'idea'
        apply plugin: 'org.springframework.boot'
        apply plugin: 'io.spring.dependency-management'
     
        group 'kim.zhyun' // 모듈 생성시 입력해주었던 이름 입력! 입력 안하고 생성했다면 com.example 임
        version '1.0-SNAPSHOT'
     
        sourceCompatibility = '17'	// 루트 모듈 생성시 선택했던 java 버전 입력
        targetCompatibility = '17'	//               "
        compileJava.options.encoding = 'UTF-8'
     
        repositories {
            mavenCentral()
        }
     
        // 하위 모듈에서 공통으로 사용하는 세팅 추가.
        // 루트 모듈 생성시 추가해주었던 종속성 항목들을 가져와 입력하면 된다.
        dependencies {
            implementation 'org.springframework.boot:spring-boot-starter-web'
            compileOnly 'org.projectlombok:lombok'
            annotationProcessor 'org.projectlombok:lombok'
            testImplementation 'org.springframework.boot:spring-boot-starter-test'
        }
     
        test {
            useJUnitPlatform()
        }
    }
     
    // 공통으로 사용될 파일을 저장 할 common 모듈 설정
    // bootJar 는  Spring Boot 애플리케이션을 실행 가능한 JAR 파일로 패키징할지 여부를 설정한다.
    //   이 값이 false 이면, 
    //   해당 모듈은 Spring Boot 애플리케이션을 실행 가능한 JAR 파일로 패키징하지 않는다.
    // jar 는 해당 모듈을 일반적인 JAR 파일로 패키징할지 여부를 설정한다.
    project(':common') {
     
        bootJar { enabled = false } // 공통 모듈은 bootJar 로 패키징 할 필요 없음
        jar { enabled = true }
     
        dependencies {
        }
    }
    // common 모듈은
    // Spring Boot 애플리케이션으로 실행 가능한 JAR 파일로 패키징하지 않고, 
    // 일반적인 JAR 파일로 패키징된다.
     
    // server 모듈 설정
    project(':server') {
     
        bootJar { enabled = true }
        jar { enabled = false }
     
        dependencies {
            implementation project(':common') // 컴파일 시 common project 로딩! common 모듈에 의존성이 생긴다.
            
            // 이하 server에서만 사용할 종속성 추가
            implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
            runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
        }
    }
    // server 모듈은
    // Spring Boot 애플리케이션으로 실행 가능한 JAR 파일로 패키징 하고, 
    // 일반적인 JAR 파일로 패키징하지 않는다.
     
    // client 모듈 설정
    project(':client') {
        bootJar { enabled = true }
        jar { enabled = false }
     
        dependencies {
            implementation project(':common') // 컴파일 시 common project 로딩
            implementation 'org.springframework.boot:spring-boot-starter-security'
            implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
            developmentOnly('org.springframework.boot:spring-boot-devtools')
            implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
            implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.2.0'
            implementation 'org.springframework.boot:spring-boot-starter-validation'
        }
    }
    // client 모듈은
    // Spring Boot 애플리케이션으로 실행 가능한 JAR 파일로 패키징 하고, 
    // 일반적인 JAR 파일로 패키징하지 않는다.

    작성이 끝났다면 gradle을 build 해준다.

    이렇게 나타나면 성공!

    4. 각각의 모듈 설정

    하위 모듈로 생성이 되면,

    main/java 디렉토리와 main/resources 디렉토리에 아무것도 들어있지 않는다.

    spring boot 실행을 위한 SpringBootApplication 파일 생성 및

    모듈이 각각 톰캣으로 실행되어야 하기 때문에

    port 번호를 지정해준다.

    단,

    common 모듈은 실행할 용도로 생성한 것이 아니기 때문에

    설정을 하지 않는다.

    1. port 번호 지정

    resources 경로에 application 설정 파일을 생성하고,

    server 모듈이 사용할 tomcat port 번호를 지정해준다.

    2. SpringBootApplication 생성

    main/java 하위에 group명을 이용한 패키지를 생성해주고,

    생성한 패키지 하위에 SpringBootApplication을 작성해준다.

    생성된 클래스에

    Spring Boot Application임을 알리는 어노테이션을 붙여주고,

    앱 실행에 필요한 메서드를 작성해준다.

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
     
    @SpringBootApplication
    public class ServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServerApplication.class, args);
        }
    }

    작성해주면 실행 버튼이 생긴다.

    저 녹색 삼각형 모양의 실행 버튼을

    처음에 한번만 눌러주면

    앞으로는 인텔리제이 창 하단의 서비스 부분에서

    실행/종료를 제어할 수 있다.

    같은 방식으로 다른 실행할 모듈도 설정해준다.

    끝!

     

Designed by Tistory / Custom by 얼거스