๐ŸŒฑ Spring Boot ์ดˆ๊ธฐ ์„ธํŒ… (Gradle, IntelliJ)

ozzingยท2022๋…„ 6์›” 12์ผ
0
post-thumbnail

Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ดˆ๊ธฐ ์„ธํŒ…๋™์•ˆ ๊ฒช์€ ์ผ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

Project ์ƒ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์€ ์•„์ฃผ ํŽธ๋ฆฌํ•˜๋‹ค!
start.spring.io ํ™œ์šฉํ•ด์„œ ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.
Dependancy๋Š” Lombok, Spring Web, Spring Data JPA, Spring Data JDBC, MySQL Driver + Spring Security๋งŒ ๊ธฐ๋ณธ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์ดํ›„์— ํ•„์š”์— ๋”ฐ๋ผ build.gradle์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์ฒ˜์Œ IntelliJ๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๋ฉด ์™•์ฐฝ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋นŒ๋“œํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฝค๋‚˜ ๊ฑธ๋ฆฐ๋‹ค. ๋๋‚˜๊ณ  ํŒŒ์ผ์„ ํด๋ฆญํ•ด ๋ณด๋ฉด ๊ฑฐ์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ๋นจ๊ฐ„์ƒ‰์ด๋‹ค. ์ด๊ฒƒ ์ €๊ฒƒ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

IntelliJ ์„ธํŒ…

Code Style

์ฝ”๋“œ ์Šคํƒ€์ผ์„ google style guide๋กœ ๋งž์ถ”์—ˆ๋‹ค.
Settings - Editor - Code Style - Java ์—์„œ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํ†ตํ•ด google style guide๋ฅผ ์ ์šฉ์‹œํ‚ค๊ณ  Indent๋ž‘ Tab size๋ฅผ 4๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.
๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ์ด ์™ธ์—๋„ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…์ด ๋˜์–ด ์žˆ์–ด, ์ฐธ๊ณ ํ•ด์„œ ์„ธํŒ…ํ•˜์˜€๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ .env๊ฐ€ ์•„๋‹Œ Environment variables๋ฅผ ํ™œ์šฉํ•ด ์ง€์ •ํ•˜์˜€๋‹ค. ์ด๋Š” .env ํŒŒ์ผ์„ ๊ตณ์ด .gitignore์— ์ถ”๊ฐ€ํ•ด ์ˆจ๊ธธ ํ•„์š” ์—†์–ด ํŽธ๋ฆฌํ–ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—์„œ DB, JWT, S3, OAuth(Kakao, Naver)๋“ฑ๊ณผ ๊ด€๋ จ๋œ ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๋“ค์„ ์ €์žฅํ•ด์ฃผ์—ˆ๊ณ , ํ•ด๋‹น ๋‚ด์šฉ์€ ํŒ€์›๋“ค๊ณผ ๋”ฐ๋กœ ๊ณต์œ ํ•ด ํ†ต์ผ์‹œ์ผฐ๋‹ค.

Run/Debug Configurations์—์„œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹คํ–‰ ๋ฒ„ํŠผ ์˜† ํ† ๊ธ€์„ ๋ˆŒ๋Ÿฌ์„œ Edit Configurations... ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

ํ™˜๊ฒฝ ์„ค์ •

Settings - Build, Execution, Deployment - Build Tools - Gradle์—์„œ gradle๋กœ ๋˜์–ด์žˆ๋˜ Build and run using๊ณผ Run tests using์„ ๋ชจ๋‘ Intellij IDEA๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ JUnit test์˜ ์„ธ์„ธํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.

์‹คํ–‰ ์˜ค๋ฅ˜

์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๊ณ  MainApplication์„ ์‹คํ–‰ํ•ด๋ณด์•˜์„ ๋•Œ, ์ •์ƒ์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด์œ ๋Š” JDBC url์ด ์„ค์ •๋˜์ง€ ์•Š์•„์„œ ์ธ๋ฐ, MySQL์˜ ๊ฒฝ์šฐ application.properties์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

spring.jpa.database=mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://${DB_HOST}:3306/${DB_NAME}?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
logging.level.org.hibernate=info
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ ๋’ค localhost:8080 ํ™•์ธํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋„์›Œ์ ธ ์žˆ๋‹ค! ๋‹ค๋งŒ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ์ž๋™์œผ๋กœ ๋œฐ ๊ฒƒ์ด๋‹ค.

Spring Security

๋กœ๊ทธ์ธ ํ™”๋ฉด์€ ์ฝ˜์†”์„ ์ž์„ธํžˆ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Using generated security password: !@#$%^$%$&
user์— 'user', password์— ์—ฌ๊ธฐ ๋œฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ๋ถ™์ด๋ฉด ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐœ๋ฐœ ๋™์•ˆ ๋ถˆํŽธํ•˜๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ผ๊ณ  ๋Š๋‚€๋‹ค๋ฉด build.gradle์—์„œ

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

์ด ๋‘๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ๋กœ๊ทธ์ธ ์ฐฝ์ด ๋œจ์ง€ ์•Š๋Š”๋‹ค!

Hibernate 5.6.7

์‚ฌ์‹ค ์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๋ฉด ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ๊นŒ์ง€์˜ ์…‹ํŒ…์€ ๋‹ค ๋œ ์ƒํƒœ์ด์ง€๋งŒ, hibernate 5.6.7์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ like๋‚˜ containing ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ฒซ ๋ฒˆ์งธ ์กฐํšŒ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๋‘ ๋ฒˆ ์ด์ƒ์˜ ์กฐํšŒ์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ build.gradle์˜ plugin ์ค‘ id 'io.spring.dependency-management' version์„ '0.6.0.RELEASE'๋กœ ๋ฐ”๊พธ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์ดํ›„ Project structure - Modules์—์„œ Gradle: org.hibernate: hibernate-core 5.6.7์„ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค.

์‚ฌ์‹ค ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ด์ „ ๋ฒ„์ „ ๋ชจ๋“ˆ ์‚ญ์ œ ํ›„ ๊ทธ๋ƒฅ build.gradle์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋„ฃ์–ด์„œ ์„ค์น˜ํ•ด์ฃผ๋ฉด ์ง๋นต์œผ๋กœ ํ•ด๊ฒฐ๋œ๋‹ค.
implementation 'org.hibernate:hibernate-core:5.6.1.Final'

์…‹ํŒ… ์™„๋ฃŒ!

๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰

0๊ฐœ์˜ ๋Œ“๊ธ€