λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
JavaScript/React

[React] HTTP 톡신을 μœ„ν•œ 방법 (Fetch, Axios, Promise)

by soyλ―Έλ‹ˆ 2021. 10. 20.

 

 

 

 

μ›Ήμ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ http ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ£Όκ³ λ°›λŠ”λ‹€. http μ—μ„œ μ‚¬μš©ν•˜λŠ” 방식은 μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ GET κ³Ό POST κ°€ κ°€μž₯ 많이 μ‚¬μš©λœλ‹€. 

 

 

GET

http://example.com?a=1&b=2 와 같이 url? 뒀에 νŒŒλΌλ―Έν„°λͺ…=κ°’ ν˜•νƒœλ‘œ ν•„μš”ν•œ 데이터λ₯Ό μ „λ‹¬ν•˜λ©°, 주둜 데이터 μ‘°νšŒλ‚˜ 검색 λ“±μ˜ κΈ°λŠ₯에 μ‚¬μš©λœλ‹€.

 

POST

http body 에 데이터λ₯Ό λ„£μ–΄μ„œ μ „λ‹¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ, url 뒀에 νŒŒλΌλ―Έν„° 값을 ν‘œμ‹œν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. 주둜 μ„œλ²„μ˜ μƒνƒœλ‚˜ 데이터λ₯Ό λ³€κ²½ν•˜λŠ” λ“±μ˜ μˆ˜ν–‰ μž‘μ—…μ— μ‚¬μš©λœλ‹€.

 

 


 

πŸ₯ HTTP 톡신 방식

 

Fetch  / Axios / Promise

 

 

 

πŸ’‘ Fetch  λž€?

μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯ ν•¨μˆ˜μΈ fetch λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ 비동기 톡신을 κ΅¬ν˜„ν•  수 μžˆλ‹€. 비동기 ν†΅μ‹ μ΄λž€ μ‰½κ²Œ 말해 λ¨Όμ € μ‹œμž‘ν•œ μž‘μ—…μ˜ μ™„λ£Œ 여뢀와 상관없이 λ‹€μŒ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” 것이닀. fetch λ₯Ό μ‚¬μš©ν•΄μ„œ get λ°©μ‹μœΌλ‘œ url 을 ν˜ΈμΆœν•΄ 데이터λ₯Ό κ°€μ Έμ˜€κ³  κ°€μ Έμ˜¨ 데이터λ₯Ό response λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€. μ΄λ•Œ fetch ν•¨μˆ˜μ— λ³„λ„μ˜ http λ©”μ„œλ“œ 섀정이 μ—†λ‹€λ©΄ get λ°©μ‹μœΌλ‘œ ν˜ΈμΆœν•œλ‹€. μ›Ή λΈŒλΌμš°μ €μ—μ„œ ν…ŒμŠ€νŠΈ url 을 ν˜ΈμΆœν•˜λ©΄ λ‹€μŒκ³Ό 같이 데이터λ₯Ό 확인할 수 μžˆλ‹€.

 

비동기 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜μ— async λ₯Ό μΆ”κ°€ν•˜κ³  λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜ μ•žμ— await 을 μΆ”κ°€ν•œλ‹€.

 

 

1. Fetch Get μ‚¬μš©ν•˜κΈ°

 

 

 

 

Fetch Get μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

 

2. Fetch Post μ‚¬μš©ν•˜κΈ°

 

 

 

 

Fetch Post μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

 

πŸ’‘ Axios λž€?

비동기 톡신을 μ§€μ›ν•œλ‹€. fetch 와 달리 λ³„λ„λ‘œ μ„€μΉ˜ν•œ ν›„ μž„ν¬νŠΈν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

post λ°©μ‹μ˜ 경우 ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ json κ³Ό 같은 ν˜•νƒœμ˜ 데이터λ₯Ό λ„£κ³  html body 에 λ‹΄μ•„μ„œ url을 ν˜ΈμΆœν•  수 μžˆλ‹€.

크둜슀 λΈŒλΌμš°μ§•μ— μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€. (react μ—μ„œλŠ” fetch 보닀 axios μ„ ν˜Έ)

 

1. axios λ₯Ό μ„€μΉ˜ν•œλ‹€.

npm install --save axios

 

 

 

2. Axios Get μ‚¬μš©ν•˜κΈ°

Axios Get 을 μ‚¬μš©ν•΄λ³΄κΈ° μœ„ν•œ App.js 와 TestAxios.jsλ₯Ό μž‘μ„±ν•œλ‹€.

 

 

 

 

Axios Get μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

3. Axios Post μ‚¬μš©ν•˜κΈ°

Axios Post 을 μ‚¬μš©ν•΄λ³΄κΈ° μœ„ν•œ App.js 와 TestAxios.jsλ₯Ό μž‘μ„±ν•œλ‹€.

 

 

 

 

Axios Post μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

πŸ’‘ 콜백 ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°

 

μžλ°” μŠ€ν¬λ¦½νŠΈλŠ” λΉ„λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•œλ‹€. κ·Έλž˜μ„œ λ¨Όμ € μ‹€ν–‰λœ μž‘μ—…μ΄ λλ‚˜μ§€ μ•Šμ•˜λ”λΌλ„ λ‹€μŒ μž‘μ—…μ΄ μ‹œμž‘λ  수 μžˆλ‹€. 콜백 ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ νŠΉμ • μ½”λ“œμ— μˆœμ„œλ₯Ό μ •ν•΄ μ›ν•˜λŠ” μ‹œμ μ— μ‹€ν–‰ν•  수 μžˆλ‹€.

 

 

콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ³΄κΈ° μœ„ν•œ App.js 와 CallbackTest.jsλ₯Ό μž‘μ„±ν•œλ‹€.

 

 

 

 

Callback μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

 

 

πŸ’‘ Promise λž€?

 

Promise λŠ” 콜백 ν•¨μˆ˜μ™€ 같이 λΉ„λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œλ₯Ό λ™κΈ°μ μœΌλ‘œ κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©ν•œλ‹€. Promise λ₯Ό μ‚¬μš©ν•˜λ©΄ 콜백 ν•¨μˆ˜μ™€ 달리 μ½”λ“œ 가독성을 높일 수 있고 μ˜ˆμ™Έ μ²˜λ¦¬λ„ μ‰½κ²Œ ν•  수 μžˆλ‹€.

 

 

1. Promise then μ‚¬μš©ν•˜κΈ°

 

πŸ₯ Promise μ—μ„œ then ν•¨μˆ˜λŠ” 이전 ν•¨μˆ˜κ°€ μ™„μ „νžˆ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ μ‹€ν–‰λœλ‹€.

 

 

setTimeout λ‚΄μ—μ„œ resolve('react') 둜 'react' λ₯Ό νŒŒλΌλ―Έν„°λ‘œ 보내면 .then μ•ˆμ—μ„œ κ·Έ 값을 result λΌλŠ” νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ„œ log 둜 좜λ ₯ν•œλ‹€. 

 

 

 

Callback μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

 

 

2. Promise catch μ‚¬μš©ν•˜κΈ°

 

Promise μƒνƒœκ°€ λŒ€κΈ°, 이행, κ±°λΆ€ 쀑 κ±°λΆ€ μƒνƒœκ°€ 됐을 λ•Œ catch ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€. λŒ€κΈ° μƒνƒœμ˜ Promise 에 μ—λŸ¬κ°€ λ°œμƒν•΄ μ΄ν–‰μœΌλ‘œ μƒνƒœ λ³€ν™”λ₯Ό ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°λ‹€.

 

 

 

 

Callback μ›Ή μ‹€ν–‰ ν™”λ©΄

 

 

λŒ“κΈ€