[ํ๋ก์ ํธ ์ผ์ง] 4๋ฒ์งธ ํ๋ก์ ํธ - 1. ์๋ฒ ์ค๊ณํ๊ธฐ
์ ์ ๋ฒ์ฃผ์ ์งํํ ๋ด์ฉ์ด์ง๋ง ์ด์ ์์ผ ๊ธฐ๋กํ๋ ์คํ๋ง ํ๋ก์ ํธ ์์ฑ๊ณผ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ฑ ์ด์ผ๊ธฐ!
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ
OS : MAC OS(M2)
IDE : IntelliJ IDEA 2023.3.5 (Ultimate Edition)
JDK : Amazon corretto 17.0.10
Server : Spring Boot 3.2.4
DB : MySQL 8.0.36
Spring Boot ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ค์
๋ฐฑ์๋ ์๋ฒ๋ฅผ ์๋ก ๊ตฌ์ถํ๊ธฐ ์ํด์ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
24๋ 3์ ๊ธฐ์ค, ํ์ฌ Spring Boot์ ์ต์ ๋ฒ์ ์ `3.3.0`์ด์ง๋ง, SNAPSHOT ๋ฒ์ ์ด ์๋ `3.2.4`๋ก ์์ฑ์ ํ๋ค.
Spring Boot 3 ๋ฒ์ ๋ถํฐ Java 17์ด์์ ์จ์ผ ํ๋ค. Java 17 ๋ฒ์ ์ JDK๋ฅผ ์์๋ณด๋ค๊ฐ `Amazon corretto 17.0.10`์ ์ ํํ๋ค.
Oracle JDK๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด์ผ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ํด์ ์ ์ธ์์ผฐ๋ค.
๋ค๋ฅธ ๋ฌด๋ฃ Open JDK๋ก๋ Azul zulu, Amazon corretto, Temurin์ด ์์๋ค. ์ฐจ์ด์ ์ ์์๋ดค์ผ๋ ๋ด๊ฐ ์๋ ์ง์ ์์ค์ผ๋ก๋ ๋ณ ์ฐจ์ด๊ฐ ์์ด๋ณด์๊ณ , AWS๊ธฐ๋ฐ์ผ๋ก ์๋ฒ๋ฅผ ์ด์ํ ๊ฑฐ๋ผ Amazon corretto์ ์ ํํ๋ค.
+ ๋ด ์ปดํจํฐ์ ์๋ก Amazon corretto aarch64์ ๋ค์ด๋ฐ์์ด์ผ ํ๋ค. ๋งฅ๋ถ m1, m2์ ์ ํ ์ค๋ฆฌ์ฝ ์นฉ์ด aarch64 ์ํคํ ์ฒ๋ผ์ aarch64 ๋ฒ์ ์ ๋ค์ด๋ฐ์์ผ ํ์๋ค..
Dependency ์ถ๊ฐ
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'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
- spring-boot-devtools : ์๋ฒ ์ฌ์์ ํ์์์ด ํธํ๊ฒ ๊ฐ๋ฐํ๊ธฐ ์ํด์ ์ถ๊ฐ
- spring-boot-starter-web : spring mvc, ๋ด์ฅ ํฐ์บฃ ์ฌ์ฉ์ํ ์คํํฐ ์ถ๊ฐ
- mysql-connector-j : Mysql DB ์ฐ๊ฒฐ์ ์ํด ์ถ๊ฐ
- spring-boot-starter-data-jpa : DB์ ๋งคํ ์ํด JPA ์ฌ์ฉํ ๊ฑฐ๋ผ์ ์ถ๊ฐ
- lombok : ์ด๋ ธํ ์ด์ ๋ง์ผ๋ก getter, ์์ฑ์ ๋ฑ ์ถ๊ฐํ๊ธฐ ์ํด ์ถ๊ฐ
application.yml ์ค์
spring:
application:
name: #์๋น์ค์ด๋ฆ
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/#์๋น์ค์ด๋ฆ#?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: #๊ณ์ ๋ช
password: #๋น๋ฐ๋ฒํธ
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
format_sql: true
- datacource ์ฐ๊ฒฐ
- ์ผ๋จ ๋ก์ปฌ ํ๊ฒฝ์์ ๊ฐ๋ฐํ ๊ฑฐ๋ผ์ ๋ก์ปฌ DB๋ก ์ฐ๊ฒฐํ๋ค.
- ์ค๊ฐ์ `allowPublicKeyRetrieval=true` ์ด๊ฑฐ ์์ ์๋๋ ์๋ฌ๊ฐ ๋ฌ์๋ค. mysql 8.0 ๋ฒ์ ๋ถํฐ๋ ๋ณด์์ ์ธ ์ด์๋ก useSSL ์ต์ ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ๋ค๊ณ ํ๋ค.
- jpa ์ต์
- ddl-auto : ๊ฐ๋ฐํ๋ฉด์ ์๋์ผ๋ก ํ ์ด๋ธ๊ณผ ์นผ๋ผ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ค์ ํ๋ค. ์ด์ ์๋ฒ์์๋ ๊บผ์ผํ๋ค.
- show-sql, format-sql : ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋ ๋ผ๊ฐ๋์ง ๋ณด๊ธฐ ์ํด ์ถ๊ฐํ๋ค.
- ์ถ๊ฐ๋ก Logging ์ค์ ํด์ ๋ฐ์ธ๋ฉ๋๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ถ๋ ฅํ๊ณ ์ถ์๋๋ฐ, 3.X ๋ฒ์ ์์๋ ๊ธฐ์กด ์ฝ๋๊ฐ ์๋จน๋๋ค...
DB ์ฐ๊ฒฐ ํ ์คํธ ์๋ฃ
์ดํ, ๋ก์ปฌ์์ ์์ฑํ DB์ ์ฐ๊ฒฐ์ด ์ ๋๋์ง ํ ์คํธ๋ฅผ ํด์คฌ๋ค. ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ด ๋๋ฌ๋ค.
ํ ์คํธ Controller ๋ง๋ค๊ธฐ
์๋ฒ๊ฐ ์ ๋๋ก ์คํ์ด ๋๋์ง ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ ์คํธ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํด์ "hello"๋ฅผ ๋ฐํํ๋ API๋ฅผ ๋ง๋ค์๋ค.
"localhost:8080/test/hello" ๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด "hello"์ ํจ๊ป 200 OK ์ํ ์ฝ๋๊ฐ ๋ฐํ๋๋ค.
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/hello")
public ResponseEntity<?> test() {
return new ResponseEntity<String>("hello", HttpStatus.OK);
}
}
ํ๋ก ํธ์์๋ ์ฐ๊ฒฐ ํ ์คํธ ํด๋ณธ๋ค๊ณ ์์ฒญ์ ๋ณด๋๋๋ฐ ์๋ต์ด ์ ์จ๋ค๊ณ ํด์คฌ๋ค.
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Project/4th] 4. ํ ์คํธ ์๋ฒ ์ธํ๋ผ ๊ตฌ์ถ - SSH ์ ์, Docker๋ก ์๋๋ฐฐํฌ (0) | 2024.04.05 |
---|---|
[Project/4th] 3. JPA Entity ๊ด๊ณ ์ค์ ํ๊ธฐ (0) | 2024.03.27 |
[Project/4th] 1. ์๋ฒ ์ค๊ณํ๊ธฐ (0) | 2024.03.18 |
[ํ๋ก์ ํธ ํ๊ณ ] 2์ฐจ ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ (0) | 2023.04.09 |
[ํ๋ก์ ํธ ํ๊ณ ] 1์ฐจ ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ (0) | 2023.02.26 |