๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github pages | storybook |
---|---|---|---|---|---|
์ฅ๋ฐ๊ตฌ๋ 1๋จ๊ณ | 23-05-15 - 23-05-22 | Repo | PR & Review | ๐๏ธ ์ฅ๋ฐ๊ตฌ๋ | ๐ ์คํ ๋ฆฌ๋ถ |
๋ฏธ์ ํ๊ณ
๋ค์์ ์ฅ๋ฐ๊ตฌ๋ ๋ฏธ์ 2๋จ๊ณ์ ํ์ ์๊ตฌ ์ฌํญ์ด๋ค.
1. ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง
- ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง ๋งํฌ์ ์ ์์ฑํ๊ณ , ์ํ ๋ชฉ๋ก ํ์ด์ง์ ํจ๊ป ๋ชจ๋ฐ์ผ ํ๊ฒฝ ๋์
2. MSW๋ฅผ ํ์ฉํ API Mocking
- MSW๋ฅผ ํ์ฉํ์ฌ ์ค์ ์๋ฒ์ ์ฐ๋๋ ์ ์๋ API Mocking์ ๊ตฌํ
- ๋จ์ํ Endpoint ๋ณ๊ฒฝ์ผ๋ก ์ค์ API ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ์์
3. ํ ์คํธ
- ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง์์ ๋ค์ํ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์ ๋ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ณ ๋ฏผํ๊ณ , ์ ํํ ๋๊ตฌ๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ฆ
4. ์ฌ์ฉ์ ๊ฒฝํ
- ์๋ก๊ณ ์นจ ํด๋, ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ์ํ ์ ์ง
์ด์ ๋ฏธ์ ์์ ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง๊ฐ ์ถ๊ฐ๋์๋ค. ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง์์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ํ์ํ๋ค.
- ์ ์ฒด ์ ํ / ํด์
- ์ ์ฒด ์ญ์ / ์ ํ ์ญ์
- ์ํ ์๋ ์ฆ๊ฐ
- ๊ฒฐ์ ์์ ๊ธ์ก
๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ๊ณผ ์๋ก๊ณ ์นจ ํด๋ ์ฅ๋ฐ๊ตฌ๋ ์ํ์ด ์ ์ง๋๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ ํฐ ์ด๋ ค์์ด ์์๋ค. ๋ค๋ง, ๋ด๊ฐ ๊ณผ์ฐ ํจ์จ์ ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌ๋ฅผ ํ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ค์ ๋๋์ด ์ฌ์ฉ์ ํ๋์ง๊ฐ ํฐ ๊ด๊ฑด์ด์๋ค.
์คํ ๋ฆฌ๋ถ๋ ์ด์ ์ฌ์ฌ ์์ ์ต์ด๊ฐ๋ ๋๋์ด ๋ ๋ค. ๋จ, ํ๊ณ ์๋ ๊ฒ๋ง ๊ณ์ํ๋ค๋ ๊ฐ์ ํ์... ์์ ๋จ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ์ ์๊ฐํ์ฌ ์ด๋ฅผ ๋จผ์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ ๋ค์ํ ์ํฉ์ ์๊ฐํ๋ ์ฐ์ต์ ๊พธ์คํ ํ๊ณ ์๋ค. ์ด ๋ถ๋ถ์ ๋ ๋ฒจ 2์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ตํ ๋ถ๋ถ์ด๊ณ ์ฒ์ ์คํ ๋ฆฌ๋ถ์ ์ ํ์ ๋ ๋ณด๋ค ๋ง์ด ์ต์ํด์ก๋ค๊ณ ํ ์ ์๋ค. ํ์ง๋ง ์์ง ์ธํฐ๋ ์ ์ ์ ๋ณตํ์ง ๋ชปํ ๊ฒ ์ค ํ๋์ด๋ค.
MSW๋ผ๋ ๊ฒ์ ์ฅ๋ฐ๊ตฌ๋ 2๋จ๊ณ์์ ์ฒ์ ์ฌ์ฉํด ๋ณด์๋ค. ์ด๋ ๋ฐ๋ก ์๋์ ์ฑํฐ์์ ์กฐ๊ธ ๋ ์์ธํ ๋ค๋ฃฌ๋ค.
MSW(mock service worker)
์์ผ๋ก ์๋น์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ค๋ฉด ์๋ฒ๋ ๋น์ฐํ ํ์์ด๋ค. ํ์ง๋ง ์๋ฒ๊ฐ ์์ง ๋ฏธ์์ฑ์ด๋ผ๋ฉด ์ด๋กํ ๊น? ์ฐ๋ฆฐ ๊ฐ์ง ๋ฐ์ดํฐ์ธ mockData๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ํ์ง๋ง mockData๋ ๋น๋๊ธฐ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฅ ํ์ผ์ import๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ํต์ ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค.
๋ณด๋ค ์๋ฒ ํต์ ๊ณผ ๋น์ทํ๊ฒ mocking์ ํ ์ ์์๊น? ์ด๋ ์ ์ฉํ ๋๊ตฌ๊ฐ ๋ฐ๋ก MSW์ด๋ค. MSW๋ฅผ ํตํด ๋ฐฑ์๋ ์์ด ์์ฒญ, ์๋ต์ ๋์ ํ ์ ์๋ค.
๊ทธ๋ฅ ๋จ์ํ mockData๋ง ์ด์ฉํ๋ฉด ๋๋๋ฐ ์, ๋ ๋ณต์กํ ๋น๋๊ธฐ ํต์ ์ ๋ค๋ฃจ๊ธฐ ์ํด MSW๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น? ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ ๊ด์ ์์ ๋ฐฑ์๋์์ ์์กด์ฑ ์์ด ๊ฐ๋ฐ์ ํด๋๊ฐ๊ธฐ ์ํด์
- ๋ฐฑ์๋์์ ํด๋ผ์ด์ธํธ๋ก์จ API์ ๋ํ ๊ตฌ์ฒด์ ์ธ ํผ๋๋ฐฑ์ ์ฃผ๊ธฐ ์ํด์
- ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ ์ ์ฅ์์๋, 1๊ฐ์ ์์ฒญ์ ํ๊ณ ์๋ต๋ฐ๋ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์ํฉ์ ์๋ฎฌ๋ ์ด์ ์ ํ๊ธฐ ์ํด์
- MSW๋ฅผ ์ด์ฉํ๋ฉด, API ์์ฒญ์ ํ๊ณ ์๋ต์ ๋ฐ๋ ์๊ฐ์ ์กฐ์ ํ ์ ์์ด์
์ด๋ ๊ฒ ์ ์ฉํ MSW๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ๋ ์๋ค. ์คํ ๋ฆฌ๋ถ์ ์ด์ด ๋ ๋ฒจ 2์์ MSW์ด๋ผ๋ ํ๋ฐํธ์๋์๊ฒ ํ๋ฅญํ ๋๊ตฌ๋ฅผ ์ ์ ์์๋ค.
๋จ์ํ API ์์ฒญ์ ๋์ ํ๋ ๊ฒ์ ๋์ด, ์ค์ ์๋ฒ์ ์์ฒญํ ๋ ์๊ธธ ์ ์๋ ๋ค์ํ ์ํฉ์ ์ฌํํด ๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค. ์ฆ, ์๋ฒ์์ ๋ฐ์ ์๋ต์ 400๋ฒ๋, 500๋ฒ๋ ์๋ฌ๊ฐ ์๋ค๋ฉด ์ด์ ๋ํ ๋์๋ ์๊ฐํด ๋ณด๊ณ , ํต์ ์๊ฐ์ด ๊ธด ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋์์ ํด์ผ ํ๋์ง ๋ค์ํ ์ํฉ์ ์๊ฐํด ๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค.
์ค์ ์๋ฒ์ ์ฐ๋ํ๊ธฐ ์ ๋จ๊ณ๋ผ๊ณ ์๊ฐํ๋ฉด ๊ณ ๋ คํด์ผ ํ ์ ์ด ๋ง์ ๊ฒ์ด ๋น์ฐํ๋ค.
ํฉํญ์ด MSW ๋์ ๋ฐฉ์์ ๋ํ ํ๋กค๋ก๊ทธ๋ฅผ ์์ฑํ์ฌ ์ด๋ฅผ ๋จ๊ธฐ๋ฉฐ MSW์ ๋ํ ์ฒซ ์ธ์์ ๋ง๋ฌด๋ฆฌํ๋ค.
Promise ์ํ์ ๋ฐ๋ฅธ UI
์ด๋ฒ ๋ฏธ์ ์์๋ Fetch API์ MSW๋ฅผ ์ด์ฉํ์ฌ ๋ง์น ์๋ฒ๊ฐ ์กด์ฌํ๋ ๊ฒ์ฒ๋ผ ๋น๋๊ธฐ ํต์ ์ ํ์๋ค. Fetch API๊ฐ ์ ๊ณตํ๋ ์ ์ญ fetch() ๋ฉ์๋๋ก ๋คํธ์ํฌ์ ๋ฆฌ์์ค๋ฅผ ์ฝ๊ฒ ๋น๋๊ธฐ์ ์ผ๋ก ์ทจ๋์ ํ ์ ์๋๋ฐ, ์ด๋ Prmoise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ 3๊ฐ์ง ์ํ์ ๋ฐ๋ฅธ UI๋ฅผ ๋ง๋ค์ด์ผ ํ ํ์๊ฐ ์์๋ค. 3๊ฐ์ง ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- pending
- fulfilled
- rejected
์ด๋ฐ 3๊ฐ์ง์ ์ํ์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค UI๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ํฉ์ ์๋ง์ UI๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์์ผ ์ค ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด useFetch๋ผ๋ ํ ์ ๋ง๋ค์ด ๋น๋๊ธฐ ํต์ ์ ํ์ํ ๋ก์ง๊ณผ ์ํ๋ฅผ ๋ง๋ค์๋ค. ๋ก์ง์ ๋น์ฐํ fetchํ๋ ๋ก์ง์ด๊ณ ์ํ๋ 3๊ฐ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
1. fetch๋ฅผ ํตํด ์๋ฒ์์ ๊ฐ์ ธ์ค๋ data
2. ์๋ฒ์ ๋น๋๊ธฐ ํต์ ์ ํ๋ฉด์ ๊ฐ์ง ์ ์๋ 3๊ฐ์ง ์ํ๋ฅผ ๊ด๋ฆฌํ๋ status
3. ๋ง์ฝ rejected์ผ ๋, ์ค๋ฅ๋ฉ์์ง๊ฐ ํ์ํ๋ฏ๋ก ์ด๋ฅผ ์ํ errorMessage
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const [data, setData] = useState<T>();
const [status, setStatus] = useState<'pending' | 'fulfilled' | 'rejected'>('loading');
const [errorMessage, setErrorMessage] = useState<string | null>(null);
๊ทธ๋ ๋ค๋ฉด ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๋ถ๋ถ์ ์ด๋ป๊ฒ ๋ ๊น? ํ์ฌ ๋ฏธ์ ์์๋ useCartItems์ด๋ผ๋ ํ ์์ ์ฌ์ฉ๋๋ค. ํด๋น ํ ์ ์ฅ๋ฐ๊ตฌ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ ์ด๋ค. ํด๋น ํ ์์๋ ๋ค์๊ณผ ๊ฐ์ด useFetchํ ์ ์ฌ์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋ ์ํ์ ์๋ฒ์์ ๋ถ๋ฌ์จ๋ค.
const { data, status, errorMessage, fetchData } = useFetch<CartItemType[]>(FETCH_URL.cartItems);
๋ชจ๋ ์ค์ํ์ง๋ง UI์ ํ์ํ ์ํ๋ ๋ฐ๋ก status์ด๋ค. status ์ํ์ ๋ฐ๋ผ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์๋ ์๋ก ๋ค๋ฅธ UI๋ฅผ ๋ ๋๋ง์ ํด์ผ ํ๋ค. ๋ง์ง๋ง์ผ๋ก ์ค์ useCartItemsํ ์ ์ฌ์ฉํ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ดํด๋ณด์.
function CartList() {
// ...
const { cartItems, status, errorMessage, updateCartItems } = useCartItems();
if(status === "rejected") {
// ์๋ฒ์์ ํต์ ์ด ์คํจํ์ ๊ฒฝ์ฐ
}
if(status === "pending") {
// ์๋ฒ์ ํต์ ์ค์ผ ๊ฒฝ์ฐ
}
// ์๋ฒ์ ํต์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง๋ฌด๋ฆฌ ํ์ ๊ฒฝ์ฐ
}
์์ ๊ฐ์ด ๋๋์ด ๊ฐ๊ฐ ๋ค๋ฅธ UI๋ฅผ ๋ ๋๋ง์ ํ ์ ์๋ค.
๊ฒฐ๊ตญ ์๋ฒ ํต์ ์ ํ๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ํ์ ๋ฐ๋ฅธ UI๋ฅผ ๋ง๋ค์ด ๋ ๋๋ง์ ํ์ง๋ง ์ฌ๊ธฐ์ ํ ๊ฐ์ง ๋ ์๊ฐํด๋ณผ ์ ์ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌ๋ฅผ ํ๋ค๋ ๊ฒ์ด๋ค.
1. useFetch: ์๋ฒ์ ์ง์ ํต์ ์ ํ๋ ์ญํ
2. useCartItems: ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ฐ๊ฒฐํด ์ฃผ๋ ์ค๊ฐ ์ญํ (GET ๋ฟ ์๋๋ผ ์์ , ์ญ์ ์ ๊ดํ ๋ก์ง์ด ์์ ์ ์๋ค.)
3. CartList(๋ฆฌ์กํธ ์ปดํฌ๋ํธ): ํต์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก UI๋ฅผ ๋ ๋๋ง ํ๋ ์ญํ
์์ฌ์ด ์ ์ ํ์ ์ ์กฐ๊ธ ๋ ๋นก๋นกํ๊ฒ ์ก์ง ์์๋ค๋ ๊ฒ์ด๋ค. ์์ CartList๋ฅผ ๋ณด๋ฉด cartItems์ status๊ฐ fulfilled์ผ ๋๋ง ์กด์ฌํ๋ค. ๋๋ฌธ์ ๋ชจ๋ ์กฐ๊ฑด๋ฌธ์ ํต๊ณผํ๋ค๋ฉด cartItems๋ ๋ฌด์กฐ๊ฑด ์๋ ๊ฒ์ด ๋น์ฐํ๋ค. ํ์ง๋ง ํ์ ์์์ null์ผ ์ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ ์๋์ง ๊ฒ์ฌ๋ฅผ ํด์ผ ํ๋ค. ์ด๋ฌํ ์ ์ ํด๊ฒฐํ์ผ๋ฉด ๋ ์ข์์ ๊ฒ์ด๋ค.
๐จ๐ป PR Reveiw
2๋จ๊ณ ๋ฏธ์ ์ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ๋ถ์ด๊ธฐ ์ MSW๋ฅผ ์ด์ฉํ์ฌ ๋ชจํน ํ๋ ๊ฒ์ด ํฐ ํฌ์ธํธ์๋ค. ๋๋ฌธ์ ํฌ๋ก ์๊ฒ ๋น๋๊ธฐ ํผ๋๋ฐฑ์ ๋ง์ด ๋ฐ์๋ค. ํผ๋๋ฐฑ์ ํตํด ๋ด๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ์ ์์ด ์ข์๋ค.
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ ์ฐํ๊ฒ ํ๊ธฐ
์๋ฒ์ ํต์ ์ ํ๊ฒ ๋๋ค๋ฉด ์๋์น ์๋ ์๋ฒ ์ค๋ฅ, ํด๋ผ์ด์ธํธ ์ค๋ฅ๋ก ์ธํด ์ํ๋ ๋์์ ํ์ง ์์ ๋๊ฐ ์๋ค. ์ด๋ ๋ค์ํ ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก ์ํต์ ํ๋๋ฐ ๊ทธ์ค ๊ฐ์ฅ ์ ๋ช ํ ์ํ์ฝ๋๋ ๋ฐ๋ก 404์ผ ๊ฒ์ด๋ค.
๋๋ฌธ์ ์๋ต ์ํ๊ฐ 404์ผ ๋, ๋ค์๊ณผ ๊ฐ์ด ์๋ฌ๋ฅผ ๋ฐ์์ํค๋๋ก ํ์๋ค.
if(res.status === 404) throw new Error("Not Found")
ํ์ง๋ง ์ด์ธ์ ์๋ต ์ํ์ ๋ฐ๋ฅธ ์์ธ ์ฒ๋ฆฌ๋ ํ์ง ์์๋ค. ๊ณผ์ฐ ์๋น์ค์์ 404 ์ด์ธ์ ์ํ์ฝ๋๋ ๋ฐ์ง ์์๊น? ๊ทธ๋ ์ง ์๋ค. ๋๋ฌธ์ ๋ฆฌํฉํฐ๋ง์ ํตํด ๋ค์ํ ์ํ ์ฝ๋์ ๋ฐ๋ฅธ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ค์ํ์๋ค.
์ด๋ฅผ ์ํด, ์ด๋ค ์ํ ์ฝ๋๊ฐ ์๊ณ ์ธ์ ๋ฐ์ํ๋์ง๋ฅผ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์๋ณด์๋ค. MDN์ HTTP ์ํ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์๋ค.
ํด๋ผ์ด์ธํธ ์๋ฌ ์๋ต
400๋ฒ๋ ์ํ์ฝ๋๋ ํด๋ผ์ด์ธํธ ์๋ฌ ์๋ต์ด๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์์ ์๋ชป๋ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์ด๋ค. ๋ค์์ ๊ธฐ์กด ์ํ์ฝ๋์ ๋๋ถ์ด ๋ฆฌํฉํฐ๋ง์ ์ถ๊ฐํ ์ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 400: Bad Request, ์๋ชป๋ ๋ฌธ๋ฒ์ผ๋ก ์ธํ์ฌ ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ ์ ์์์ ์๋ฏธ
- 401: Unauthorized, ๋น์ธ์ฆ์ ์๋ฏธ, ํด๋ผ์ด์ธํธ๋ ์์ฒญํ ์๋ต์ ๋ฐ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ค์ค๋ก ์ธ์ฆ์ ํด์ผ ํจ
- 403: Forbidden, ํด๋ผ์ด์ธํธ๋ ์ฝํ ์ธ ์ ์ ๊ทผํ ๊ถ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์์ ์๋ฏธ, 401๊ณผ ๋ค๋ฅธ ์ ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ์๊ณ ์์
- 404: Not Found, ์์ฒญ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์์ ์๋ฏธ, ๋ธ๋ผ์ฐ์ ์์๋ ์๋ ค์ง์ง ์์ URL๋ฅผ ์๋ฏธ
์๋ฒ ์๋ฌ ์๋ต
500๋ฒ๋ ์ํ์ฝ๋๋ ์๋ฒ ์๋ฌ ์๋ต์ด๋ค. ์ฆ, ์๋ฒ์์ ๋ฌด์ธ๊ฐ๊ฐ ์๋ชป๋์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ด๋ฒ ๋ฆฌํฉํฐ๋ง์ ํตํด 500๋ฒ ์ํ์ฝ๋๋ฅผ ์ถ๊ฐํ์๋๋ฐ 500๋ฒ ์ํ์ฝ๋(Internal Server Error)์ ์๋ฏธ๋ "์๋ฒ๊ฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ ์ํฉ"์ ๋ปํ๋ค. ์ฆ, ์ฒ๋ฆฌํ ์ ์๋ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ์๋ฏธ์ด๋ค.
๊ทธ ์ธ์ ์ฐธ๊ณ ํ ๋งํ ์๋ฒ ์๋ฌ ์๋ต ์ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 501: Not Implemented, ์์ฒญ ๋ฐฉ๋ฒ์ ์๋ฒ์์ ์ง์๋์ง ์์ผ๋ฏ๋ก ์ฒ๋ฆฌํ ์ ์์์ ์๋ฏธํ๋ค.
- 503: Service Unavailable, ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ค๋น๊ฐ ๋์ง ์์์์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ธ ์์ธ์ ์ ์ง๋ณด์๋ฅผ ์ํด ์๋์ด ์ค๋จ๋๊ฑฐ๋ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ ธ์ ๋์ด๋ค.
๊ณผ์ฐ ๋ชจ๋ ์ํ ์ฝ๋์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋๊ฐ?
MDN HTTP ์ํ ์ฝ๋ ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด 404๋ฒ ์ํ ์ฝ๋์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ช ์ด ์ ํ์๋ค.
์๋ฒ๋ค์ ์ธ์ฆ๋ฐ์ง ์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ์ด ์๋ต์ 403 ๋์ ์ ์ ์กํ ์๋ ์์ต๋๋ค.
์ด๋ ๋ฌด์์ ๋ปํ ๊น? ์ํ ์ฝ๋์ ์ํ๋ฉด ๋ก๊ทธ์ธ์ ํ์ง ์๋ ์ฌ์ฉ์์๊ฒ 401๋ฒ ์ํ ์ฝ๋์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ธ๊ฐ๋์ง ์๋ ์ฌ์ฉ์์๊ฒ 403๋ฒ ์ํ ์ฝ๋์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ๋ง๋ค. ํ์ง๋ง ๋ฌด์กฐ๊ฑด์ ์ธ ์น์ ํ UI ๋ณด๋ค๋ ์๋น์ค์ ๋ง๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์ข๋ค. ์ฆ, ์ ๋นํ ๊ฐ๋ฆด ๊ฑด ๊ฐ๋ ค์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค์ผ ํ๋ค. ๊นํ๋ธ๋ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์๊ฒ 404 ์ํ ์ฝ๋๋ฅผ ๋ณด์ฌ์ค๋ค.
HTTP ๋ฉ์๋ ๋ ์ดํด๋ณด๊ธฐ
๋ฆฌ๋ทฐ๋ฅผ ํตํด ์์ง HTTP ๋ฉ์๋์ ๋ํ ์ง์์ด ๋ถ์กฑํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ํฌ๋ก ์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ฌ๋ฌ ์ง๋ฌธ์ ํด์ฃผ์ จ๊ณ ์ด๋ฅผ ์ฐพ์๋ณด๋ฉฐ ๋๊ธ์ ๋จ๊ฒผ๋ค. ํ์ง๋ง ์ฌ๋ฌ ๊ณณ์ ๋ถ์ฐ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ ๋ฆฌํด ๋ณผ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
์๋ฒ์ ํต์ ํ๊ธฐ ์ํด์ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ฌผ๋ก HTTP ๋ฉ์๋์ ๋ ๋น ์ญํ ๋ฐฑ์๋ ํ์๋ค๊ณผ ํจ๊ป ์ด์ผ๊ธฐํ๋ฉฐ ๋ช ์ธ์๋ฅผ ๋ง๋ค๊ฒ ์ง๋ง ๊ทธ๋๋ ์ํํ ์ํต์ ์ํด์ HTTP ๋ฉ์๋์ ๋ฌด์์ด ์์ผ๋ฉฐ ์ด๋ค ํน์ง์ ๊ฐ์ง๊ณ ์๋์ง ์๊ณ ์์ด์ผ ํ๋ค. ๋ค์์ ์ด๋ฒ ๋ฏธ์ ์ ์งํํ๋ฉด์ ํ์ตํ HTTP ๋ฉ์๋์ ๊ดํ ๋ด์ฉ์ด๋ค. MDN๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๋ค.
๋ฉฑ๋ฑ์ฑ
๋ฉฑ๋ฑ์ฑ์ HTTP ๋ฉ์๋๋ฅผ ์ดํด๋ณด๊ธฐ ์ , ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๊ฐ๋ ์ด๋ผ๊ณ ํ ์ ์๋ค. MDN์์ ์ค๋ช ํ๋ ๋ฉฑ๋ฑ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋์ผํ ์์ฒญ์ ํ ๋ฒ ๋ณด๋ด๋ ๊ฒ๊ณผ ์ฌ๋ฌ ๋ฒ ์ฐ์์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ์ ํจ๊ณผ๋ฅผ ์ง๋๊ณ , ์๋ฒ์ ์ํ๋ ๋์ผํ๊ฒ ๋จ์ ๋, ํด๋น HTTP ๋ฉ์๋๊ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ก๋ค๊ณ ๋งํ๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ์ ํ๋ค๋ฉด ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง HTTP ๋ฉ์๋๋ GET, PUT, DELETE๊ฐ ์๊ณ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ HTTP ๋ฉ์๋๋ POST์ด๋ค.
๋ฉฑ๋ฑ์ฑ์ ๋ฐ์ง ๋ ์ค์ ์๋ฒ์ ๋ฐฑ์๋ ์ํ๋ง ๋ณด๋ฉด ๋๋ค. ์ฆ, ์๋ต ์ฝ๋๋ ๋ค๋ฅผ ์ ์๋ค. DELETE ๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด ์ดํด๊ฐ ๋๋ค.
์ฒ์ ์ด๋ค ๊ฒ์๊ธ์ ์ญ์ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. DELETE ๋ฉ์๋๋ฅผ ํตํด ๊ฒ์๊ธ์ ์ญ์ ํ๋ฉด ํด๋น ๊ฒ์๊ธ์ DB์์ ์ญ์ ๋๋ค. ๊ทธ ์ดํ ๋ค์ ๋๊ฐ์ DELETE ๋ฉ์๋๋ฅผ ์์ฒญํ๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ง์ธ ์ ์๋ ๊ฒ์๊ธ์ ์๊ธฐ ๋๋ฌธ์ DB๋ ๋ณํ์ง ์๋๋ค. ํ์ง๋ง ์ํ์ฝ๋๋ ์ด์ ๊ณผ ๋ค๋ฅด๊ฒ ์๋ชป๋ ์์ฒญ์ ํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ ์๋ฌ ์๋ต์ ๋ํ ์ฝ๋์ผ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ง์ฝ DELETE ๋ฉ์๋๋ฅผ ์์ฒญํ ๋๋ง๋ค ๊ฒ์๊ธ์ด ๊ณ์ ์ง์์ง๊ฒ ๋๋ค๋ฉด ์ด๋ ๋ฉฑ๋ฑ์ฑ์ ์๋ฐฐํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๊ตฌํ์ด๋ผ๊ณ ํ ์ ์๋ค.
GET
HTTP GET ๋ฉ์๋๋ ํน์ ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์์ฒญํ๋ค. GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ง ์ฌ์ฉํด์ผ ํ๊ณ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ์ฆ, ์ฌ๋ฌ ๋ฒ ํธ์ถํด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ ์๋ต์ ๋์ผํ๋ค.
POST
HTTP POST ๋ฉ์๋๋ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์ ์ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ๋ง๋ ๋ค. ์๋ฅผ ๋ค์ด ๊ฒ์๊ธ์ ์๋กญ๊ฒ ๋ง๋ค ๋, POST ๋ฉ์๋๋ฅผ ํตํด ๊ฒ์๊ธ์ ๋ฐ์ดํฐ๋ฅผ ํค๋์ Content-Type์ ํฌํจ์์ผ ๋ณด๋ด๊ฒ ๋๋ค. ๋งค๋ฒ ์์ฒญํ ๋๋ง๋ค ์๋ก์ด ๊ฒ์ค๊ธ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ POST ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
PUT
HTTP PUT ๋ฉ์๋๋ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋, ๋์ ๋ฆฌ์์ค๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ๋ฅผ ๋์ฒดํ๋ค. ์ฆ, ๋ ๊ฐ์ง์ ๊ธฐ๋ฅ์ ์ํํ๋ค๊ณ ๋ณผ ์ ์๋ค.
1. ๋์ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ: ์๋กญ๊ฒ ํ๋๋ฅผ ์์ฑํ๋ค. ์ด๋, ํด๋ผ์ด์ธํธ์ 201 ์๋ต์ ๋ณด๋ด์ผ ํ๋ค.
2. ๋์ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ: ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ ํ๋ค. ์ด๋, 200 ๋๋ 204 ์๋ต์ ๋ณด๋ด์ผ ํ๋ค.
PUT ๋ฉ์๋๋ POST ๋ฉ์๋์ฒ๋ผ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋์ง๋ง ๋ฉฑ๋ฑ์ฑ์์๋ ์ฐจ์ด๊ฐ ์๋ค. POST ๋ฉ์๋๋ ๊ณ์ ์ฌ๋ฌ ๋ฒ ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ฌ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์์ง๋ง PUT ๋ฉ์๋๋ ์ด๋ฏธ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด, ์ฌ๋ฌ ๋ฒ์ ์ฐ์์ผ๋ก ๋ณด๋ด์ด๋ ๋ฆฌ๋ก์ค๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค.
์ฃผ์ํ ์ ์ ์ด๋ฏธ ๋์ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ชจ๋ ์์์ ๋ณด๋ด์ง ์์ ๊ฒฝ์ฐ ํด๋น ๋ฆฌ์์ค๋ ์ด๊ธฐ๊ฐ ๋๋ Null์ด ๋๋ค. ๋๋ฌธ์ PUT ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋, ๋ฆฌ์์ค์ ๋ํ ๋ชจ๋ ์์์ ๋๊ฒจ์ผ ํ๋ค. ์ด๋ ๋ค์์ผ๋ก ์ดํด๋ณผ PATCH ๋ฉ์๋์ ๋ค๋ฅธ ์ ์ด๋ค.
PATCH
HTTP PATCH ๋ฉ์๋๋ ๋ฆฌ์์ค์ ๋ถ๋ถ์ ์ธ ์์ ์ ํ ๋์ ์ฌ์ฉ๋๋ค. ์ด๋ HTTP PUT ๋ฉ์๋์ ๋ค๋ฅธ ์ ์ด๋ค. ์ฆ, ํ์ํ ๋ชจ๋ ์์์ ๋๊ธธ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค(์์ ์ ํด์ผ ํ๋ ์์๋ง ๋๊ธฐ๋ฉด ๋๋ค.)
์ด๋ฐ PATCH ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง ์๋ ๊ทธ๋ ์ง ์์ ์๋ ์๋ค. ๋ ๊ฐ์ ์์๋ฅผ ํตํด ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง ๋์ ๊ทธ๋ ์ง ์์ ๋๋ฅผ ๋น๊ตํด ๋ณด์. ๊น์ํ๋์ ์ด๋ค ๊ฐ์์ ๋๊ธ์ ์ฐธ๊ณ ํ์๋ค.
1. ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง ๋: {name: "kim"} ์ฌ๋ฌ ๋ฒ ์์ฒญ์ ํด๋ ๊ฐ์ ๊ฒฐ๊ณผ์ด๋ค.
2. ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์์ ๋: {"operantion": "add", "age": 10} ์์ฒญ์ ํ ๋๋ง๋ค age๊ฐ ๊ณ์ 10์ฉ ์ฆ๊ฐํ๋ค.
DELETE
HTTP DELETE ๋ฉ์๋๋ ์ง์ ํ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ค. ์ด๋ ์์์ ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ฉฐ ๋ง์ฝ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋๋ค๋ฉด ์ด๋ ์๋ชป ์ค๊ณํ๋ค๊ณ ํ ์ ์๋ค.
DELETE ๋ฉ์๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉํ ํ์ ์ฌ์ฉํ ์ ์๋ ์๋ต ์ํ ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๊ฐ์ง๊ฐ ์๋ค.
1. 202: ๋ช ๋ น์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ ๊ฒ ๊ฐ์ผ๋ ์์ง ์คํํ์ง ์๋ ๊ฒฝ์ฐ
2. 204: ๋ช ๋ น์ ์ํํ๊ณ ๋ ์ด์ ์ ๊ณตํ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ
3. 200: ๋ช ๋ น์ ์ํํ๊ณ ์๋ต ๋ฉ์์ง๊ฐ ์ดํ์ ์ํ๋ฅผ ์ค๋ช ํ๋ ๊ฒฝ์ฐ
๐ ์ํ ์
1. ๋น๋๊ธฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ฐ์ํ ์ ์๋ 3๊ฐ์ง ์ํ์ ๋ฐ๋ฅธ UI๋ฅผ ๋ง๋ค์๋ค.
2. MSW๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์ํฉ์ ๋ํด ๋์ํ๊ณ ์ ๋ ธ๋ ฅํ๋ค.
๐ ์์ฌ์ด ์
1. ์๊ฐ์ด ๋ถ์กฑํ์ฌ ๋น๋๊ธฐ ํผ๋๋ฐฑ ์ธ์ ๊ฒ์ ๋ํด ๊น๊ฒ ์ดํด๋ณด์ง ๋ชปํ๋ค.
2. ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ํ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ์์ง ๋ฌ๊ตฌ๋ฆ์ผ๋ก ๋๊ปด์ง๋ค.
๐ ์์ผ๋ก์ ๋ค์ง
1. ๋ชจ๋ฅด๋ ๊ฑด ์๊ด์์ง๋ง ๋ชจ๋ฅด์ง๋ง ์๋ค๊ณ ํ์ง ๋ง ๊ฒ
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ ํ์ - Step2 (0) | 2023.06.22 |
---|---|
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ ํ์ - Step1 (0) | 2023.06.20 |
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step1 (0) | 2023.05.27 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step3 (0) | 2023.05.15 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step2 (1) | 2023.05.09 |