์ ๊ฐ ๋ง๋ค ๊ฒ์ํ์ "์๋ธ๋ฆฌํ์"๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ฒ์ํ์ ๋๋ค.
์ง๋ฌธ์ ์ฌ๋ฆด ์๋, ์ ๋ณด๊ณต์ ๋ฅผ ํ ์๋, ์ก๋คํ ์ด์ผ๊ธฐ๋ค์ ์ฌ๋ฆด ์๋ ์๋ ๊ฒ์ํ์ด๋ผ ๋ณผ ์ ์๊ฒ ์ฃ .
๊ธฐ๋ณธ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ด๋ฌํฉ๋๋ค. ์ค๊ฐ์ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋ ์๋ ์์ต๋๋ค.
(๊ทธ๋ฅ ํ๊ณ ์ถ์๊ฑธ ์์ ์๊ฐ ์์ด ์ ์ด๋๊ฒ์ด๋, ์์๋๋ก ์งํํ์ง ์์ ์ ์์ต๋๋ค.)
- ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ JSON ๋ฐ์ดํฐ๋ก ๋ก๊ทธ์ธ
- JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ
- ๋๋ฉ์ธ, ํ ์ด๋ธ ์ค๊ณ, ์ํฐํฐ ์์ฑ
- ๋๊ธ ์ญ์ ๋ก์ง ๊ตฌํ
- ํ์๊ฐ์ + ์ ๋ณด์์ ๋ฑ ํ์ ์๋น์ค ๊ตฌํ
- ๊ฒ์ํ ์๋น์ค ๊ตฌํ
- ๋๊ธ ์๋น์ค ๊ตฌํ (1๋๊ธ -> *(๋ฌดํ) ๋๋๊ธ ๊ตฌ์กฐ)
- ์์ธ ์ฒ๋ฆฌ
- ์์ธ ๋ฉ์ธ์ง ๊ตญ์ ํ
- ์นดํ ๊ณ ๋ฆฌ๋ณ ๊ฒ์ํ ๋ถ๋ฅ
- ๊ฒ์๊ธ ํ์ด์ง
- ๋์ ์ธ ๊ฒ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒ์
- ์ฌ์ฉ์ ๊ฐ ์ชฝ์ง ๊ธฐ๋ฅ
- ๋ฌดํ ์ชฝ์ง ์คํฌ๋กค
- ๊ฒ์๋ฌผ & ๋๊ธ์ ๋ํ ์๋
- ์ชฝ์ง์ ๋ํ ์๋
- ์ ์ํ ์ฌ์ฉ์ ๊ฐ ์ค์๊ฐ ์ฑํ
- ํ์๊ฐ์ ์ ๊ฒ์ฆ(์: XX๋ํ๊ต XX๊ณผ๊ฐ ์๋๋ฉด ๊ฐ์ ํ ์ ์๊ฒ)
- Swagger๋ฅผ ์ฌ์ฉํ API ๋ฌธ์ ๋ง๋ค๊ธฐ
- ์ ๊ณ & ๋ธ๋๋ฆฌ์คํธ ๊ธฐ๋ฅ
- AOP๋ฅผ ํตํ ๋ก๊ทธ
- ์ด๋๋ฏผ ํ์ด์ง
- ์บ์
- ๋ฐฐํฌ (+ ๋ฌด์ค๋จ ๋ฐฐํฌ)
- ๋ฐฐํฌ ์๋ํ
- ...
๋ง์ ์ ์ด๋ณด๋ ํ๊ณ ์ถ์๊ฒ ์ ๋ง ๋ง๋ค์...
์ธ์ ๊ฐ ์ด๊ฒ๋ค์ ๋ค ํ ์ ์๊ธธ ๋ฐ๋ผ๋ฉฐ..
ํ๋ก์ ํธ ์์ฑ๋ถํฐ ํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ ์์ฑ
- Web : ์น ๊ด๋ จ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค
- Data JPA : JPA๋ฅผ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋๋ค.
- Security : ์ธ๊ฐ์ ์ธ์ฆ ๊ด๋ จํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ค๋๋ค.
- Lombok : ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์์ฑ์, ์์ ์ ๋ฑ์ ๊ฐํธํ๊ฒ ์์ฑํด์ค๋๋ค.
- Validation : HTTP ์์ฒญ์ด ๋ค์ด์์ ๋, ์์ฒญ์ด ํฌํจํ ๋ฐ์ดํฐ ํ์์ ๊ฒ์ฆํด์ค๋๋ค
- H2 Database : DB๋ก๋ H2๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ฐ ๋จ๊ณ์์๋ ๊ฐํธํ๊ณ ์ข์ต๋๋ค. (์ดํ ๋ฐฐํฌ ์ ๋ค๋ฅธ DB๋ก ๋ณ๊ฒฝํ ์์ ์ ๋๋ค.)
์ด๊ธฐ ์ค์
ํ๋ก์ ํธ๋ฅผ ์ด์ด์ค๋๋ค.
File -> Setting -> gradle์ ๊ฒ์ํฉ๋๋ค.
Build and run using๊ณผ Run test using์ Gradle์์ IntelliJ IDEA ๋ก ๋ฐ๊พธ์ด์ค๋๋ค.
Gradle๋ก ์ค์ ํ ๊ฒฝ์ฐ ์คํ์ Gradle์๊ฒ ์์ํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฝ๋๋ค.
์ถ๊ฐ๋ก ์ ๋ ์๋ฐ์ ๋ฒ์ ์ 17๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Gradle JVM๋ 17๋ก ๋ฐ๊พธ์ด์ฃผ์์ต๋๋ค. (์๋ค๋ฉด ๋ค์ด๋ฐ์ ์ฃผ์ ์ผ ํฉ๋๋ค)
๋ค์์ผ๋ก๋ ๋กฌ๋ณต์ ์ฌ์ฉํ๊ธฐ ์ํ ์ค์ ์ ๋๋ค.
File -> Setting -> AnnotationProcessors์ ๊ฒ์ํฉ๋๋ค.
annotaionProcessor๋ ์ปดํ์ผ ์์ ์ Annotation ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค.
์ฐ๋ฆฌ๋ Lombok์ ํตํด ์ฌ๋ฌ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ Enable annotation processing์ ์ฒดํฌํด์ฃผ์ด ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋๋ค.
๋ค์์ผ๋ก๋ Project Structure ๊ด๋ จ ์ค์ ์ ๋๋ค.
File -> Project Structure๋ก ์ด๋ํฉ๋๋ค.
์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ๋ ํญ์ SDK๊ฐ 16 ๋ฒ์ ์ผ๋ก ์ค์ ๋์ด ์๋๋ผ๊ตฌ์.
๊ทธ๋์ 17๋ฒ์ ์ ์๋ฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด 17๋ฒ์ ์ผ๋ก ์ค์ ์ ๋ณ๊ฒฝํด์ค๋๋ค.
build.gradle์ ์ถ๊ฐ
๋ค์์ ์ถ๊ฐํ์ฌ SQL ๋ก๊ทธ๋ฅผ ์ข ๋ ๋ณด๊ธฐ ์ฝ๋๋ก ๋จ๊ธฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
//p6spy ์ ์ฉ
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.7.1'
์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
plugins {
id 'org.springframework.boot' version '2.6.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'boardexample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
//p6spy ์ ์ฉ
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.7.1'
implementation 'com.auth0:java-jwt:3.18.2'
}
test {
useJUnitPlatform()
}
application.yml ์ค์
์ฐ์ application.properties ํ์ผ์ ์ด๋ฆ์ application.yml๋ก ๋ฐ๊พธ์ด ์ฃผ๊ฒ ์ต๋๋ค.
(์ด์ ๋ yml ํ์ผ์ด ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ ๋ ์ฝ์ต๋๋ค.)
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์ฃผ๊ฒ ์ต๋๋ค.
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/~/jpa
username: sa
password: 1
jpa:
properties:
hibernate:
format_sql: true
user_sql_cooments: true
hibernate:
ddl-auto: create
logging:
level:
org:
apache:
coyote:
http11: debug
hiberante:
SQL: debug
boardexample:
myboard: info
(์ธํ ์ ์๋ ๊ฒ์๋ฌผ์ ํ์ธํด์ฃผ์ธ์)
์คํ
์ ์คํ๋๋์ง ์คํ์์ผ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ผ์ฃผ๊ณ ๋ค์ ์คํ์์ผ๋ณด๋ฉด
http://localhost:8080/ ์ผ๋ก ์ด๋ํด์ ์ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
์ด๋ ๊ฒ ๋จ๋ฉด ๋ชจ๋ ์ ๋๊ฒ๋๋ค.
๋ก๊ทธ๋ ์ ๋์ค๋ค์.
์ด์ ํ์๊ฐ์ ๊ณผ JWT๋ฅผ ํ์ฉํ ๋ก๊ทธ์ธ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Reference
AnnotationProcessor ๊ด๋ จ
๊ฒ์ํ ์ฐธ๊ณ