Spring Boot ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ, ์ด๊ธฐ ์ธํ ๋์ ๊ฒช์ ์ผ๋ค์ ์ ๋ฆฌํด๋ณด์๋ค.
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ์์ฑ์ ์์ฃผ ํธ๋ฆฌํ๋ค!
start.spring.io ํ์ฉํด์ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ์๋ค.
Dependancy๋ Lombok, Spring Web, Spring Data JPA, Spring Data JDBC, MySQL Driver + Spring Security๋ง ๊ธฐ๋ณธ์ผ๋ก ์ถ๊ฐํ๊ณ ์ดํ์ ํ์์ ๋ฐ๋ผ build.gradle์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ์๋ค.
์ฒ์ IntelliJ๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ์ด๋ฉด ์์ฐฝ ๋ค์ด๋ก๋ํ๊ณ ๋น๋ํ๋๋ฐ ์๊ฐ์ด ๊ฝค๋ ๊ฑธ๋ฆฐ๋ค. ๋๋๊ณ ํ์ผ์ ํด๋ฆญํด ๋ณด๋ฉด ๊ฑฐ์ ๋ชจ๋ ํ์ผ์ด ๋นจ๊ฐ์์ด๋ค. ์ด๊ฒ ์ ๊ฒ ์ค์ ์ด ํ์ํ๋ค.
์ฝ๋ ์คํ์ผ์ 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 ํ์ธํ๋ฉด ์๋ฒ๊ฐ ๋์์ ธ ์๋ค! ๋ค๋ง ๋ก๊ทธ์ธ ํ๋ฉด์ด ์๋์ผ๋ก ๋ฐ ๊ฒ์ด๋ค.
๋ก๊ทธ์ธ ํ๋ฉด์ ์ฝ์์ ์์ธํ ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
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์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ ๋์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ก 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'
๐๐๐