๐ข cycle: Springboot๋ฅผ ํ์ฉํ ์ค๊ณ ๊ฑฐ๋ ์ฌ์ดํธ
์ ๋ฐ์ ์ธ ์น์ ๊ธฐ๋ณธ ์์์ด ๋๋ ๊ฒ์ํ ํ๋ก์ ํธ์
๋๋ค.
๋ชฉ์ฐจ
๋ค์ด๊ฐ๋ฉฐ
1. ํ๋ก์ ํธ ๊ธฐํ ๋ฐฐ๊ฒฝ
์ค๊ณ ๊ฑฐ๋ ์๋น์ค๋ฅผ ๊ตฌํํด๋ด์ผ๋ก์จ ํ๋งค์์ ๊ตฌ๋งค์๋ฅผ ๊ตฌ๋ถํ์ฌ ์ ์ ์๋น์ค๋ฅผ ์ต์ ํํ๊ณ ์๋ฐ ๊ธฐ๋ฐ ๋ฐฑ์๋ ์ญ๋ ํฅ์๊ณผ ์๋ก์ด ๊ธฐ์ ์คํ์ ๊ฒฝํํด๋ณด๊ณ ์ ๊ธฐํํ์์ต๋๋ค. ๋ํ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์ฑ
๊ณผ ๊ฐ์๋ฅผ ๋ฐ๋ผํ์ฌ ๋ง๋๋ ๊ฒ์ด ์๋ ๋ด๊ฐ ์ง์ ๊ธฐ๋ฅ์ ๋ํ ๊ตฌํ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ณ , ์ฌ๋ฌ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ฉฐ ์ ์ฉํ๋ ํ์ ํค์ฐ๊ธฐ ์ํด ํ๋ก์ ํธ๋ฅผ ์์ํ์ต๋๋ค.
2. ํ๋ก์ ํธ ์ค๋ช
- ๊ถํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ ๋ถ๋ฆฌ
- SpringSecurity๋ฅผ ํ์ฉํด MasterAdmin, User ๊ถํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ ๋ถ๋ฆฌ
- ๊ฒ์ํ - User, Class ๊ด๋ จ CRUD API ๊ฐ๋ฐ, ์กฐํ์, ํ์ด์ง ๋ฐ ๊ฒ์ ์ฒ๋ฆฌ
- ์ฌ์ฉ์ - Security ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ, JWT๋ฅผ ์ด์ฉํ์ฌ AccessToken, Refresh Token ๋ฐ๊ธ, ํ์์ ๋ณด ์์ , ํ์๊ฐ์
์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ค๋ณต ๊ฒ์ฌ
- ๋ก๊ทธ์ธ ์ธ์
์ ์ด์ฉํ ROLE๋ณ๋ก ๊ตฌ๋งค์์ ํ๋งค์ ํ์ด์ง ๋ ๋๋ง
- ๊ตฌ๋งค์๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ๋ด๊ณ ๊ตฌ๋งคํ๊ณ , ๊ตฌ๋งค์ ์ ๋ณด์ ํ๋งค์ ์ ๋ณด๊ฐ History Entity์ ๋ด๊ธฐ๊ฒ ๋๊ณ , ๊ทธ๊ฑธ ๋ฐํ์ผ๋ก ๊ตฌ๋งคํต๊ณ์ ํ๋งคํต๊ณ ๊ตฌํ
- ํ๋งค์
- ํ๋งค์ ํ์ด์ง, ์ํ CRUD, ์ํ๊ด๋ฆฌ, ํ๋งค ํํฉ ์กฐํ
- ๊ตฌ๋งค์
- ๋ง์ดํ์ด์ง, ์ฅ๋ฐ๊ตฌ๋, ์ฃผ๋ฌธ/์ฃผ๋ฌธ์ทจ์, ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ, KaKao ๊ฒฐ์ API
3. ํ๋ก์ ํธ ๊ธฐ๊ฐ
2023.08. ~ 2023.09 (5์ฃผ)
๊ธฐ๊ฐ |
์ค๋ช
|
08.14 ~ 08.16 |
๊ธฐํ ๋ฐ Entity ์ค๊ณ ์ํ ๊ธฐ๋ฅ ๊ตฌํ(CRUD) ์ํ CRUD ๊ด๋ จ html |
08.17 ~ 08.20 |
๋ฉ์ธํ๋ฉด ํ๋ก ํธ ๊ตฌ์ฑ DB ์คํค๋ง ๊ตฌ์ฑ ๋ฉ์ธํ๋ฉด ๋ ์ด์์ ๊ตฌ์ฑ |
08.22 ~ 08.27 |
Spring security๋ก ํ์๊ฐ์
, ๋ก๊ทธ์ธ ๊ตฌํ API ์คํ ๊ตฌ์ฑํ๊ธฐ ์ฃผ๋ฌธ ๊ด๋ จ Entity ์ถ๊ฐ ์ค๊ณ ํ๋งค์/๊ตฌ๋งค์ ํ๋กํ ํ์ด์ง์ ์ฐ๊ด๋ ํ์์ ๋ณด์์ ๊ตฌํ |
08.29 ~ 09.02 |
Entity ํด๋์ค ์ค๊ณ ๋ฐ JPA๋ก ์ฐ๊ด๊ด๊ณ ์ค์ ์ํ๊ด๋ฆฌ ํ์ด์ง, ํ๋งค๋ด์ญ ํ์ด์ง ์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค ๊ธฐ๋ฅ ๊ตฌํ |
09.02 ~ 09.06 |
์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค ์ค๋ฅ ํด๊ฒฐ ๊ฐ๋ณ ์ํ ๊ตฌ๋งค ๊ธฐ๋ฅ ์ถ๊ฐ ์ฃผ๋ฌธ ์ทจ์ ๊ธฐ๋ฅ ๊ตฌํ ํ๋งค ํต๊ณ ๋ฐ ํ๋งค ์์ ๊ตฌํ |
09.08 ~ 09.12 |
๊ธฐ๋ฅ ๋ณ ์์ธ ์ฒ๋ฆฌ ์ถฉ์ API ์ถ๊ฐ
|
09.13 ~ 09.20 |
์์ฑ ๋ฐ ๋ฆฌํฉํ ๋ง ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ์ |
๊ตฌ์กฐ ๋ฐ ์ค๊ณ
1. Tech Stack
- Java : 11 version
- Spring Boot : 2.7.2
- Build Tool : Gradle 7.2
- DB : MariaDB Driver, MySQL Workbench
- Etc : Thymeleaf, Spring Security, Spring Web, Spring Data JPA, Lombok, Oauth2-client, Html/Css, JavaScript, Bootstrap 4.3.1
2. ์ํคํ
์ฒ
3. ERD
DB ์ค๊ณ
- User, Item, Cart, Cart_item, Board, History
ํ์๊ณผ ์ํ
- ์ํ์ 1๋ช
์ ํ์์ด ๋ฑ๋กํ ์ ์๊ณ , ์ํ์ ์์ฑ์(ํ์) ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ ๋ช
์ ํ์์ ์ฌ๋ฌ ์ํ์ ๋ฑ๋กํ ์ ์๋ค.
**โ User(1) - Item(N)**
์ํ๊ณผ ์ํ์ด๋ฏธ์ง
- ์ด๋ฏธ์ง๋ ์์ ์ด ์ด๋ค ์ํ์ ํด๋น๋๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ ๊ฐ์ ์ํ์ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง ์ ์๋ค.
**โ Item(1) - ItemPhoto(N)**
์ฅ๋ฐ๊ตฌ๋
- ์ด๋ค ํ์์ ์ฅ๋ฐ๊ตฌ๋์ธ์ง, ๋ด๊ธด ์ํ๋ค์ ๋ฌด์์ธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ ๋ช
์ ํ์์ ์ฅ๋ฐ๊ตฌ๋์ ์ฌ๋ฌ ์ํ์ ๋ด์ ์ ์๋ค.
= CartItem์ CartId๋ฅผ ๊ฒ์ํ๋ฉด N๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ค.
**โ User(1) - CartId(N)**
- ํ ๊ฐ์ ์ํ์ ์ฌ๋ฌ ํ์์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธธ ์ ์๋ค.
= CartItem์ itemId๋ฅผ ๊ฒ์ํ๋ฉด N๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ค.
**โ CartItem(N) - Item(1)**
์ฃผ๋ฌธ
- ์ด๋ค ํ์์ ์ฃผ๋ฌธ์ธ์ง, ๋ด๊ธด ์ํ๋ค์ ๋ฌด์์ธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (์ฃผ๋ฌธ์ํ์์ ํด๋น ์ญํ ์ ์ํํ๋ค.)
- ํ ๋ช
์ ํ์์ ์ฌ๋ฌ ์ฃผ๋ฌธ์ ์์ฒญํ ์ ์๋ค.
= Cart_Item์ CartId๋ฅผ ๊ฒ์ํ๋ฉด N๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ค.
**โ User(1) - Cart(N)**
- ํ ๊ฐ์ ์ฃผ๋ฌธ์ ์ฌ๋ฌ ์ํ๋ค์ ๋ด์ ์ ์๋ค.
= Cart์ UserId๋ฅผ ๊ฒ์ํ๋ฉด ์ฌ๋ฌ ์ฃผ๋ฌธ(N) * ์ฌ๋ฌ ์ํ(M)๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ค.
โ ๋ค๋๋ค ๋งคํ์ด๋ ์ฃผ๋ฌธ๊ณผ ์ํ ์ฌ์ด์ **์ฃผ๋ฌธ์ํ** ํ
์ด๋ธ์ ์์ฑํ๋ค.
์ฃผ๋ฌธ์ํ
- ์ด๋ค ์ฃผ๋ฌธ์ ์ด๋ค ์ํ๋ค์ด ๋ด๊ฒจ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ ๊ฐ์ ์ฃผ๋ฌธ์ ์ฌ๋ฌ ์ํ๋ค์ ๋ด์ ์ ์๋ค.
= Cart_Item์ CartId๋ฅผ ๊ฒ์ํ๋ฉด N๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ ๋๋ค.
**โ Cart_Item(1) - Cart_Id(N)**
- ํ ๊ฐ์ ์ํ์ ์ฌ๋ฌ ์ฃผ๋ฌธ์ ๋ด๊ธธ ์ ์๋ค.
= Cart_Item์ itemId๋ฅผ ๊ฒ์ํ๋ฉด N๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ ๋๋ค.
**โ ItemId(N) - Cart_Item(1)**
- ์ํ์ 1๋ช
์ ํ์์ด ๋ฑ๋กํ ์ ์๊ณ , ์ํ์ ์์ฑ์(ํ์) ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ ๋ช
์ ํ์์ ์ฌ๋ฌ ์ํ์ ๋ฑ๋กํ ์ ์๋ค.
**โ User(1) - Item(N)**
๊ตฌํ ๊ฒฐ๊ณผ
1) ํ์๊ฐ์
/๋ก๊ทธ์ธ
-
[x] ํ์๊ฐ์
-
ํ์๊ฐ์
์ ๋๋ค์, ๋น๋ฐ๋ฒํธ, ์ ํ๋ฒํธ, ์ฃผ์, ์ด๋ฉ์ผ๋ฅผ ์
๋ ฅํจ.
-
[x] ๋ก๊ทธ์ธ
-
ํ์๊ฐ์
์ฌ๋ถ๋ฅผ ์ฒดํฌํจ.
-
๋น๋ฐ๋ฒํธ ์ผ์น ์ฌ๋ถ๋ฅผ ์ฒดํฌํจ.
-
๋ณด์์ ๊ณ ๋ คํ์ฌ JWT(access token, refresh token) ๋ฐฉ์์ ํตํด ๋ก๊ทธ์ธ ์ธ์ฆ.
-
๋ก๊ทธ์ธ ์คํจ์ ์คํจ ๋ฌธ๊ตฌ (์ด 3๋ฒ)
2) ํ๋งค์ ๋ฉ์ธ ํ์ด์ง(ํ)
-
[x] ์ํ ๋ฑ๋ก
-
[x] ํ๋งค๋ชฉ๋ก ๋ฐ ํ๋งคํต๊ณ, ํ๋งค๋ ์์
-
ํ๋งค์๋ ์ํ๋ ์ํ์ ์ํ๋ช
, ์๋, ๊ฐ๊ฒฉ, ์ด๋ฏธ์ง ๋ฑ์ ์
๋ ฅํ์ฌ ์ฌ๋ฆด ์ ์์.
-
ํ์ฌ๊น์ง ํ๋งค๋ ํ๋งค๋ชฉ๋ก, ํต๊ณ, ํ๋งค๋ ์์๋ฅผ ๋ณผ ์ ์์.
3) ํ๋งค์ ๋ง์ด ํ์ด์ง
- [x] ๋ด ์ ๋ณด ์์ ํ๊ธฐ
- ํ๋งค์๋ ๋๋ค์, ์ฃผ์, ์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ฌ์ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํจ.
4) ๊ตฌ๋งค์ ๋ฉ์ธ ํ์ด์ง(ํ)
- [x] ์ฅ๋ฐ๊ตฌ๋ ๋ฐ ๊ตฌ๋งค๋ด์ญ
- ๊ตฌ๋งค์๋ ์ํ๋ ์ํ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ณ ๊ตฌ๋งคํ ์ ์์.
5) ๊ตฌ๋งค์ ๋ง์ด ํ์ด์ง
-
[x] ๋ด์ ๋ณด ์์ ํ๊ธฐ
-
๊ตฌ๋งค์๋ ๋๋ค์, ์ฃผ์, ์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ฌ์ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํจ.
-
[x] ๊ธ์ก ์ถฉ์ ํ๊ธฐ
-
๊ตฌ๋งค์์ ์์ก์ด ๋ถ์กฑํ ๊ฒฝ์ฐ, ์นด์นด์ค QR๊ฒฐ์ ๋ฅผ ํตํด ์ํ๋ ๊ธ์ก์ ์ ํ ํ QR์ฝ๋๋ก ๊ธ์ก์ ์ถฉ์ ํจ.
์ค๊ณ ๊ฑฐ๋ ํ๋ก์ ํธ ์ค๊ณ ๋ฐ ์ผ์ ๊ด๋ฆฌ
Notion link
๋
ธํ์ฐ ๊ณต์
[Spring] DAO์ DTO
[Spring] Spring Data JPA ์ ๋ฆฌ
[Spring] Spring Security
[Spring] Springboot build and deploy tools
[Spring] Thymeleaf์ ๋ฆฌ
[Spring] ๋๋ฉ์ธ ํด๋์ค ๊ด๋ จ ์ฐธ๊ณ ์ฌํญ(1)
[Spring] ๋๋ฉ์ธ ํด๋์ค ๊ด๋ จ ์ฐธ๊ณ ์ฌํญ(2)
[Spring] ์๋ฒ ์ฌ์์ํ์ง ์๊ณ view ๋ณ๊ฒฝ ํ์ธํ๊ธฐ
๋ง์น๋ฉฐ
1. ์๊ฒ๋ ์
- @Transactional ์ด๋
ธํ
์ด์
์ ๋ํด ๊ณต๋ถํ๊ฒ ๋์์ต๋๋ค.
- JPA ์ฐ๊ด๊ด๊ณ์ ๋ํด ๋์ฑ ์ ์๊ฒ๋๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค.
- ์ธ์
๊ณผ ROLE์ ์ด์ฉํ์ฌ ์ญํ ๋ณ ๊ธฐ๋ฅ์ ๊ตฌ๋ถํ๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฒ ๋์์ต๋๋ค.
- Spring Framework์ ๋์๊ณผ์ ์ ์ตํ์ต๋๋ค.
- MVC๊ตฌ์กฐ์ ์๋น์ค ํ๋ฆ์ ์ตํ์ต๋๋ค.
- JWT ํ ํฐ์ ๊ฐ๋
๊ณผ ์ฌ์ฉ๋ฒ์ ์ตํ์ต๋๋ค.
- ๋ฐฑ์๋ ์์ฒญ์ ํ์ํ ์ธ์ฆ/์ธ๊ฐ ๋ถ๋ถ์ ํ์ตํ์ต๋๋ค.
- Spring MVC์์ ์ ๊ณตํ๋ Interceptor๊ธฐ๋ฅ์ผ๋ก ์์ฒญ ์ ํจ์ฑ์ ํ๋จํ ์ ์์์ต๋๋ค.