Medium Article ์ฝ๊ณ ๋ฌธ์ ์ ๋ตํ๊ธฐ(์ด๋ก )
์๊ตฌ ์ฌํญ
- ์ง๊ธ๊น์ง ์๊ฐํ ๊ต๊ณผ๋ชฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
- ์น ํ์ด์ง ์ ์ ์ ์ธ์ฆ ์ ๋ฌด๋ฅผ ์ฒดํฌ
- ์ธ์ฆ๋์์ผ๋ฉด ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋
- ๋ฏธ์ธ์ฆ์ ์์ฒด์ ์ผ๋ก ์์ฑํ ๋ก๊ทธ์ธ ํผ์ ์ถ๋ ฅํ๊ณ ์ ๋ ฅ๋ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด๋ DB์ ์ ์ฅ
- ๋ฉ์ธ ํ์ด์ง์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉ๋ด๊ฐ ์์
- ํ๋ /ํ๊ธฐ๋ณ ์ด์ ํ์ ์กฐํ
- ์๊ฐ ์ ์ฒญํ๊ธฐ 2021๋ 1ํ๊ธฐ์ ์ ์ฒญํ ์์ ๊ต๊ณผ๋ชฉ์ ์น ํผ์ ํตํด ์ ๋ ฅ ๋ฐ๊ณ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ๊ฒ์ฆ ์์ ์ ์ค์ํ ํ(์ค๋ฅ์ ์ฌ์ ๋ ฅ ์์ฒญ) DB์ ์ ์ฅ
- ์๊ฐ ์ ์ฒญ ์กฐํ
์์ธ๋ณด๊ธฐ ๋งํฌ ํด๋ฆญ ์ ํ๊ธฐ๋ณ ์๊ฐ ๋ด์ญ ์ถ๋ ฅ๋ ๋ ํ๊ธฐ ์ทจ๋ ํ์ ์์ธ๋ณด๊ธฐ ... ... ... ... 2020 1 18 ๋งํฌ 2020 2 18 ๋งํฌ ์ด๊ณ 94 ๋ ๋ ํ๊ธฐ ๊ต๊ณผ๋ชฉ๋ช ๊ต๊ณผ๊ตฌ๋ถ ๋ด๋น๊ต์ ํ์ 2020 1 ์ ๋ณด๋ณด์ ์ ์ ๊น๋จ์ค 3 2020 1 ์ด์์ฒด์ ์ ์ ํฉ๊ธฐํ 3 ... ... ... ... ... ... ๋ ๋ ํ๊ธฐ ๊ต๊ณผ๋ชฉ๋ช ๊ต๊ณผ๊ตฌ๋ถ ๋ด๋น๊ต์ ํ์ 2021 1 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ ๊น์์ 3 2021 1 ์๋๋ก์ด๋ ์ ์ง ํ์ค์ 3 ... ... ... ... ... ...
์คํ ๊ฒฐ๊ณผ
์๊ตฌ ์ฌํญ
๊ธฐ๋ณธ ์์ค๋ฅผ ์์ ํ์ฌ Product์ Category๋ฅผ ๊ด๋ฆฌํ๋ REST API๋ฅผ ๊ตฌํํ๊ธฐ์คํ ๊ฒฐ๊ณผ
- Product์ Category ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ์
$ cd eCommerce/src/main/resources $ mysql -u root -p $ use eCommerce; $ source data.sql;
- Postman์ผ๋ก ์ ์ฒด ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค :)
์คํฌ๋ฆฐ์ท
-
๋ชจ๋ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/products
-
ํน์ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/products/{id}
-
product ์์ฑํ๊ธฐ:
POST
http://localhost:8080/ecommerce/api/products
-
product ์์ ํ๊ธฐ:
PUT
http://localhost:8080/ecommerce/api/products/{id}
-
product ์ญ์ ํ๊ธฐ:
DELETE
http://localhost:8080/ecommerce/api/products/{id}
-
๋ชจ๋ category ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/categories
-
ํน์ category ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/categories/{id}
-
category ์์ฑํ๊ธฐ:
POST
http://localhost:8080/ecommerce/api/categories
-
category ์์ ํ๊ธฐ:
PUT
http://localhost:8080/ecommerce/api/categories/{id}
-
category ์ญ์ ํ๊ธฐ:
DELETE
http://localhost:8080/ecommerce/api/categories/{id}
-
๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/categories/{parent_id}/subcategories
- ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ์ ์์ ์นดํ ๊ณ ๋ฆฌ ์ฐ๊ฒฐํ๊ธฐ
-
๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์ ๊ฑฐํ๊ธฐ:
DELETE
http://localhost:8080/ecommerce/api/categories/{parent_id}/subcategories
-
์นดํ
๊ณ ๋ฆฌ์ ์ํ ๋ชจ๋ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/ecommerce/api/categories/{id}/products
- product๋ฅผ ์นดํ ๊ณ ๋ฆฌ์ ๋ฃ๊ธฐ
-
product๋ฅผ ์นดํ
๊ณ ๋ฆฌ์์ ์ ๊ฑฐํ๊ธฐ:
DELETE
http://localhost:8080/ecommerce/api/categories/{category_id}/products/{product_id}
-
๋ชจ๋ product ์กฐํํ๊ธฐ:
์๊ตฌ ์ฌํญ
์ ๊ณต๋ ๊ธฐ๋ณธ ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Spring Boot 2.4.5์์ ๋ค์์ ์ํํ๊ธฐREADME.md
์ 6๋ฒ ํญ๋ชฉ์ ๋ฐ๋ผ Postman์ ์ฌ์ฉํ์ฌ Request๋ฅผ ๋ณด๋ด๊ณ Response๋ฅผ ๋ณด์ด๊ธฐ- Charlie ๊ณ์ (๊ถํ์ admin, ํจ์ค์๋๋ charliepw)์
data.sql
์ ์ ์ฅํ๊ธฐ - ํจ์ค์๋๋ BCryptPasswordEncoder๋ฅผ ์ด์ฉํ์ฌ ํด์ฌ๊ฐ์ ์ ์ฅ
GET /api/products
๋ฅผ ํธ์ถํ์ ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋ณด์ผ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋ก๊ทธ์ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ง์ ๋ณด์ด๊ธฐGET /api/categories/1
์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต ๋ฉ์์ง(hypermedia)๋ฅผ ๋ณด์ธ ๋ค์, ์ด์ ๊ด๋ จ๋ ํ๋ก๊ทธ๋จ ์์ค๋ฅผ ์ง์ ํ๊ณ ์ค๋ช ํ๊ธฐ- Category์์ ํน์ Product๋ฅผ ์ ๊ฑฐํ๋ ์ฝ๋ ์์ฑํ๊ณ ๊ฒฐ๊ณผ ๋ณด์ด๊ธฐ
- ์๋ต ์ํ ์ฝ๋(status code)๋
204 No Content.
๋ก ์ค์
์คํ ๊ฒฐ๊ณผ
- Product์ Category ๋ฐ User ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ์
$ cd ecommerce-springboot-rest/src/main/resources $ mysql -u root -p $ use ecommerce; $ source data.sql;
- Postman์ผ๋ก ์ ์ฒด ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค :)
์คํฌ๋ฆฐ์ท
- ๋ชจ๋ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/products - ํน์ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/products/{id} - product ์์ฑํ๊ธฐ:
POST
http://localhost:8080/api/products - product ์์ ํ๊ธฐ:
PUT
http://localhost:8080/api/products/{id} - product ์ญ์ ํ๊ธฐ:
DELETE
http://localhost:8080/api/products/{id} - ๋ชจ๋ category ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/categories - ํน์ category ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/categories/{id} - category ์์ฑํ๊ธฐ:
POST
http://localhost:8080/api/categories - category ์์ ํ๊ธฐ:
PUT
http://localhost:8080/api/categories/{id} - category ์ญ์ ํ๊ธฐ:
DELETE
http://localhost:8080/api/categories/{id} - ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/categories/{parent_id}/subcategories - ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ์ ์์ ์นดํ ๊ณ ๋ฆฌ ์ฐ๊ฒฐํ๊ธฐ
- ์ฐ๊ฒฐํ๊ธฐ:
POST
http://localhost:8080/api/categories/{parent_id}/subcategories/{child_id} - ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์ ๊ฑฐํ๊ธฐ:
DELETE
http://localhost:8080/api/categories/{parent_id}/subcategories - ์นดํ
๊ณ ๋ฆฌ์ ์ํ ๋ชจ๋ product ์กฐํํ๊ธฐ:
GET
http://localhost:8080/api/categories/{id}/products - product๋ฅผ ์นดํ ๊ณ ๋ฆฌ์ ๋ฃ๊ธฐ
- ๋ชจ๋ product ์กฐํํ๊ธฐ: