Intro
Spring Boot์ JPA๋ฅผ ํ์ฉํด์ ๊ฐ๋จํ ๊ฒ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ๊ธ์ ์๋ฆฌ์ฆ๋ก ์์ฑ๋ ์์ ์ด๋ฉฐ ํ์ฌ ๊ธ์์๋ ํ๋ก์ ํธ ์์ฑ, build.gradle๊ณผ dependencies, applicaiton.yaml ํ์ผ ์ค์ ์ ๋ํด ์์๋ณผ๊ฒ์.
- IDE : IntelliJ
- java version : 17
ํ๋ก์ ํธ ์์ฑ
์ผ์ผ์ด ์๋์ผ๋ก Spring ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ค์ ํ๋ ๊ฒ์ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ IntelliJ์ Spring Initializer๋ฅผ ์ฌ์ฉํด์ Spring Boot ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ์๋ค!
IntelliJ IDEA ์ฌ์ฉ
์ธํ ๋ฆฌ ์ ์ด ์ ๋ฃ ๋ฒ์ (IntelliJ IDEA)์ ์ฌ์ฉํ์ ๋ค๋ฉด ํ๋ก์ ํธ ์์ฑ ์ Spring Boot Generators๋ฅผ ์ฌ์ฉํ ์ ์์ด์.
dependencies๋ ์์ ๊ฐ์ด ์ค์ ํด ์ฃผ์ธ์. ๊ฐ ์์กด์ฑ์ด ์๋ฏธํ๋ ๊ฑด ์๋์ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค
Spring Initializer ์ฌ์ฉ
์ ๋งํฌ์ ์น์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ฉด Spring Boot ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์ด์. IntelliJ์ ๊ฒฝ์ฐ ๋ฌด๋ฃ ์ฌ์ฉ์์๊ฒ๋ Generator์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌด๋ฃ ๋ฒ์ ์ IntelliJ๋ฅผ ์ฌ์ฉํ์ ๋ค๋ฉด ์ด ์ฌ์ดํธ๋ฅผ ์ด์ฉํ์๋ฉด ๋ฉ๋๋ค.
IntelliJ์์ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํฉ๋๋ค. Gradle๊ณผ Maven์ ์ ํํ ์ ์๊ณ , ์ธ์ด๋ก๋ Java, Kotlin, Groovy๋ฅผ ์ ํํด ์ค ์ ์์ต๋๋ค.
SNAPSHOT ์ ๊ฒฝ์ฐ ์์ง ์์ ํ๊ฐ ๋์ง ์์ ๋ฒ์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ๊ธ ์์ฑ ๊ธฐ์ค 3.2.4๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
Project์ ์ด๋ฆ๊ณผ Package name๋ฑ์ ์ค์ ํด ์ฃผ๊ณ Java ๋ฒ์ ๋ ์ ํํด ์ค๋๋ค.
์ค๋ฅธ์ชฝ ์๋จ์ ADD DEPENDENCIES ๋ฒํผ์ ๋๋ฅด๋ฉด dependencies๋ฅผ ์ถ๊ฐํ ์ ์์ด์.
๊ฐ๋จํ Spring Boot ๊ฒ์ํ์ ๋ง๋ค๊ธฐ ์ํด ์์ ๊ฐ์ด ์ถ๊ฐํด ์ฃผ์ธ์
ํ๋จ์ GENERATE ๋ฒํผ์ ๋๋ฅด๋ฉด zip ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์์ถ์ ํด์ ํ๊ณ IntelliJ์์ ํ๋ก์ ํธ ํด๋๋ฅผ ์ด์ด์ฃผ์ธ์.
์๋จ ์ํ๋ฐ์ File > Open์ ๋๋ฌ ํด๋น ํ๋ก์ ํธ ํด๋๋ก ์ด๋ํ์๋ฉด ๋ฉ๋๋ค.
Build.gradle
Build.gradle์ด๋?
์ฐธ๊ณ ์ฌ์ดํธ
public interface Project extends Comparable<Project>, ExtensionAware, PluginAware { }
ํ๋ก์ ํธ ๋จ์์์ ํ์ํ ์์ ์ ์ํํ๊ธฐ ์ํ ๋ฉ์๋์ ํ๋กํผํฐ๋ฅผ ๋ชจ์๋์ ์ํผ ๊ฐ์ฒด์ ๋๋ค. plugins, repositories, dependencies ๋ฉ์๋๋ฑ์ ํฌํจํฉ๋๋ค.
build.gradle ์ค์ ํ๊ธฐ
build.gradle ํ์ผ์ ๋ค์ด๊ฐ๋ณด๋ฉด ํ๋ก์ ํธ ์์ฑ์์ ์ง์ ํด ๋ dependencies ๊ฐ ์ด๋ฏธ ์์ฑ๋์ด ์์ต๋๋ค.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
๊ฐ dependency๊ฐ ํ๋ ์ญํ์ ์์๋ณผ๊ฒ์!
lombok
๋กฌ๋ณต์ Getter, Setter, NoArgs, NoArgsConstructor์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์ง์ getter, setter, ์์ฑ์ ๋ฑ์ ์ฝ๋ ๋์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ณต์กํ๊ณ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ถ์ ์ํฌ ์ ์์ต๋๋ค.
Builder๋ฅผ ์ฌ์ฉํด์ ์ธ์คํด์ค๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
@Builder
public Board(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
Board board = Board.builder()
.title(title)
.content(content)
.author("admin")
.build();
Spring Web
https://mvnrepository.com/artifact/org.springframework/spring-web
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํด Spring์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์น ์์ฒญ ๋ฐ ์๋ต ์ฒ๋ฆฌ, HTTP ์์ฒญ์ java ๊ฐ์ฒด๋ก ๋ณํ, Java ๊ฐ์ฒด๋ฅผ HTTP ์๋ต์ผ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ด์.
Thymeleaf
์ฐธ๊ณ ์ฌ์ดํธ
๋ฐฑ์๋ ์๋ฒ์์ HTML์ ๋์ ์ผ๋ก ๋ ๋๋ง ํ ์ ์๊ฒ ํด์ฃผ๋ ํ ํ๋ฆฟ ์์ง์ ๋๋ค. ๋ค๋ฅธ ์์ง์ผ๋ก๋ JSP๊ฐ ์์ต๋๋ค. ์๋ฒ์ ๋ด์ฉ์ ๋ฐ๋ผ ๋์ ์ผ๋ก html์ ๋ด์ฉ์ ๋ด์ ์น๋ธ๋ผ์ฐ์ ์์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ ๊ฒ์ํ ํ๋ก์ ํธ์๋ ํ์๋ฆฌํ๋ฅผ ์ฌ์ฉํด์ ํ๋ก ํธ ๊ฐ๋ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
Spring JDBC
์ฐธ๊ณ ์ฌ์ดํธ
https://mininkorea.tistory.com/39
JDBC(Java Database Connectivity)๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ฝ์ , ๊ฐฑ์ , ์ญ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉ์ ์ํด ๋ด๋ถ์ ์ผ๋ก JDBC๋ฅผ ์ฌ์ฉํฉ๋๋ค.
MariaDB Driver
database๋ก๋ ๋ง๋ฆฌ์ db๋ฅผ ์ฌ์ฉํด์ฃผ๊ฒ ์ต๋๋ค.
application.yaml
spring:
mvc:
hiddenmethod:
filter:
enabled: true
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
format_sql: true
datasource:
url: jdbc:mariadb://localhost:3306/dev
driver-class-name: org.mariadb.jdbc.Driver
username: dev
password: 0000
logging:
level:
root: info
์ต์ข application.yaml์ ์ด๋ ์ต๋๋ค! ๋ง์ฝ application.yaml ํ์ผ์ด ์์ผ๋ฉด ์์ฑํด ์ฃผ์ธ์.
์์น๋ resources ํด๋์ ์์นํฉ๋๋ค!
spring.mvc.hiddenmethod.filter.enabled: true
HTTP Post ์์ฒญ์ ํตํด ์ค๋ ํผ ๋ฐ์ดํฐ์ ์จ๊ฒจ์ง HTTP ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐํด ์ฃผ์์ด์. HTML ํผ์์ put์ด๋ delete์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ ์ด๋ฅผ ์ฌ์ฉํด ์ฃผ๊ธฐ ์ํด ์ค์ ํด ์ค๋๋ค.
spring.jpa.hibernate.ddl-auto: update
Hibernate๋ฅผ ์ฌ์ฉํด์ JPA ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ์๋ ๋งคํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ํฐํฐ ํด๋์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ ๋ฐ์ดํธ ํ๋ ์ ๋ต์ ๋๋ค.
spring.jpa.properties.hibernate.show_sql: true
Hibernate๊ฐ ์์ฑํ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ก๊น ํ๊ธฐ ์ํด์ ์ถ๊ฐํด ์ฃผ์์ต๋๋ค.
spring.jpa.properties.hibernate.format_sql: true
Hibernate๊ฐ ์์ฑํ๋ SQL ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฟผ๋ฆฌ๋ก ๋จ๊ถ์ฃผ๋ ๊ฑด ์๋๋ผ ํฌ๋ฉง ์ค์ ์ ํด์ค๋๋ค. SQL ์ฟผ๋ฆฌ๋ฅผ ๋ณด๊ธฐ ์ฝ๊ฒ ํฌ๋ฉง ํด์ค๋๋ค.
spring.datasource.url: jdbc:mariadb://localhost:3306/dev
์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ JDBC ๋๋ผ์ด๋ฒ ํด๋์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์์ ๊ฒฝ์ฐ MariaDB์ dev ์คํค๋ง์ ์ฐ๊ฒฐ๋์. mariadb์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํฌํธ๋ 3306์ ๋๋ค.
spring.datasource.driver-class-name: org.mariadb.jdbc.Driver
MariaDB JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํด ์ค๋๋ค.
logging.level.root: info
๋ฃจํธ ๋ก๊ฑฐ์ ๋ก๊น ๋ ๋ฒจ์ ์ง์ ํฉ๋๋ค. ๋ชจ๋ ๋ก๊ทธ๋ฅผ ๋ณด์ง ์๊ณ INFO ์ด์์ ๋ก๊ทธ๋ง ์ถ๋ ฅํด ์ค๋๋ค.
๋ง๋ฌด๋ฆฌ
๊ธฐ๋ณธ์ ์ธ ์ค์ ์ด ๋๋ฌ์ต๋๋ค! ์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ด์!
๋ค์ ํฌ์คํ ์์๋ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ํด ์ ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค~
'BE > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] Controller์ RestController ์ฐจ์ด์ ResponseBody (2) | 2024.09.22 |
---|---|
Spring boot ํ๋ก์ ํธ์ SSL ์ธ์ฆ์ ์ ์ฉํ๊ธฐ (0) | 2024.07.15 |
[Spring Boot JPA ๊ฒ์ํ ๋ง๋ค๊ธฐ] 3. Entity ์์ฑ (0) | 2024.05.08 |
[Spring Boot JPA ๊ฒ์ํ ๋ง๋ค๊ธฐ] 2. ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค์ (0) | 2024.04.29 |
IntelliJ ๋ฌด๋ฃ ๋ฒ์ ์ผ๋ก ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ (1) | 2024.04.18 |
๋๊ธ