๐ ๏ธ DB Diagram
ERD ์๋ ์์ฑ์ ๋์์ฃผ๋ ์ฌ์ดํธ
dbdiagram.io - Database Relationship Diagrams Design Tool
dbdiagram.io
์ข์ธก์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ฐ์ธก์ ERD๋ก ์ถ๋ ฅํด์ค๋ค.
ํ ์ด๋ธ ์์ฑ
Table ํ
์ด๋ธ๋ช
{
์์ฑ๋ช
์์ฑํ์
}
PK๋ AI ๋ฑ๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ค๋ ํจ๊ป ์์ฑํด์ค ์ ์๋ค.
๊ด๊ณ ์ค์
Ref ๊ด๊ณ๋ช
: ํ
์ด๋ธ๋ช
1.์์ฑ๋ช
1 - ํ
์ด๋ธ๋ช
2.์์๋ช
2 // one-to-one
Ref ํ
์ด๋ธ๋ช
1.์์ฑ๋ช
1 > ํ
์ด๋ธ๋ช
2.์์๋ช
2 // many-to-one
Ref ํ
์ด๋ธ๋ช
1.์์ฑ๋ช
1 < ํ
์ด๋ธ๋ช
2.์์๋ช
2 // one-to-many
๊ด๊ณ๋ช ์ ์๋ต ๊ฐ๋ฅํ๋ฉฐ ๋ ์์ฑ์ - ํน์ ๋ถ๋ฑํธ๋ก ๊ด๊ณ๋ฅผ ํํํด์ค๋ค.
- - : ์ผ๋์ผ ๊ด๊ณ
- > or < : ์ผ๋๋ค ๊ด๊ณ (๋ถ๋ฑํธ ๋ฒ๋ฆฐ์ชฝ์ด ๋ค)
โ๐ป API ์ค๊ณ
๋์ ํ๋งค ์ฌ์ดํธ์ API๋ฅผ ์ค๊ณํด๋ณด์.
ํ์ API
1. ํ์ ๊ฐ์
Method | POST |
URI | /join |
HTTP status code | ์ฑ๊ณต 201 |
RequestBody | { email : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ”, password : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ” } |
ResponseBody |
2. ๋ก๊ทธ์ธ
Method | POST |
URI | /login |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | { email : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ”, password : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ” } |
ResponseBody | JWT Token |
3. ๋น๋ฐ๋ฒํธ ์ด๊ธฐํ ์์ฒญ
๋น๋ฐ๋ฒํธ๋ฅผ ์ด๊ธฐํ ํ๊ธฐ ์ ์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ์ธ์ง ํ์ธ
Method | POST |
URI | /reset |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | { email : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ” } |
ResponseBody |
4. ๋น๋ฐ๋ฒํธ ์ด๊ธฐํ (= ์์ )
Method | PUT |
URI | /reset |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | { password : “์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ” } |
ResponseBody |
๋์ API
1. ์ ์ฒด ๋์ ์กฐํ
Method | GET |
URI | /books |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody | [ { id : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “์์ฝ ์ค๋ช ”, author : “๋์ ์๊ฐ”, price : ๊ฐ๊ฒฉ, likes : ์ข์์ ์, pubDate : “์ถ๊ฐ์ผ” }, { id : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “์์ฝ ์ค๋ช ”, author : “๋์ ์๊ฐ”, price : ๊ฐ๊ฒฉ, likes : ์ข์์ ์, pubDate : “์ถ๊ฐ์ผ” }, …. ] |
2. ๊ฐ๋ณ ๋์ ์กฐํ
Method | GET |
URI | /books/{bookId} |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody | [ { id : ๋์ id, title : “๋์ ์ ๋ชฉ”, category : “์นดํ ๊ณ ๋ฆฌ”, format : “ํฌ๋งท”, isbn : “isbn”, summary : “์์ฝ ์ค๋ช ”, description : “์์ธ ์ค๋ช ”, author : “๋์ ์๊ฐ”, pages : ์ชฝ ์, index : “๋ชฉ์ฐจ”, price : ๊ฐ๊ฒฉ, likes : ์ข์์ ์, liked : boolean, pubDate : “์ถ๊ฐ์ผ” } ] |
์ข์์ API
1. ์ข์์ ์ถ๊ฐ
Method | POST |
URI | /likes/{bookId} |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody |
2. ์ข์์ ์ทจ์
Method | DELETE |
URI | /likes/{bookId} |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody |
์ฅ๋ฐ๊ตฌ๋ API
1. ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ
Method | POST |
URI | /cart |
HTTP status code | ์ฑ๊ณต 201 |
RequestBody | { bookId : ๋์ id, count : ์๋ } |
ResponseBody |
2. ์ฅ๋ฐ๊ตฌ๋ ์กฐํ
Method | GET |
URI | /cart |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | { bookId : ๋์ id, count : ์๋ } |
ResponseBody | [ { cartItemId : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, bookId : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “๋์ ์์ฝ”, price : ๊ฐ๊ฒฉ, count : ์๋ }, { cartItemId : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, bookId : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “๋์ ์์ฝ”, price : ๊ฐ๊ฒฉ, count : ์๋ }, ] |
3. ์ฅ๋ฐ๊ตฌ๋ ๋์ ์ญ์
Method | DELETE |
URI | /cart/{bookId} |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody |
4. ์ฅ๋ฐ๊ตฌ๋์์ ์ ํํ ์ํ ๋ชฉ๋ก ์กฐํ
Method | GET |
URI | / .. |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | [ cartItemId, cartItemId, … ] |
ResponseBody | [ { cartItemId : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, bookId : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “๋์ ์์ฝ”, count : ์๋, price : ๊ฐ๊ฒฉ }, { cartItemId : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, bookId : ๋์ id, title : “๋์ ์ ๋ชฉ”, summary : “๋์ ์์ฝ”, count : ์๋, price : ๊ฐ๊ฒฉ }, ... ] |
* ์ฅ๋ฐ๊ตฌ๋์์ ์ ํํ ๋ด์ฉ ์ฆ, ์์ง ๊ฒฐ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ๋ฌธ API๊ฐ ์๋ ์ฅ๋ฐ๊ตฌ๋ API
์ฃผ๋ฌธ API
1. ๊ฒฐ์ ํ๊ธฐ = ์ฃผ๋ฌธํ๊ธฐ = ์ฃผ๋ฌธ ๋ฑ๋ก = ๋ฐ์ดํ ๋ฒ ์ด์ค ์ฃผ๋ฌธ insert && ์ฅ๋ฐ๊ตฌ๋์์ ์ฃผ๋ฌธํ ์ํ์ delete
Method | POST |
URI | /orders |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | { items : [{ cart_item_id : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, book_id : ๋์ id, count : ์๋ }, { cart_item_id : ์ฅ๋ฐ๊ตฌ๋ ๋์ id, book_id : ๋์ id, count : ์๋ } … ], delivery : { address : “์ฃผ์”, receiver : “์ด๋ฆ”, contact : “010-0000-0000” }, total_price : ์ด ๊ธ์ก } |
ResponseBody |
2. ์ฃผ๋ฌธ ๋ชฉ๋ก(๋ด์ญ) ์กฐํ
Method | GET |
URI | /orders |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | [ { order_id : ์ฃผ๋ฌธ id, created_at : “์ฃผ๋ฌธ ์ผ์”, delivery : { address : “์ฃผ์”, receiver : “์ด๋ฆ, contact : “์ ํ๋ฒํธ” }, bookTitle : “๋ํ ์ฑ ์ ๋ชฉ”, totalPrice : ๊ฒฐ์ ๊ธ์ก, totalCount : ์ด ์๋ } ] |
ResponseBody |
3. ์ฃผ๋ฌธ ์์ธ ์ํ ์กฐํ
Method | GET |
URI | /orders/{orderId} |
HTTP status code | ์ฑ๊ณต 200 |
RequestBody | |
ResponseBody | [ { bookId : ๋์ id, bookTitle : “๋์ ์ ๋ชฉ”, author : “์๊ฐ๋ช ”, price : ๊ฐ๊ฒฉ, count : ์๋ }, { bookId : ๋์ id, bookTitle : “๋์ ์ ๋ชฉ”, author : “์๊ฐ๋ช ”, price : ๊ฐ๊ฒฉ, count : ์๋ }, ... ] |
'๐๏ธ DevCourse > Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] Week 8 Express-generator ๊ตฌ์กฐ & ๋์ ์์ API ๊ธฐ๋ณธ ์ธํ (3) | 2025.03.11 |
---|---|
[TIL] Week 7 ํ๋ก์ ํธ ๊ด๋ฆฌ ์๋ฃจ์ ๋ณ ํน์ง (2) | 2025.03.10 |
[TIL] Week 6 ์ ํจ์ฑ ๊ฒ์ฌ์ JWT (0) | 2025.03.01 |
[TIL] Week 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค CLI (0) | 2025.02.25 |
[TIL] Week 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ฑ (0) | 2025.02.24 |