-
[SpringBoot] IntelliJ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ ์์ฑ / ์ด๊ธฐ ์ค์ (์ธํ ๋ฆฌ์ ์ด 2023Ver)๐ปProgramming/SpringBoot 2023. 9. 17. 23:01
์คํ๋ง ์ด๋์ ๋ผ์ด์ (https://start.spring.io/)๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๊ธฐ ์ธํ ์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ง๊ธ ๊ณต๋ถํ๋ฉฐ ๊ธ์ ์์ฑํ๋ ์ฑ (์คํ๋ง๋ถํธ์ AWS๋ก ํผ์ ๊ตฌํํ๋ ์น ์๋น์ค)์ ์คํ๋ง๋ถํธ๋ฅผ ์ ๋๋ก ์ดํดํ๊ธฐ ์ํด์ build.gradle์ ํ๋ํ๋ ์ด๊ธฐ ์ธํ ์ ํด๊ฐ๋ฉฐ ์คํ๋ง๋ถํธ ๊ฐ๋ฐํ๊ฒฝ์ ๊ตฌ์ฑํด ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๊ธฐ ๋๋ฌธ์ build.gradle์ ํ๋ํ๋ ์ ๋ ฅํด๊ฐ๋ฉฐ ์ด๊ธฐ setting์ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ด ์ฑ ์ด ์๋ ์ฑ ์ด๋ผ ๊ทธ๋ฐ์ง ๊ฐ๋ฐํ๊ฒฝ์ ๊ตฌ์ฑํ๊ฑฐ๋ gradle ๋ฒ์ ๋ ์๋ ๊ฑฐ๋ผ ์ข ๋ค๋ฅด๊ฒ ์ค์ ํด์ผ ํ๋ ๋ถ๋ถ๋ค์ด ์์ด์ ๊ทธ ๋ถ๋ถ๋ค๋ ์์ ํด๋ณด๊ฒ ๋ค.
IntelliJ์์ New Project ์์ฑ
์ธ์ด๋ Java๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Java๋ก ์ค์ ํด์ค๋ค. build system์ผ๋ก gradle, Gradle DSL(Domain Specific Language)๋ก๋ Groovy๋ฅผ ์ด์ฉํ๋๋ก ํ๋ค. ์์ ์ธํ ์ ํด์ฃผ๊ณ Create๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฐ ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ ๊ทธ ํ๋ก์ ํธ ์์ build.grale ํ์ผ์ด ์์ฑ๋๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ ์ด๋ ๋ค. ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๋ง ์์ฑ๋์ด ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ๋ง ์ค์ ๋์ด ์๋ ์ํ์ด๋ค.
plugins { id 'java' } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() }
์์ ์ฝ๋์ ๋งจ ์์
buildscript { ext { springBootVersion = '2.1.7.RELEASE' } repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } }
์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค.
springBootVersion๋ณ์์ ์ค์ ๋ ๋ฌธ์์ด์ ์คํ๋ง๋ถํธ ๋ฒ์ ์ ์๋ฏธํ๋๋ฐ ๊ตณ์ด ์ ๋ฒ์ ์ผ๋ก ์ค์ ํด์ค ํ์ ์๋ค. ์๋ํ๋ฉด ์ฑ ์ด ์๋ ๋ฒ์ ์ด๋ผ ์ต์ ๊ฑธ๋ก ํด๋ ์๊ด์๋ค.
ext
: ext ๋ธ๋ก์ build script์์ ์ฌ์ฉํ ๋ณ์๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ. springBootVersion์ด๋ ๋ณ์๋ฅผ ์ ์ญ ๋ณ์๋ก ์ ์ธํด์ฃผ๋ ์ญํ .
repositories
: build script์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ฌ๊ทธ์ธ์ ๋ค์ด๋ก๋ํ ์ ์ฅ์(repository)๋ฅผ ์ ์. ์ฌ๊ธฐ์ mavenCentral()๊ณผ jcenter() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ Maven Central Repository์ JCentral Repository๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํด์ค๋ค. ์ด ์ ์ฅ์๋ค์ Maven ์ค์ ์ ์ฅ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํด์ค๋ค.
dependencies
: build script์์ ์ฌ์ฉํ ์ธ๋ถ ์์กด์ฑ(dependency)๋ฅผ ์ ์. classpath(~)์์ Spring Boot Gradle ํ๋ฌ๊ทธ์ธ์ ๋ํ ์์กด์ฑ์ ์ ์. ${springBootVersion}์ ์์ ext๋ฅผ ํตํด ์ ์ํ ๋ณ์๋ฅผ ์ด์ฉํด ์คํ๋ง๋ถํธ ๋ฒ์ ์ ์ง์ ํด์ค๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ ๋น๋์ ํจํค์ง์ ์ง์ํ๋ค.
plugins { id 'java' id 'eclipse' id 'org.springframework.boot' id 'io.spring.dependency-management' }
๋ค์์ผ๋ก๋ ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค. (Gradle ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํ๋ ๋ถ๋ถ)
ํนํ io.spring.dependency-management๋ Spring ํ๋ก์ ํธ์์ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ค๋ค.
repositories { mavenCentral() }
-> ๊ฐ์ข ์์กด์ฑ๋ค์ ์ด๋ค ์๊ฒฉ ์ ์ฅ์์์ ๋ฐ์์ง๋ฅผ ์ค์
compile('org.springframework.boot:spring-boot-starter-web') testCompile('org.springframework.boot:spring-boot-starter-test')
๋ค์์ผ๋ก๋ ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค๊ณ ์ฑ ์ ๋์์์ง๋ง, ์ด์ ๋ฒ์ ์ Gradle์์ ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋ผ์
dependencies { implementation('org.springframework.boot:spring-boot-starter-web') testImplementation('org.springframework.boot:spring-boot-starter-test') }
์ฝ๋๋ฅผ ํตํด ์์กด์ฑ์ ์ ์ธํ๋ค.
์ด๋ ๊ฒ ํด์ ์ฑ ๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ Gradle ๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด gradle ํ์ผ์ gradle-wrapper.properties ํ์ผ์ ๋ค์ด๊ฐ
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
์์ ์๋ ์ค๋ฅ ์์ด ์ฐ๋ ๋ฒ์ ์ธ 8.0 ver๋ก ๋ฐ๊พธ์ด์ฃผ์๋ค. (์ ๊ธฐ์ 8.2๋ผ๊ณ ๋์ด ์๋ ๋ถ๋ถ์์ ์ํ๋ ๋ฒ์ ์ผ๋ก ๋ฐ๊พธ์ด์ฃผ๊ณ ์ฝ๋ผ๋ฆฌ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋๋ค.)
Lombok ์ค์
compile('org.projectlombok:lombok')
์ฑ ์์๋ dependencies ๋ธ๋ก์ ์ด๋ฐ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ผ๊ณ ํ์๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋๋ Test ์ฝ๋ ์คํ๋
error: variable name not initialized in the default constructor
์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฐพ์๋ณด๋ ์ต์ ๋ฒ์ ์ gradle์์๋ annotationProcessor๋ ๊ฐ์ด ์์ฑํด์ฃผ์ด์ผ ํ๋ค๊ณ ํ์ฌ ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
implementation('org.projectlombok:lombok') annotationProcessor('org.projectlombok:lombok')
ํ์ settings -> Plugins -> MarketPlace์์ Lombok์ ์ค์นํ๊ณ IntelliJ๋ฅผ ์ฌ์์ํ๋ค.
๋ํ settings -> Build, Excution, Deployment -> Compiler -> AnnotationProcessor ์์ Default๋ฅผ ํด๋ฆญ ํ Enable annotation processint ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌ๋ฅผ ํด๋ฆญํ๋ค.
Test ๊ฒฐ๊ณผ
build.gradle ์ ์ฒด ์ฝ๋
buildscript { ext { springBootVersion = '3.0.5' } repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } plugins { id 'java' id 'eclipse' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.sujin.book' version = '1.0-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation('org.springframework.boot:spring-boot-starter-web') testImplementation('org.springframework.boot:spring-boot-starter-test') testImplementation('junit:junit:4.12') // Junit 4.12 ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ implementation('org.projectlombok:lombok') annotationProcessor('org.projectlombok:lombok') } test { useJUnitPlatform() }
์ด๋ ๊ฒ ์ ์ฒด ์ฝ๋๋ฅผ ์ ๋ ฅ ํ,
์ฝ๋ผ๋ฆฌ ๋ฒํผ์ ๋๋ฅด๋ฉด ์คํ๋ง๋ถํธ ๊ฐ๋ฐํ๊ฒฝ ์ด๊ธฐ ์ค์ ์ด ์๋ฃ๋๋ค. (Lombok Setting๊น์ง ์๋ฃ๋ ์ ์ฒด ์ฝ๋์ด๋ค.)
-> ์ด๋ ๊ฒ ์ฐ์ธก์ ์ฝ๋ผ๋ฆฌ๋ฒํผ -> Dependencies๋ฅผ ํตํด ์คํ๋ง๋ถํธ spring-boot-starter-web๊ณผ spring-boot-starter-test ์์กด์ฑ์ด ์ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Reference
book: ์คํ๋ง๋ถํธ์ AWS๋ก ํผ์ ๊ตฌํํ๋ ์น ์๋น์ค(์ ์-์ด๋์ฑ)
'๐ปProgramming > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ