hyeonga_code

Project_01_Spring Boot Gradle Multi Module Project 생성하기 본문

Project_HYEONGARL

Project_01_Spring Boot Gradle Multi Module Project 생성하기

hyeonga 2024. 5. 28. 05:59
반응형

 

새로운 프로젝트를 작업하면서 스프링부트에 대해 자세하게 알고 넘어가는 것이 아닌 급하게 처리하면서 작업을 하고 뒤죽박죽인 내용으로 인해 정리를 하고 넘어가려고 한다.

잘못된 부분이 있다면 알려주시면 감사하겠습니다.

 

- 요약
SpringBoot 프로젝트 생성
.gitIgnore 정리
멀티모듈 생성
build.gradle 작성 및 빌드
application.properties (프로젝트 설정)            ? .properties / .yml 비교
SpringBoot 실행(ApiApplication / ApiApplicationTests)

 

 

1. SpringBoot Generator 프로젝트 생성

멀티 모듈을 사용하려고 한다.
메인 프로젝트 폴더에는 코드가 포함되지 않으므로 src, build.gradle이 필요하지 않다.

 

 

2. .gitignore 파일 수정하기

> 기존 파일

더보기
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/

필요한 정보만 남기고 모두 제거한다.

> 수정 파일

### Gradle ###
.gradle/
build/
!gradle/wrapper/gradle-wrapper.jar

### IntelliJ IDEA ###
.idea/
out/

### Common Java ignores ###
*.class
*.log

 

+ gradlew 파일은 읽어보는게 좋다고 한다. 시간 내서 읽기 목표

 

 

3. Multimodule 적용

먼저 API 모듈만 생성하고 추후 분리가 필요한 경우 변경하기로 한다.

프로젝트 클릭 > 새로 만들기 > 모듈 > api (Spring Boot 모듈로 생성했다)

 

다음 클릭 시 종속성을 추가할 수 있는데 추후 직접 작성하려고 한다.

생성 클릭 시 모듈이 추가된다.

모듈에서 필요하지 않은 파일을 모두 삭제한다.

 

 

 

 

5. build.gradle 수정

> 기존 파일

더보기
plugins {
    id 'java'
}

group = 'com.hyeongarl'
version = 'unspecified'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

test {
    useJUnitPlatform()
}

 

현재 사용할 파일만 작성하도록 한다.

lombok은 Spring에서 관리하는 플러그인으로 변경했다.

> 수정 파일

plugins {	// Gradle에서 지원하는 플러그인
    id 'java'
    id 'org.springframework.boot' version '3.2.5'
    id 'io.spring.dependency-management' version '1.1.5'
    id "io.freefair.lombok" version "8.6"

    /*
        1) id 'java'
            java 코드 컴파일, 테스트, 애플리케이션 패키징
        2) id 'org.springframework.boot' version '3.2.5'
            SpringBoot 애플리케이션을 실행, 실행 가능한 JAR 또는 WAR패키징
        3) id 'io.spring.dependency-management' version '1.1.5'
            일관된 방식으로 종속성을 관리하는 데 사용
            섹션을 사용하여 프로젝트의 모든 종속성에 적용해야 하는 종속성 버전을 정의하여 충돌을 방지
        4) id "io.freefair.lombok" version "8.6"
            롬복 사용 (gradle에서 관리하므로 플러그인으로 설정 가능)
    */
}

// 프로젝트 그룹 ID 설정 (패키지 이름 지정 및 종속성 관리에 사용)
group = 'com.heyongarl'

// 프로젝트의 버전을 설정
version = '1.0-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
	}
    /*
        toolchain VS sourceCompatibility
        toolchain
            Gradle 자체를 실행하는 데 사용되는 JDK와 별개로
            프로젝트를 컴파일, 테스트, 실행하는 데 사용할 JDK 버전을 지정할 수 있다.
        sourceCompatibility
            소스 코드의 Java 버전 호환성을 명시하는 데 사용
    */
}

repositories {
    mavenCentral()
}

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

    // JPA
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // MySQL JPA
    runtimeOnly 'com.mysql:mysql-connector-j'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    /*
        1) implementation 'org.springframework.boot:spring-boot-starter-web'
            Spring MVC를 사용하여 웹 애플리케이션을 빌드하기 위한 종속성
        2) implementation 'org.springframework.boot:spring-boot-starter-web-services'
            웹 서비스 제작을 지원
        3) implementation 'org.springframework.boot:spring-boot-starter-validation'
            Java Bean의 유효성을 검사하기 위한 종속성 (@NotNull, @Size)
        4) implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
            Spring Data JPA를 포함한 JPA 기반 데이터 엑세스에 대한 지원을 제공
        5) runtimeOnly 'com.mysql:mysql-connector-j'
            MySQL 데이터베이스에 연결하는 데 필요한 MySQL JDBC 드라이버
        6) testImplementation 'org.springframework.boot:spring-boot-starter-test'
            JUnit, Jamcrest, Mockito를 포함한 Spring Boot 애플리케이션 테스트를 위한 종속성
    */
}

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

 

 

6. Wrapper 설치하기

IntelliJ 하단의 터미널 창을 열어 wrapper를 설치한 후 build.gradle을 빌드해야 한다.

 

 

7. 빌드하기

오른쪽 상단의 코끼리 아이콘을 클릭하면 바로 Build한다.

상단 코끼리 아이콘

 

 

 

프로젝트 구조

 

 

8. 데이터베이스 연결 (MySQL)

바로 스프링부트를 실행하려다가 데이터베이스 연결을 하지 않아 오류가 발생했다.

Spring Boot 애플리케이션에서 구성 파일로 사용하는 형식은 두가지가 있다.

1)  application.properties

server.port=xxxx
spring.datasource.url=xxxxxx
spring.datasource.username=xxxx
spring.datasource.password=xxxxx
spring.jpa.hibernate.ddl-auto=xxxx
logging.level.org.springframework=xxxx

형식이 단순하여 쉽게 읽고 쓸 수 있다.

키/값 쌍으로 설정하여 한 눈에 보기 쉽다.

한 줄에 하나의 설정으로 설정 관계를 명확하게 할 수 있다.

 

중첩된 구조나 계층적 데이터를 표현하기 어렵다.

동일한 접두사가 반복되는 경우 반복적인 설정이 많아질 수 있다.

 

2) applicaton.yml

server:
  port: xxxx

spring:
  datasource:
    url: xxxxx
    username: xxxx
    password: xxxx
  jpa:
    hibernate:
      ddl-auto: xxxx

logging:
  level:
    org.springframework: xxxx

중첩된 구조나 계층적인 데이터를 자연스럽게 표현할 수 있다.

계층 구조가 명확하게 드러나 가독성이 좋다.

동일한 접두사를 사용하는 설정을 그룹화하여 중복을 줄일 수 있다.

 

공백이나 들여쓰기에 민감하여 구문 오류가 발생할 확률이 높다.

복잡한 계층 구조를 표현할 때 가독성이 떨어질 수 있다.

 


단순한 설정만 필요한 경우 application.properties
계층적이고 복잡한 설정, 가독성을 높이는 것이 목적인 경우 application.yml

 

 

api / src / main / resources 폴더 하위의 application.properties에 작성

spring.application.name=api

# 개발 환경 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/hyeongarl?serverTimezone=Asia/Seoul
spring.datasource.username=hyeongarl
spring.datasource.password=hyeongarl@45

spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true

 

 

9. 스프링 부트 실행 (ApiApplication.java /main)

파일을 찾아 실행을 하는 경우 이 화면이 출력되면 성공한 것이다.

 

주소창에 http://localhost:8080/ 입력 시 출력된다.

 

서버를 종료한다.

 

10. 스프링 부트 테스트 서버를 실행  (ApiApplicationTests.java /test)

 

 

반응형