๐ฆ
fetch VS axios
March 24, 2023
๐ฆ ์ก๋์ฌ๋
ํ๋์ ํค์๋๋ฅผ ์ก๊ณ ์ข ํธํ๊ฒ ์ ๋ฆฌํ๊ณ ์ถ์ด ๋ง๋ ์ก๋์ฌ๋
์ก๋์ฌ๋๋ ์กฐ์ ํ๊ธฐ ํ์
์์ ๋ณต
์ด ํธ์ฐฌํ์ก๋์ฐ์ด(้ๅๆฃ็ฐ)
์์ ์ ๋๋ ๋ง์ด๋ค.
์ก๋์ฐ์ด๋์ก๊ธฐ(้่จ)
์ ํํ๋ฅผ ๋น๋ ค์จ ์ฑ ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ์ฒด๊ณ๊ฐ ์กํ์์ง ์์ ํ์์ด๋ค.
ํญ๋ชฉ์ด ๋ค์ ๋์กํ๊ณ ๋ด์ฉ์ ๊ตฌ๋ถ์ด ํผ๋๋์ด์๋ค๊ณ ํ๋ค. ๐คฃ
๐๏ธ fetch VS axios
- ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ JS ์ง์์์ ํต์ ์ ์ํด ์ฌ์ฉ๋๋ค.
- ๋จ์ํ๊ฒ๋ fetch๊ฐ ์ข๋ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, axios๊ฐ ์ข๋ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํด๋ ์ข๋ค.
๋น๊ตํ๊ฒ ๋ ๊ณ๊ธฐ ๊ทธ๋ฆฌ๊ณ fetch์์์ ์๋ฌ ์ฒ๋ฆฌ
- ๋๋ฃ์ธ ์์ ๊ฐ ์๋์ ์ฝ๋์์ ์ ๊ตณ์ด
try...catch...
๋ฅผ ์ฐ๊ณ ๋์ ๋ ๊ทธ ์์์ res.ok๋ก ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ๋๊ฑด์ง ๊ถ๊ธํดํ์๋ค.
try {
fetch('https://example.com/api/data')
.then((res) => {
if (!res.ok) {
throw new Error(`${res.status} ${res.statusText}`);
}
return res.json();
})
.then((data) => console.log(data));
} catch (error) {
console.log(`์๋ฌ ๋ฐ์: ${error}`);
}
- ์ผํ ๋ณด๋ฉด
if (!res.ok)
๊ฐ ๊ตณ์ด ์์ด์ผํ๋ ์ถ์๋ค. ์ด์ฐจํผtry...catch
๋ก ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ ํ ๋ฐ ๊ตณ์ด ๋ ์กฐ๊ฑด๋ฌธ์ ์จ์ค ํ์๊ฐ ์์๊น? ํ๋ ์๊ฐ. - ์ ์๊ฐํด๋ณด๋ฉด
200๋ฒ๋๋ ํต์ ์ด ์ฑ๊ณตํ ๊ฒ
์ด๋ผ๋ ๊ฑด HTTP๋ฅผ ํตํด ์ฐ๋ฆฌ๋ผ๋ฆฌ ์ฝ์ํ ๊ฒ์ด๋ค. ์ฆ, 300๋ฒ์ด๋ 400๋ฒ์ด๋ ํจ์ ์ ์ฅ์์๋ ์๋ฌดํผ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์์ผ๋ Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. ์ฆ,์๋ฌ
๊ฐ ์๋ ๊ฒ์ด๋ค. - ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก
res.ok
๊ฐfalse
์ผ ๋(200๋ฒ๋๊ฐ ์๋ ๋), ์ผ๋ถ๋ฌ error๋ฅผ throwํด์try...catch
๊ฐ ์ก์๋ผ ์ ์๋๋ก ํด์ค์ผํ๋ ๊ฒ์ด๋ค.
fetch์ axios์ ์ฐจ์ด์
- fetch api๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ JavaScript api์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋งํ๋ฉด ๊ทธ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ฉด axios๋ third-party ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ณ๋์ ์ค์น๊ฐ ํ์ํ๋ค.
- ์์ ์ฝ๋์์ fetch๋ ๋ฐ๋ก
res.ok
๋ฅผ ํตํด ์๋ฌ๋ฅผ ํธ๋ค๋งํด์ผํ๋ ๋ฐ๋ฉด, axios๋ ๊ทธ ์์ฒด์ ์ผ๋กcatch()
๋ผ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ์ข๋ ๊ฐํธํ๊ฒ ์๋ฌ๋ฅผ ํธ๋ค๋งํ ์ ์๋ค. - axios๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์์ฒญ ์๊ณผ ๋ค์ ํธ์ถ๋๋ ํจ์์ธ
request interceptor
์response interceptor
๋ฅผ ์ ์ํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์์ฒญ์ ํค๋, ํ์ด๋ก๋ ์์ ๋ฑ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. - axios๋ ํ์ฌ ์งํ ์ค์ธ ์์ฒญ์ ์ทจ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋๋ฐ ์ ์ฉํ๋ค.
๊ฒฐ๊ตญ์ server์์ ํต์ ์ ํ ๋, fetch
๋ฅผ ์ฐ๋๋ axios
๋ฅผ ์ฐ๋๋๋ ๋ณธ์ธ์ ํ๋ก์ ํธ๊ฐ ์งํฅํ๋ ๋ถ๋ถ ๊ทธ๋ฆฌ๊ณ ๋ณธ์ธ์ ์ ํธ๋์ ๋ฐ๋ผ ์ ํํ๋ฉด ๋๋ค.