- ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ ์ ์ฅ์์ ๋๋ค.
- Language : Java 17
- Framework : Springboot 3.2.2
- ORM : JPA
- Build Tool : Gradle
- Dev Tool : IntelliJ
- Test : JUnit 5
- DB : H2
- URL : http://localhost:8080/h2-console
- Driver Class :
org.h2.Driver
- JDBC URL :
jdbc:h2:mem:db
- User Name :
sa
- Password :
- Springdoc OpenApi(Swagger) URL : http://localhost:8080/swagger-ui/index.html
- Springdoc OpenApi(Swagger)๋ก APIs Spec์ ๋ฌธ์ํ ํ์ต๋๋ค.
- Swagger ๊ธฐ๋ฅ ์ค ํ๋์ธ, ์ ์ญ์ธ์ฆ์ ๋์ ํ์ฌ API ํ ์คํธ๋ฅผ ์ํํ๊ฒ ํ์ต๋๋ค.
- ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๊ธฐ๋ฅ์ ์์ํ URL ๋ถ๋ฆฌ์ ํ ์คํธ ํ๊ฒฝ, ๊ถํ ์ ์ด ๋ฑ์ ์ํด Spring Security ํ๊ฒฝ์์ JWT๋ฅผ ์ด์ฉํด ๊ตฌํํ์ต๋๋ค.
- ๋ณด์์ ์ํด ์ธ๊ฐ ์คํจ ์, 403 ์๋ฌ ๋์ ์ 404 ์๋ฌ๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ์ต๋๋ค.
- ์ธ์ฆ/์ธ๊ฐ ํํฐ ์ฒ๋ฆฌ
- ์์ฒญ์ ๋ณด๋ผ ๋, SecurityConfig์ ์ค์ ๋ ์ฃผ์๋ OncePerRequestFilter๋ฅผ ์ปค์คํฐ๋ง์ด์งํ ์ธ์ฆ/์ธ๊ฐ ํํฐ๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌ๊ฐ ๋๋๋ก ๊ตฌํํ์ต๋๋ค.
- ํํฐ์์๋ accessToken๊ณผ refreshToken์ ๊ฒ์ฆํ์ฌ ์ ํจํ๋ค๋ฉด, SecurityContext์์ ๊ด๋ฆฌ๋๋๋ก ๊ตฌํํ์ต๋๋ค.
- @AuthenticationPrincipal
- ํด๋น ์ด๋ ธํ ์ด์ ์ ์ปค์คํ ํ์ฌ SecurityContext์ ์ ์ฅ๋ ์ฌ์ฉ์๋ ์์ฒญ๊ณผ ๋์์ ํ์ํ ์ ๋ณด๋ฅผ ํจ๊ป ์ค ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
- ํ ์คํธ ์ฝ๋๋ JUnit5๋ฅผ ํ์ฉํด ์ด 37๊ฐ๋ฅผ ์์ฑํ๊ณ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ Class 95%, Method 93%, Line 93%์ ๋๋ค.
- ์ปจํธ๋กค๋ฌ๋ ํตํฉ ํ ์คํธ๋ฅผ ์งํํ๊ณ , ๊ทธ ์ธ๋ ๋จ์ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
- ๊ฐ์ธ ์ ๋ณด ์ํธํ
- ๋น๋ฐ๋ฒํธ : Spring Security PasswordEncoder ์ธํฐํ์ด์ค ๊ตฌํ์ฒด์ธ Bcrypt ์ํธํ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.
- ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ : ์ค๋ณต ๊ฒ์ฌ๋ฅผ ์ํด AES-128 ์/๋ณตํธํ ๋ฐฉ์์ ํ์ฉํ์ต๋๋ค.
- ๋ก๊ทธ์ธ์ ์ฑ๊ณต์ ์ผ๋ก ํ๋ฉด ์์ธ์ค ํ ํฐ ๋ฐ ๋ฆฌํ๋ ์ฌ ํ ํฐ์ ๋ฐ๊ธ ์๋ตํด์ค๋๋ค.
- ์ด๋ฐ์ ๋ฐ๊ธ๋ ํ ํฐ์ Authorization Header์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์์ธ์ค ํ ํฐ
- ์ฌ์ฉ์ ์์ด๋์, ์ฌ์ฉ์ ์ด๋ฆ, ์ฌ์ฉ์ ๊ถํ์ ํด๋ ์ ์ ๋ณด๋ก ๊ฐ๊ฒ ํ์ต๋๋ค.
- ๋ณด์(ํ ํฐ ํ์ทจ)์ ์ํด ๋ง๋ฃ๊ธฐ๊ฐ์ ์งง๊ฒ ๊ฐ์ ธ๊ฐ์ต๋๋ค. (5๋ถ)
- ๋ฆฌํ๋ ์ฌ ํ ํฐ
- ์์ธ์ค ํ ํฐ ์ฌ๋ฐ๊ธ์ ์ํด ๋ง๋ค์๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์ ์์ด๋๋ง ํด๋ ์ ์ ๋ณด๋ก ๊ฐ๊ฒ ํ์ต๋๋ค.
- ์ฌ๋ฐ๊ธ ์ฉ๋๋ก๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ๋ง๋ฃ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ๊ฐ์ ธ๊ฐ์ต๋๋ค. (7์ผ)
- ๋ณด์์ ์ํด ์์ธ์ค ํ ํฐ ์ฌ๋ฐ๊ธ ์, ๋ฆฌํ๋ ์ฌ ํ ํฐ๋ ํจ๊ป ์ฌ๋ฐ๊ธ ํ๋๋ก ๊ตฌํํ์ต๋๋ค.
- ๋ฆฌํ๋ ์ฌ ํ ํฐ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๋ฆฌ๋๊ณ ํ ํฐ ์ฌ๋ฐ๊ธํ ๋๋ง๋ค ์
๋ฐ์ดํธ๋ฉ๋๋ค.
- ํด๋ก ํ ๋ฐ๋ก ๋ณ๋ ์ค์ ์์ด ๋ฐ๋ก ์คํํด๋ณผ ์ ์๋๋ก Redis๋ก ๊ด๋ฆฌํ์ง ์์ต๋๋ค.
- Java17 , Spring Boot 3.x , JPA , H2 , Gradle๋ฅผ ํ์ฉํฉ๋๋ค.
- H2 Embedded DB๋ฅผ ์ฌ์ฉํ๋, ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋๋ก ์คํํ ์ ์๊ฒ ์ค์ ํ์ต๋๋ค.
- API ๊ตฌํ
- ํ์๊ฐ์
- ๋ก๊ทธ์ธ
- ๋ชจ๋ ์์ฒญ/์๋ต
application/json
ํ์ ์ผ๋ก ๊ตฌํํ์ต๋๋ค. - ๊ฐ ๊ธฐ๋ฅ ๋ฐ ์ ์ฝ์ฌํญ์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํ์ต๋๋ค.
-
swagger
๋ฅผ ํ์ฉํด API ํ์ธ/์คํ์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์ต๋๋ค. - ๋ฏผ๊ฐ ์ ๋ณด๋ ์ํธํํ์ฌ ์ ์ฅํ์ต๋๋ค.
- Ex : ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ๋น๋ฐ๋ฒํธ