์ ๊ฐ ๋ง๋ค ๊ฒ์ํ์ "์๋ธ๋ฆฌํ์"๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ฒ์ํ์ ๋๋ค.
์ง๋ฌธ์ ์ฌ๋ฆด ์๋, ์ ๋ณด๊ณต์ ๋ฅผ ํ ์๋, ์ก๋คํ ์ด์ผ๊ธฐ๋ค์ ์ฌ๋ฆด ์๋ ์๋ ๊ฒ์ํ์ด๋ผ ๋ณผ ์ ์๊ฒ ์ฃ .
๊ธฐ๋ณธ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ด๋ฌํฉ๋๋ค. ์ค๊ฐ์ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋ ์๋ ์์ต๋๋ค.
(๊ทธ๋ฅ ํ๊ณ ์ถ์๊ฑธ ์์ ์๊ฐ ์์ด ์ ์ด๋๊ฒ์ด๋, ์์๋๋ก ์งํํ์ง ์์ ์ ์์ต๋๋ค.)
- ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ 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
(์ธํ ์ ์๋ ๊ฒ์๋ฌผ์ ํ์ธํด์ฃผ์ธ์)
[Setting] H2 DataBase ์ฌ์ฉ ์ค์
H2 Datebase๋ฅผ ์์ฑํ์. ( ./[์ํ๋ ์ด๋ฆ] ) ๋ค์๊ณผ ๊ฐ์ด jdbc:h2:./[์ค์ ํ ์ด๋ฆ] ์ผ๋ก ๋์ฌ ๊ฒ์ด๋ค. ์ด๋ฅผ ์คํ์ํค๋ฉด jpa.mv.db ํ์ผ์ด ์์ฑ๋๋ค. ์ด์ ๋ก์ปฌ์์ ์ ์ํด๋ณด์. jdbc:h2:tcp://localhost/~/[์ค..
ttl-blog.tistory.com
[Setting] JPA ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
Datebase Setiing spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:tcp://localhost/~/jpa spring.datasource.username=sa spring.datasource.password=1 ๋ฐฉ์ธ ์ค์ spring.jpa..
ttl-blog.tistory.com
[MVC] Http ์์ฒญ์ ๋ณด ๋ก๊ทธ ๋จ๊ธฐ๊ธฐ (์คํ๋ง MVC)
logging.level.org.apache.coyote.http11=debug ๐ Reference ์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ - ์ธํ๋ฐ | ๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ชจ๋ ์น ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์..
ttl-blog.tistory.com
[Setting] Slf4J ๋ก๊ทธ ๋จ๊ธฐ๊ธฐ
logging.level.mvc.study=info mvc์ study๋ ํจํค์ง ์ด๋ฆ๋ค์ด๋ค. mvc.study ํจํค์ง์ ๊ทธ ํ์ ํด๋์ ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํ๋ค. trace debug info(๊ธฐ๋ณธ๊ฐ) warn error ์๋๋ก ๊ฐ ์๋ก ๋ก๊ทธ ๋ ๋ฒจ์ด ์ฌ๋ผ๊ฐ๋ค. (๊ฐ๋ฐ์..
ttl-blog.tistory.com
์คํ
์ ์คํ๋๋์ง ์คํ์์ผ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ผ์ฃผ๊ณ ๋ค์ ์คํ์์ผ๋ณด๋ฉด
http://localhost:8080/ ์ผ๋ก ์ด๋ํด์ ์ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
์ด๋ ๊ฒ ๋จ๋ฉด ๋ชจ๋ ์ ๋๊ฒ๋๋ค.
๋ก๊ทธ๋ ์ ๋์ค๋ค์.
์ด์ ํ์๊ฐ์ ๊ณผ JWT๋ฅผ ํ์ฉํ ๋ก๊ทธ์ธ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Reference
AnnotationProcessor ๊ด๋ จ
Configure annotation processors | IntelliJ IDEA
www.jetbrains.com
[Java] Annotation Processor
Annotation Processor ์ค๋ช ์ปดํ์ผ ์์ ์ Annotation ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. lombok์ด Annotation Processor๋ก ๋ง๋ค์ด์ก๋ค. ์๋ ์์ ๋ Student ํด๋์ค๋ฅผ ๋ฒ ์ด์ค๋ก StudentWithGet..
sg-choi.tistory.com
๊ฒ์ํ ์ฐธ๊ณ
์คํ๋ง๋ถํธ ๊ฒ์ํ API ์๋ฒ ๋ง๋ค๊ธฐ (1) - ํ๋ก์ ํธ ์์ฑ
์คํ๋ง๋ถํธ๋ก ๊ฒ์ํ API ์๋ฒ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณด๊ฒ ์ต๋๋ค. SpringBoot 2.x, JPA, Spring Security ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ฌผํ ํ๋งค ๊ฒ์ํ์ ๊ตฌ์ถํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํ๋ฉด๋จ์ ๊ฐ๋ฐํ์ง ์๊ณ , API๋ง ์ ๊ณตํ
kukekyakya.tistory.com