2025. 8. 11. 20:17ใReact
ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํ๋ ํ์คํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ธฐ์ด ํ์ต์ ํ๊ณ ์์ต๋๋ค.
์ด์ ๊น์ง๋ UI ๊ตฌํ์๋ง ์ง์คํ๊ณ ์ด์ ๋ฐฑ์๋์์ ์ฐ๋ ์์ ์ ์์ํ๋ ค๊ณ ํฉ๋๋ค.
HTTP ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํด Fetch์ Axios ์ค ๋์ ํน์ง์ ๋น๊ตํ ๊ฒฐ๊ณผ Axios๋ฅผ ํตํด ๊ฐ๋ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
Axios๋ฅผ ์ ํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ์๋ ์ง๋ ฌํ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ
- JSON ๋ฐ์ดํฐ ์๋ ๋ณํ ๋ฐ ์๋ ์๋ฌ ์ฒ๋ฆฌ๋ก ์ฝ๋ ๊ธธ์ด๋ฅผ ๋จ์ถํ ์ ์์ต๋๋ค.
2. ๋ค์ํ ๊ธฐ๋ฅ ์ง์
- ์์ฒญ ํ์์์ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์์ฒญ/์๋ต ์ธํฐ์ ํฐ๋ฅผ ํตํด ์์ฒญ ์ ํ๋ก ์์ ์ฒ๋ฆฌ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
3. ํ์ต ๋จ๊ณ์ ์ ํฉ
- ์ค์น๋ง ํ๋ค๋ฉด ๋ณต์กํ ์ค์ ์์ด๋ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๋ฏธ ๊ตฌํ๋ ์๋ํ ๊ธฐ๋ฅ์ ํตํด ์ค์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
Fetch vs Axios ์์ธ ๋น๊ต
์์ธํ ๋น๊ต๋ ์๋ ํฌ์คํ ์์ ํ์ธํ ์ ์์ต๋๋ค.
[๋ฆฌ์กํธ] fetch์ axios ์ฐจ์ด
Fetch๋?Fetch API๋ ๋คํธ์ํฌ ์์ฒญ์ ์ํด fetch()๋ผ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ๋ธ๋ผ์ฐ์ ๋ด์ฅ ์ธํฐํ์ด์ค์ ๋๋ค. ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋ด์ฅ๋์ด ์์ด ๋ณ๋์ ์ค์น๊ฐ ํ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์์ ์ ์ฝ๊ฒ
clvl1022.tistory.com
Get ์์ฒญ ๋ณด๋ด๊ธฐ
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, ๋ฐฑ์๋์์ ์ง๋ฃ๊ณผ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ API๋ฅผ ํธ์ถํ์ฌ ํ๋ฉด์ ํ์ํ๋ ๊ฒ์ด ๋ชฉํ์์ต๋๋ค.

- ๋ฐ์ดํฐ๋ ํ์ด์ง๊ฐ ํ์๋๋ ๋์ ์ ์ง๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ useEffect๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ ์์คํ ๊ณผ ๋๊ธฐํ๋๋๋ก ํ์์ต๋๋ค.
- API ์๋ต์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ state์ ์ ์ฅํ์ฌ, ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋๋ผ๋ ๋ณ๋์ ์ถ๊ฐ ์์ ์์ด ๋์ ์ผ๋ก UI์ ๋ฐ์๋๋๋ก ๊ตฌํํ์์ต๋๋ค.
function getDepartments() {
const [departments, setDepartments] = useState([]);
const token = "ํ ํฐ ๊ฐ"
useEffect(() => {
//์์ฒญ ๋ณด๋ด๋ ๋ถ๋ถ
axios.get(
"http://localhost:8080/api/clinics/departments", {
headers: {
"Authorization": `Bearer ${token}`,
}
}
)
.then((res) =>
setDepartments(res.data.departments) //์๋ต ๋ฐ์ดํฐ๋ฅผ departments์ ์ ์ฅ
)
.catch(err => console.log(err));
}, []);
return departments;
}
โ ๏ธ axios.get(, [ ]) [ ]๋ฅผ ๋ฃ๋ ์ด์
[ ]๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ํ๋ฉด์ ํ์๋๋ ๊ฒฝ์ฐ์๋ง ์คํํ๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค.
[ ]๋ฅผ ๋ฃ์ง ์์ผ๋ฉด axios ์์ฒญ์ด ๋ ๋๋ง ๋ ๋๋ง๋ค ์คํ๋์ด ์ค๋ณต์ด ๋ฐ์ํฉ๋๋ค.
โก๏ธ ์ธ๋ถ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ด๊ธฐํ ์ํ๋ก ์ธํ ํ๋ ๊ฒฝ์ฐ์๋ ๋น ๋ฐฐ์ด์ ๋ฃ์ด ๋ถํ์ํ ๋ฐ๋ณต ์์ฒญ์ ๋ง์ ์ ์์ต๋๋ค.
์ง๋ฃ๊ณผ ํ์ ๋ถ๋ถ ์ฝ๋
<div
className="shadow-md rounded-lg p-10 flex gap-10 justify-center w-full overflow-x-auto scrollbar-hide"
>
{getDepartments().map((department, index) => (
<DepartmentIcon
key={index}
name={department.name}
imageUrl={department.icon}
/>
))}
</div>
DepartmentIcon ์ปดํฌ๋ํธ
function DepartmentIcon({ imageUrl, name }) {
return (
<div className="text-center bg-gray-200 px-10 py-7 rounded-lg shadow">
<img
src={imageUrl}
/>
<p className="font-bold">{name}</p>
</div>
);
}
๐ ์ฐธ๊ณ ์๋ฃ
useEffect ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
useEffect – React
The library for web and native user interfaces
ko.react.dev
useState๋ Repository์ ์ ๋ฆฌํ์์ต๋๋ค. (useEffect๋ ์ ๋ฆฌ ์์ ์ ๋๋ค.)
GitHub - jiwonclvl/practice-javascript: JavaScript ๋ฌธ๋ฒ๊ณผ React์ ์ฃผ์ ๊ฐ๋ ๋ค์ ์ค์ตํ๋ฉฐ ์ตํ๊ธฐ ์ํ ์ฐ์ต
JavaScript ๋ฌธ๋ฒ๊ณผ React์ ์ฃผ์ ๊ฐ๋ ๋ค์ ์ค์ตํ๋ฉฐ ์ตํ๊ธฐ ์ํ ์ฐ์ต์ฉ Repository - jiwonclvl/practice-javascript
github.com