์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Frontend
- react
- ์ฃผ์์ฐฝํด์
- dart
- ํ์ด์ฌ
- TypeScript
- HTML
- ์ฝํ
- ContextAPI
- VanilaJS
- react native
- CSS
- ์คํฌ๋กค๊ตฌํ
- Python
- Redux
- router
- JavaScript
- ๋ฐฑ์ค
- nextjs
- Today
- Total
JiSoo's Devlog
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 7์ฅ ๋ณธ๋ฌธ
๐ API ์์ฒญ
fetch๋ก API ์์ฒญํ๊ธฐ
useEffect(() => {
fetch ("https://api.baemin.corn/cart")
.then((response) => response.json())
.then(({ cartltem }) => {
setCartCount(cartitem.length);
})๏ผ
}, [])๏ผ
์ ์ฝ๋์ฒ๋ผ ๊ตฌํํ ์ํ์์ ์๋ก์ด API ์์ฒญ ์ ์ฑ ์ด ์ถ๊ฐ๋๋ฉด ๊ณ์ํด์ ๋น๋๊ธฐ ํธ์ถ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ๋ค.
์๋น์ค ๋ ์ด์ด๋ก ๋ถ๋ฆฌํ๊ธฐ
์ฌ๋ฌ API ์์ฒญ ์ ์ฑ ์ด ์ถ๊ฐ๋์ด ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ฉด ๋น๋๊ธฐ ํธ์ถ ์ฝ๋๋ ์ปดํฌ๋ํธ ์์ญ์์ ๋ถ๋ฆฌ๋์ด ๋ค๋ฅธ ์์ญ(์๋น์ค ๋ ์ด์ด)์์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค.
์ ์ฝ๋ ๊ธฐ์ค fetch ํจ์ ํธ์ถ ๋ถ๋ถ์ ์๋น์ค ๋ ์ด์ด๋ก ์ด๋ํ๊ณ ์ปดํฌ๋ํธ๋ ์๋น์ค ๋ ์ด์ด์ ๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ๋ ๋๋ง ํ๋ ํ๋ฆ์ด ๋๋ค.
ํ์ง๋ง ๋จ์ํ ํจ์๋ฅผ ๋ถ๋ฆฌํ๋ค๊ณ ํด์ API ์์ฒญ ์ ์ฑ ์ด ์ถ๊ฐ๋๋ ๊ฒ์ ํด๊ฒฐํ๊ธฐ๋ ์ด๋ ต๋ค.
Axios ํ์ฉํ๊ธฐ
fetch๋ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ ๋ฐ๋ก ์ํฌํธ๋ ์ค์นํ ํ์๊ฐ ์์ง๋ง ๋ง์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ง์ ๊ตฌํํด์ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๋ฐ ๋ฒ๊ฑฐ๋ก์ ๋๋ฌธ์ Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
const apiRequester๏ผ Axioslnstance = axios.create (defaultConfig);
const orderApiRequester๏ผ Axioslnstance = axios.create({
baseURL๏ผ "https๏ผ//api.baemin.or/’,
...defaultConfig,
});
const orderCartApiRequester๏ผ Axioslnstance = axios.create({
baseURL: "https๏ผ//cart.baemin.order/",
...defaultConfig,
});
Axios ์ธํฐ์ ํฐ ์ฌ์ฉํ๊ธฐ
์ ์ฝ๋์ฒ๋ผ ๊ฐ requester๊ฐ ์๋ก ๋ค๋ฅธ ์ญํ ์ ๋ด๋นํ๋ ์๋ฒ์ผ ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ํค๋๋ฅผ ์ค์ ํด์ค์ผ ํ๋ ๋ก์ง์ด ํ์ํ ์๋ ์๋ค.
์ธํฐ์ ํฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํด requesterdp์ ๋ฐ๋ผ ๋น๋๊ธฐ ํธ์ถ ๋ด์ฉ์ ์ถ๊ฐํด ์ฒ๋ฆฌํ ์ ์๋ค.
๋ํ API ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ ๋ ํ๋์ ์๋ฌ ๊ฐ์ฒด๋ก ๋ฌถ์ด ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค.
apiRequester.interceptors, request .use(setRequestDefaul.tHeader);
const orderApiRequester: Axioslnstance = axios.create({
baseURL: orderApiBasellrl,
...defaultConfig,
});
์์ฒญ ์ต์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ธํฐ์ ํฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋น๋ ํจํด์ ์ถ๊ฐํด APIBuilder ๊ฐ์ ํด๋์ค ํํ๋ก ๊ตฌ์ฑํ๊ธฐ๋ ํ๋ค.
๋น๋ ํจํด
๊ฐ์ฒด ์์ฑ์ ๋ ํธ๋ฆฌํ๊ณ ๊ฐ๋ ์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋์์ธ ํจํด
์ฃผ๋ก ๋ณต์กํ ๊ฐ์ฒด์ ์์ฑ์ ๋จ์ํํ๊ณ ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ๋ถ๋ฆฌํด ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
APIBuilder ํด๋์ค๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ๋ง๋ค๋ ๋จ์ ์ด ์์ง๋ง ์ต์ ์ด ๋ค์ํ ๊ฒฝ์ฐ์ ์ธํฐ์ ํฐ๋ฅผ ์ค์ ๊ฐ์ ๋ฐ๋ผ ์ ์ฉํ๊ณ ํ์ ์๋ ์ธํฐ์ ํฐ๋ฅผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ๋ ์๋ค.
๐๐ป ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋
์ด๋ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋
API ์๋ต ํ์ ์ง์ ํ๊ธฐ
interface Response<T> {
data๏ผ T;
status: string;
serverDateTime๏ผ string;
errorCode?: string; // FAIL, ERROR
errorMessage?๏ผ string; // FAIL, ERROR
}
๊ฐ์ ์๋ฒ์์ ์ค๋ ์๋ต ํํ๋ ๋์ฒด๋ก ํต์ผ๋์ด ์์ด ํ๋์ Response ํ์ด์ผ๋ก ๋ฌถ์ผ ์ ์๋ค.
๋ทฐ ๋ชจ๋ธ ์ฌ์ฉํ๊ธฐ
API ์๋ต์ ๋ณํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
์ ํ๋ก์ ํธ๋ ์๋ฒ ์คํ์ด ์์ฃผ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋ทฐ ๋ชจ๋ธ์ ์ฌ์ฉํด API ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ฒ์๋ฅผ ํ์ ํด์ค์ผ ํ๋ค.
๋ทฐ ๋ชจ๋ธ์ ๋ง๋ค๋ฉด API ์๋ต์ด ๋ฐ๋์ด๋ UI๊ฐ ๊นจ์ง์ง ์๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
Superstruct ์ฌ์ฉํด ๋ฐํ์์์ ์๋ต ํ์ ๊ฒ์ฆ
๋ฐํ์ ์๋ต ํ์ ๊ฒ์ฆ์ ์ํด ์ฌ์ฉํ๋ Superstruct ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
- Superstruct๋ฅผ ์ฌ์ฉํด ์ธํฐํ์ด์ค ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
- Superstruct๋ ๋ฐํ์์์์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํตํด ๊ฐ๋ฐ์์ ์ฌ์ฉ์์๊ฒ ์์ธํ ๋ฐํ์ ์๋ฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๊ณ ์๋์๋ค.
import { assert, is, validate, object, number, string, array } from "superstruct";
const Article = object({
id: number(),
title: stringO,
tags: array(stringO),
author: object({
id: number(),
}),
});
const data = {
id: 34,
title: "Hello World",
tags: ["news", "features"],
author: {
id: 1,
},
};
assert(data, Article);
is(data, Article);
validate(data, Article);
Article ๋ณ์๋ Superstruct์ object() ๋ชจ๋์ ๋ฐํ ๊ฒฐ๊ณผ๋ค.
Article์ id๋ ์ซ์, title์ ๋ฌธ์์ด ๋ฑ ์ด๋ฐ ์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด ํํ์ object์ด๋ค.
assert: ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์๋ฌ ๋์ง๋ค.
is: ์ ํจ์ฑ ๊ฒ์ฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ true๋ false๊ฐ ๋ฐํ
validate: [error, data] ํ์์ ํํ ๋ฐํ, ์ ํจํ์ง ์์ ๋๋ ์๋ฌ ๊ฐ ๋ฐํ, ์ ํจํ๋ฉด ์ฒซ ๋ฒ์งธ ์์๋ก undefined, ๋ ๋ฒ์งธ ์์๋ก data value ๋ฐํ
๐ API ์ํ ๊ด๋ฆฌํ๊ธฐ
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธ์ถํ๊ธฐ
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๋๊ธฐ ํจ์๋ค์ ์๋น์ค ์ฝ๋๋ฅผ ์ฌ์ฉํด ๋น๋๊ธฐ ์ํ๋ฅผ ๋ณํ์ํฌ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
์ปดํฌ๋ํธ๋ ์ด๋ฐ ํจ์๋ฅผ ์ฌ์ฉํด ์ํ๋ฅผ ๊ตฌ๋ ํ๋ฉฐ ์ํ๊ฐ ๋ฐ๋ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
Redux๋ ๋น๋๊ธฐ ์ํ๊ฐ ์๋ ์ ์ญ ์ํ๋ฅผ ์ํด ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ ๋ฏธ๋ค์จ์ด๋ก ๋ถ๋ฆฌ๋ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ๋์ ํด ๋น๋๊ธฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
๊ทธ๋์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ๋ง์์ง๋ ๋ฑ ๊ฐํธํ๊ฒ ๋น๋๊ธฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.
MobX ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ด๋ฐ ๋ถํธํจ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ถ๋ฆฌํด ์ก์ ์ผ๋ก ๋ง๋ค๊ฑฐ๋ runInAction ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ํ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ๋ค.
ํ ์ผ๋ก ํธ์ถํ๊ธฐ
ํ ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ์ํ ๋ณ๊ฒฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๋ค.
ํ ์ ์บ์๋ฅผ ์ฌ์ฉํด ๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ์ํ ์๋์น ์์ ์ํ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ค.
๐ซ API ์๋ฌ ํธ๋ค๋ง
ํ์ ๊ฐ๋ ํ์ฉํ๊ธฐ
Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ Axios ์๋ฌ์ ๋ํ isAxiosError ํ์ ๊ฐ๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
interface ErrorResponse {
status: string;
serverDateTime: string;
errorCode: string;
errorMessage: string;
}
*์ฌ์ฉ์ ์ ์ ํ์ ๊ฐ๋ ์์ฑ ์ ํ์ ๊ฐ๋ ํจ์์ ๋ฐํ ํ์ ์ผ๋ก parameterName is Type ํํ์ ํ์ ๋ช ์ ๋ฅผ ์ ์ํด ์ฃผ๋ ๊ฒ ์ข๋ค.
์๋ฌ ์๋ธํด๋์ฑํ๊ธฐ
์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ๋จ์ ์๋ฒ ์๋ฌ๋ง์ด ์๋๋ผ ์ธ์ฆ ์ ๋ณด ์๋ฌ, ๋คํธ์ํฌ ์๋ฌ ๋ฑ ๋ค์ํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ๋ช ์์ ์ผ๋ก ํ์ํ๊ธฐ ์ํด ์๋ธํด๋์ฑ์ ํ์ฉํ ์ ์๋ค.
๐๐ป ์๋ธํด๋์ฑ
๊ธฐ์กด ํด๋์ค๋ฅผ ํ์ฅํด ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋๋ ๊ณผ์
์๋ธํด๋์ฑ์ ํ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ฝ๋์ฌ์์ ์ด๋ค ์๋ฌ์ธ์ง ๋ฐ๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.
๋ํ ์๋ฌ ์ธ์คํด์ค๊ฐ ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ค๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ค.
์ธํฐ์ ํฐ๋ฅผ ํ์ฉํ ์๋ฌ ์ฒ๋ฆฌ
Axios ๊ฐ์ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธํฐ์ ํฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๊ฑธ ์ฌ์ฉํ๋ฉด HTTP ์๋ฌ์ ์ผ๊ด๋ ๋ก์ง์ ์ ์ฉํ ์ ์๋ค.
์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํ์ฉํ ์๋ฌ ์ฒ๋ฆฌ
์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ ์๋ฌ ๋ฐ์ํ ๋ ๊ณตํต์ผ๋ก ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ค.
์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ํธ๋ฆฌ ํ์์ ์๋ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ์๋ฌ๋ฅผ ์บ์นํ๊ณ ํด๋น ์๋ฌ๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ ์๋ฌ ๋ฐ์ด๋๋ฆฌ์์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํ๋ค.
์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ปดํฌ๋ํธ ๋์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ๊ฑฐ๋ ์์์น ๋ชปํ ์๋ฌ๋ฅผ ๊ณตํต ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โ๏ธ API ๋ชจํน
๋ชจํน์ ๊ฐ์ง ๋ชจ๋์ ํ์ฉํ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฒ๊ฐ ๋ถ์์ ํ๊ฑฐ๋ AWS ๋ฑ์ ๋ฌธ์ ๋ฐ์ํ์ ๋ ์๋ฒ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ํ๋ก ํธ ๊ฐ๋ฐ์ ํ ์ ์๋ค.
JSON ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
๊ฐ๋จํ ์กฐํ๋ง ํ์ํ๋ฉด *.json ํ์ผ ๋ง๋ค๊ฑฐ๋ ํ์ผ ์์ JSON ํ์์ ์ ๋ณด๋ฅผ ์ ์ฅํด export ํด์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ณ๋๋ก ์ค์ ๋ ํ์ ์์ด์ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ ์ค์ API URL๋ก ์์ฒญํ๋ ๊ฒ ์๋๋ผ์ ์ถํ์ ์์ฒญ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ค.
NextApiHandler ํ์ฉํ๊ธฐ
ํ๋ก์ ํธ์์ Next.js ๋ฅผ ์ฌ์ฉํ๋ฉด NextApiHandler๋ฅผ ํ์ฉํ ์ ์๋ค.
NextApiHandler๋ ํ ํ์ผ ์์ ํ๋์ ํธ๋ค๋ฌ๋ฅผ ๋ํดํธ ์ต์คํฌํธ๋ก ๊ตฌํํด์ผ ํ๋ฉฐ ํ์ผ ๊ฒฝ๋ก๊ฐ ์์ฒญ ๊ฒฝ๋ก๊ฐ ๋๋ค.
์๋ตํ๊ณ ์ ํ๋ ๊ฐ ์ ์ ํ ํธ๋ค๋ฌ ์์์ ์์ฒญ์ ๋ํ ์๋ต์ ์ ์ํ๋ฉด ๋๋ค.
ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋จ์ ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ์ค๊ฐ ๊ณผ์ ์ ์๋ต ์ฒ๋ฆฌ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋ค.
import { NextApiHandler } from "next";
const BRANDS๏ผ Brand[] = [
{
id๏ผ 1,
label๏ผ "๋ฐฐ๋ฏผ์คํ ์ด’,,
},
{
id๏ผ 2,
label๏ผ ”๋น๋งํธ’,,
},
];
const handler: NextApiHandler = (req, res) => {
// request ์ ํจ์ฑ ๊ฒ์ฆ
res.json(BRANDS);
};
export default handler;
API ์์ฒญ ํธ๋ค๋ฌ์ ๋ถ๊ธฐ ์ถ๊ฐํ๊ธฐ
API ์์ฒญ์ ํ ์ด๋ ๋ณ๋ ํจ์๋ก ์ ์ธํ๊ณ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ชฉ์ ํจ์๋ฅผ ๋ด๋ณด๋ด๊ฑฐ๋ ์ค์ ์์ฒญ ํจ์๋ฅผ ๋ด๋ณด๋ผ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ์๋ ์ ์ง๋ณด์ํ ๋ ๋ชฉ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํ์ํ ๊ฒฝ์ฐ์๋ง ์ค์ API์ ์์ฒญ ๋ณด๋ด๊ณ ํ์์๋ ์๋ฒ์ ์์กดํ์ง ์๊ณ ๊ฐ๋ฐํ ์ ์๋ค.
axios-mock-adapter๋ก ๋ชจํนํ๊ธฐ
axios-mock-adapter๋ Axios ์์ฒญ์ ๊ฐ๋ก์ฑ์ ์์ฒญ์ ๋ํ ์๋ต ๊ฐ์ ๋์ ๋ฐํํ๋ค.
๋จ์ ์๋ต ๋ฐ๋๋ง ๋ชจํนํ ์ ์์ง๋ง ์ํ ์ฝ๋, ์๋ต ์ง์ฐ ์๊ฐ ๋ฑ์ ์ถ๊ฐ๋ก ์ค์ ๊ฐ๋ฅํ๋ค.
GET๋ฟ๋ง ์๋๋ผ POST, PUT ๋ฑ ๋ค๋ฅธ ์์ฒญ์ ๋ํ ๋ชฉ์ ์ ์์ฑํ ์ ์๋ค.
๋ชฉ์ ์ฌ์ฉ ์ฌ๋ถ ์ ์ดํ๊ธฐ
๋ก์ปฌ์์๋ ๋ชฉ์ ์ ์ฌ์ฉํ๊ณ dev๋ ์ด์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด ๋ชฉ์ ์ ๊ฐ๋ฐํ ๋์ ๊ฐ๋ฐํ์ง ์์ ๋๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
const useMock = Object.is(REACT_APP_MOCK, "true");
const mockFn = ({ status = 200, time = 100, use = true }๏ผ MockResult) => use &&
mock.onGet(A/orderVlist/).reply (() =>
new Promise((resolve) =>
setTimeout(() => {
resolve([
status,
status === 200 ? fetchOrderListSuccessResponse : undefined,
]);
}, time)
)
);
if (useMock) {
mockFn({ status: 200, time: 100, use: true });
}
ํ๋๊ทธ์ ๋ฐ๋ผ mockFn์ ์ ์ดํ ์ ์๋๋ฐ ๋งค๊ฐ๋ณ์๋ฅผ ๋๊ฒจ ํน์ mock ํจ์๋ง ๋์ํ๊ฒ ํ ์ ์๋ค.
axios-mock-adapter๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ API ์์ฒญ์ ์ค๊ฐ์ ๊ฐ๋ก์ฑ๋ ๊ฑฐ๋ผ ์ค์ ๋ก API ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ง ์๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋คํธ์ํฌ ํญ์์๋ ํ์ธํ๊ธฐ ์ด๋ ต๋ค.
์ด ์์ฒญ์ ํ๋ฆ์ ํ์ ํ๋ ค๋ฉด react-query-devtools๋ redux test tool ๊ฐ์ ๋ณ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋ชฉ์ ์ ์ฌ์ฉํ ๋ ๋คํธ์ํฌ ์์ฒญ์ ํ์ธํ๊ณ ์ถ์ ๋๋ ๋คํธ์ํฌ์ ๋ณด๋ธ ์์ฒญ์ ๋ณ๊ฒฝํด ์ฃผ๋ Cypress ๊ฐ์ ๋๊ตฌ์ ์นํ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
'Frontend > Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 9์ฅ (0) | 2025.06.06 |
---|---|
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 8์ฅ (8) | 2025.06.06 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 6์ฅ (1) | 2025.05.29 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 5์ฅ (4) | 2025.05.28 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 4์ฅ (2) | 2025.05.23 |