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 ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/products
 
- 
        ํน์  product ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/products/{id}
 
- 
        product ์์ฑํ๊ธฐ: POSThttp://localhost:8080/ecommerce/api/products
 
- 
        product ์์ ํ๊ธฐ: PUThttp://localhost:8080/ecommerce/api/products/{id}
 
- 
        product ์ญ์ ํ๊ธฐ: DELETEhttp://localhost:8080/ecommerce/api/products/{id}
 
- 
        ๋ชจ๋  category ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/categories
 
- 
        ํน์  category ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/categories/{id}
 
- 
        category ์์ฑํ๊ธฐ: POSThttp://localhost:8080/ecommerce/api/categories
 
- 
        category ์์ ํ๊ธฐ: PUThttp://localhost:8080/ecommerce/api/categories/{id}
 
- 
        category ์ญ์ ํ๊ธฐ: DELETEhttp://localhost:8080/ecommerce/api/categories/{id}
 
- 
        ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/categories/{parent_id}/subcategories
 
- ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ์ ์์ ์นดํ ๊ณ ๋ฆฌ ์ฐ๊ฒฐํ๊ธฐ
- 
        ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์ ๊ฑฐํ๊ธฐ: DELETEhttp://localhost:8080/ecommerce/api/categories/{parent_id}/subcategories
 
- 
        ์นดํ
๊ณ ๋ฆฌ์ ์ํ ๋ชจ๋  product ์กฐํํ๊ธฐ: GEThttp://localhost:8080/ecommerce/api/categories/{id}/products
 
- product๋ฅผ ์นดํ ๊ณ ๋ฆฌ์ ๋ฃ๊ธฐ
- 
        product๋ฅผ ์นดํ
๊ณ ๋ฆฌ์์ ์ ๊ฑฐํ๊ธฐ: DELETEhttp://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 ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/products
- ํน์  product ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/products/{id}
- product ์์ฑํ๊ธฐ: POSThttp://localhost:8080/api/products
- product ์์ ํ๊ธฐ: PUThttp://localhost:8080/api/products/{id}
- product ์ญ์ ํ๊ธฐ: DELETEhttp://localhost:8080/api/products/{id}
- ๋ชจ๋  category ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/categories
- ํน์  category ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/categories/{id}
- category ์์ฑํ๊ธฐ: POSThttp://localhost:8080/api/categories
- category ์์ ํ๊ธฐ: PUThttp://localhost:8080/api/categories/{id}
- category ์ญ์ ํ๊ธฐ: DELETEhttp://localhost:8080/api/categories/{id}
- ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/categories/{parent_id}/subcategories
- ๋ถ๋ชจ ์นดํ ๊ณ ๋ฆฌ์ ์์ ์นดํ ๊ณ ๋ฆฌ ์ฐ๊ฒฐํ๊ธฐ
- ์ฐ๊ฒฐํ๊ธฐ: POSThttp://localhost:8080/api/categories/{parent_id}/subcategories/{child_id}
- ๋ถ๋ชจ ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์์ ์นดํ
๊ณ ๋ฆฌ ์ ๊ฑฐํ๊ธฐ: DELETEhttp://localhost:8080/api/categories/{parent_id}/subcategories
- ์นดํ
๊ณ ๋ฆฌ์ ์ํ ๋ชจ๋  product ์กฐํํ๊ธฐ: GEThttp://localhost:8080/api/categories/{id}/products
- product๋ฅผ ์นดํ ๊ณ ๋ฆฌ์ ๋ฃ๊ธฐ
 
- ๋ชจ๋  product ์กฐํํ๊ธฐ: 

























