์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๐ Spring Initializer ๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์๋ค. ์๋์ฒ๋ผ dependency ์์ web, jpa, lombok, devtools ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ generate ๋ฅผ ํด๋ฆญํ๋ฉด zip ํ์ผ์ด ๋ค์ด๋ก๋ ๋๋ค. ๋ค์ด๋ฐ์ zip ํ์ผ์ ์์ถ ํด์ ํ IntelliJ ์์ open ํ๋ฉด ๋๋ค.
- web : Spring MVC๋ฅผ ์ฌ์ฉํ์ฌ RESTful์ ํฌํจํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋. Apache Tomcat์ ๊ธฐ๋ณธ ๋ด์ฅ ์ปจํ ์ด๋๋ก ์ฌ์ฉํ๋ค.
- JPA(Java Persistence API) : ORM(Object Relational Mapping) ์ด๋ผ๋ ๋ฐ์ด๋ฒ ์ด์ค table ๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋งคํ(๋ณํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.) ์์ผ์ฃผ๋ ๊ธฐ์ ์ ํ์ค์ผ๋ก, ์ด ORM ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค(AP ๊ท๊ฒฉ)์ ๋ชจ์์ด๋ค. Hibernate ๋ ์ด๋ฅผ ๊ตฌํํ ํ๋ ์์ํฌ์ด๋ค. ์ฐธ๊ณ ๋ก Spring Data JPA ๋ Hibernate ๋ฑ๊ณผ ๊ฐ์ JPA provider ๋ฅผ ์ฌ์ฉํ์ฌ JPA ๋ฅผ ๋ ์ฝ๊ฒ ์ ์ฉํ๊ธฐ ์ํด JPA๋ฅผ ํ ๋จ๊ณ ๋ ์ถ์ํ ์ํจ ๊ฒ์ด๋ค.
- lombok : Annotation ์ ํตํด getter, setter, builder ๋ฑ์ ๋ฐ๋ณต ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
- devtools : ๋น ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์, LiveReload ๋ฐ ๊ตฌ์ฑ์ ์ ๊ณตํ๋ค.
gradle ํ๋ก์ ํธ ๊ตฌ์กฐ
Gradle ๋ก ์์ฑํ ์คํ๋ง ํ๋ก์ ํธ์ ๊ตฌ์กฐ์ด๋ค.
- .gradle : gradle ์ด ์ฌ์ฉํ๋ ํด๋. task ๋ก ์์ฑ๋ ํ์ผ์ด ์ ์ฅ๋๋ฉฐ ๊ฐ๋ฐ์๊ฐ ํธ์งํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค.
- .idea : ๋ก์ปฌ IntelliJ IDE ๊ตฌ์ฑ์ด ํฌํจ๋ ํด๋๋ค.
- gradle : gradle ์ด ์ฌ์ฉํ๋ ํด๋. gradle ํ๊ฒฝ์ ์ ๋ฆฌํ wrapper ํ์ผ์ด ์ ์ฅ๋์ด ์๋ค.
- src : ํ๋ก์ ํธ ํด๋๋ก ๊ฐ์ข
์์ค์ฝ๋์ ๋ฆฌ์์ค ํ์ผ์ด ๋ค์ด๊ฐ ์๋ค.
- main : java ์์ค ์ฝ๋๊ฐ ๋ค์ด ์๋ค.
- test : test ํ์ผ์ด ๋ค์ด ์๋ค.
- .gitignore : git ์ด ๋ฌด์ํ ํ์ผ๋ค์ ๋ช ์ํ ๊ฒ์ด๋ค.
- build.gradle : gradle ์ ๋น๋ ์ค์ ํ์ผ์ด๋ค. groovy ์ธ์ด๋ก ์์ฑ๋์ด ์๋ค. ์ฌ๊ธฐ์ dependency ๋ฅผ ๋ช ์ํ๋ค.
- gradlew : gradle ์ ๋ช ๋ น ํ์ผ. macOS ์ Linux ์ฉ์ด๋ค.
- gradle.bat : gradle ์ ๋ช ๋ น ํ์ผ. windows ์ฉ์ด๋ค.
- setting.gradle : ํ๋ก์ ํธ ์ค์ ์ ๋ณด ํ์ผ์ด๋ค.
build.gradle
ํ๋ฌ๊ทธ์ธ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ dependecy ์ ์ด๋ฆ ๋ฐ ๋ฒ์ ์ ์ ์ผ๋ฉด ์ดํ gradle ์ด ๋น๋ํ ๋ ์์์ ๋ค์ด๋ฐ์์ค๋ค. spring initializer ์์ ์ถ๊ฐํด์ฃผ์๋ jap, web, lombok, devtool ๋ค์ด ์ถ๊ฐ๋์ด ์๋ค. ์ง๊ธ์ database ๋ฅผ ์ด์ฉํ์ง ์์ผ๋ jpa ๋ฅผ ์ฃผ์์ฒ๋ฆฌ ํด์ค๋ค. ์ ํ๋ฉด ํ๋ก์ ํธ ์คํ์ด ์ ๋ ๊ฒ์ด๋ค.
plugins {
id 'org.springframework.boot' version '2.5.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
...
dependencies {
//implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
...
src/main/java/TodolistTutorialApplication.java
spring initializer ๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ค ์์ค ์ฝ๋๋ค. ์คํ๋ง ๋ถํธ๋ main ์ ์คํ์ํค๋ฉด ๋ด์ฅ๋ ํฐ์บฃ์ ์์ฒด์ ์ผ๋ก ์คํ์ํค๊ธฐ ๋๋ฌธ์ spring ๊ณผ ๋ฌ๋ฆฌ ๋ณ๋์ ์น์๋ฒ๋ฅผ ๋ค์ด๋ฐ์ง ์๊ณ ๋ ๋ฐ๋ก ์คํ์ํฌ ์ ์๋ค.
package com.todolist.tutorial;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodolistTutorialApplication {
public static void main(String[] args) {
SpringApplication.run(TodolistTutorialApplication.class, args);
}
}
์ ํ๋ฆฌ์ผ์ด์ ์คํ
IDE ์์ run ์ ํ๋ฉด ์คํ๋๋ค.
์ปค๋งจ๋๋ผ์ธ์์ ์คํํ๋ค๋ฉด ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก์์ gradle ํน์ ./gradlew ๋ช ๋ น์ด๋ก ์คํํ๋ค. (window ์์๋ gradlew)
~/Project/study/springboot/tutorial > gradle bootRun
~/Project/study/springboot/tutorial > ./gradlew bootRun
์ฑ๊ณต ์ ์๋์ ๊ฐ์ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๊ณ localhost:8080์ ์ ์ํ๋ฉด error ํ์ด์ง๊ฐ ๋ฐ ๊ฒ์ด๋ค. ๋ง์ฝ ์คํ์ด ์ ๋๋ค๋ฉด build.gradle ํ์ผ์์ jpa dependency ๋ฅผ ์ฃผ์์ฒ๋ฆฌ ํ๋์ง ํ์ธํ๋ค.
2:13:48 ์คํ: Executing task ':TodolistTutorialApplication.main()'...
> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :TodolistTutorialApplication.main()
14:13:50.772 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@18e2c412
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.7)
2021-11-19 14:13:51.126 INFO 19062 --- [ restartedMain] c.t.t.TodolistTutorialApplication : Starting TodolistTutorialApplication using Java 1.8.0_202 on userui-MacBookPro.local with PID 19062 (/Users/user/Project/study/springboot/tutorial/build/classes/java/main started by user in /Users/user/Project/study/springboot/tutorial)
2021-11-19 14:13:51.134 INFO 19062 --- [ restartedMain] c.t.t.TodolistTutorialApplication : No active profile set, falling back to default profiles: default
2021-11-19 14:13:51.180 INFO 19062 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2021-11-19 14:13:51.180 INFO 19062 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2021-11-19 14:13:51.980 INFO 19062 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-11-19 14:13:51.991 INFO 19062 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-11-19 14:13:51.991 INFO 19062 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.55]
2021-11-19 14:13:52.055 INFO 19062 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-11-19 14:13:52.055 INFO 19062 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 874 ms
2021-11-19 14:13:52.393 INFO 19062 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2021-11-19 14:13:52.423 INFO 19062 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-11-19 14:13:52.432 INFO 19062 --- [ restartedMain] c.t.t.TodolistTutorialApplication : Started TodolistTutorialApplication in 1.651 seconds (JVM running for 2.058)
2021-11-19 14:15:16.716 INFO 19062 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-11-19 14:15:16.716 INFO 19062 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-11-19 14:15:16.718 INFO 19062 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms