개발자
안녕하세요 저는 프론트엔드 개발자 지망생입니다. 본론부터 말하자면 왜 데이터 페칭 라이브러리중 axios를 많이 쓰는건지 모르겠습니다. 제가 원래는 fetch로 오픈api 들고오다가 axios라는 라이브러리를 선배덕분에 알게되었고, 그이후로 계속 axios만 쓰고있습니다 (주변친구들도 다 axios를 데이터페칭에 쓰고, 깃허브 돌아다니면서 염탐해봐도 다 axios를 쓰더라구요). 그러다가 왜 axios만 썼던거지? 라는 생각이 들더군요. 그래서 대체제가 없는건가 해서 찾아보니 ky나 wretch같은 fetch 기반의 라이브러리도 있던데 번들사이즈나 페칭속도부분에서 더 좋은것같았습니다. 심지어 제공하는 기능에 큰 차이가 있어 보이지도 않았구요. 이러면 xhr기반보다 성능이 좋은 fetch기반 라이브러리가 선호되는게 맞지않나요? 왜 axios가 자주 쓰이는건가요? 제가너무 단편적으로보는걸까요? 구글링해봐도 fetch와 axios를 비교할뿐 만족스러운 결과는 못찾았습니다. 진짜너무궁금합니다...
답변 6
인기 답변
잘 기억은 안나지만 제가 알기론 다음과 같은 차이가 있었습니다. 1. 크로스 브라우징 과거 자바스크립트 스펙 지원이 브라우저마다 많이 다르던 시절 모든 브라우저에서 동작하도록 만들어진 라이브러리가 axios였습니다. 2. 크로스 플랫폼 잘 기억은 안나지만 fetch는 웹브라우저 안에서만 동작하고 xhrhttprequest 기반인 axios는 여러 플랫폼에서 동작하는걸로 알고있습니다. 그럴일은 거의 없겠지만 해당 코드를 네이티브에서도 쓴다면 fetch api는 웹브라우저에서만 지원하기 때문에 동작을 안하는 걸로 알고 있습니다. (제 기억이 잘못되었을 수도 있으니 찾아봐야됩니다) 3. 보안 이것도 다시 찾아봐야겠지만 어떤 보안 처리가 들어가있었던 걸로 기억합니다. 4. 지원 기능 Xhr 기반과 fetch 기반 등 각 http 요청보내는 api마다 지원하는 기능이 약간씩 다릅니다. 예를 들면 파일 업로드시 진행률을 표시할 때 아직까지는 fetch api에선 이를 구현할 수 없었나.. 이것도 좀 돼서 기억이.. (axios interceptor 같은 라이브러리에서 지원해주는 기능도 한 몫하는거 같습니다. 개발시 편해서..) 여튼 기억이 좀 가물가물해서 위 내용들 중에 틀린 내용이 있을수도 있는데 대충 저런 이유들이었던거 같습니다.
인기 답변
<AngularJS의 등장> 현대 프론트엔드의 시조격이라 할 수 있는 AngularJS가 2010년대초에 나옵니다. 이 때 현재 우리가 알고 있는 SPA가 정립되던 시기였죠. 당시 웹개발의 http통신은 jQuery로 하는 곳이 많았습니다. 그런데 jQuery의 특성상 SPA에 녹아들기 힘들었죠. 기존의 XMLHttpRequest를 써야하거나, Angular 자체에 있던 http 모듈을 썼어야했는데 이 것도 그리 편하진 않았나봅니다. <Axios의 등장> 이 때 이제 Axios가 AngularJS나 초기 React에서 쓰기 편한 http 통신 모듈로 등장한겁니다. 기존 javascript에서도 <script> 형태로 호출해서 쓸수도 있고 Angular, React 같이 nodejs 빌드환경의 환경에서도 호출해서 쓸 수 있고 jQuery의 ajax처럼 간결해보였고 "가장 큰 것은 Promise 기반의 API 호출을 쉽게 할수 있다." 아마 이게 가장 큰 메리트였을겁니다. 지금도 비동기는 꽤나 처리가 어려운데 당시에는 정말 비동기하면 개발자들에게는 거부감부터 들던 단어였으니까요. <axios와 fetch> axios의 등장이 fetch보다 1년정도 빨랐습니다. 하지만 fetch는 웹표준으로 등장했어요. 정식으로 채택되고 브라우저에 도입되는 시기가 필요하죠. axios처럼 바로 라이브러리 호출해서 사용할 수 있지 않았습니다. 이 시기 때문에 fetch의 실질적인 사용은 몇 년 더 지나서입니다. 이러다 보니 이미 http 통신 방식은 상당수 axios가 잠식해버린 것이죠. 이후 서서히 점유율이 넘어가는 느낌이 들고 있긴 하지만 현재 많은이들이 axios를 더 많이 쓰는 이유는 다른 것 없습니다. 더 먼저, (시기적으로)더 빨리, 더 편하게 쓸 수 있어서일 뿐이고 fetch가 그 뒤에 나와서 조금씩 가져가고 있을 뿐입니다.
인기 답변
axios를 사용하지 않을 때는 fetch를 래핑해서 사용하곤 하는데요. 개발 시점에 경험이 부족하면 설계가 변경에 대응하기 어렵게 되기도 합니다. 그래서 운영 시점에 기능 변경이나 에러 리포트를 통한 대응에서 시간 비용이 증가 하거나 손을 못대는 경우도 있어요. 그래서 다양한 케이스의 기능이 있고 변경에 유연한 axios를 선택하곤 합니다!
괜찮은 대안들이 속속들이 나와도 Redux가 여전히 React의 전역 상태관리 라이브러리 점유율에서 선두이듯이(https://npmtrends.com/jotai-vs-mobx-vs-react-redux-vs-recoil-vs-zustand), 그냥 이전부터 사용해왔으니까 계속 쓰는 감이 있다고 생각합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!