Search

fetch

fetch

JavaScript์—์„œ ์ œ๊ณตํ•˜๋Š” API ์ค‘ ํ•˜๋‚˜๋กœ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋งŒ๋“ค๊ณ  ์‘๋‹ต์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. fetch API๋Š” Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €
node
์‹คํ–‰ ์—ฌ๋ถ€
fetch() ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์žฅ ํ•จ์ˆ˜๋กœ, ๋„คํŠธ์›Œํฌ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์ž‘์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.ย fetch() ํ•จ์ˆ˜๋Š”:
โ€ข
์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ URL์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
โ€ข
๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์˜ต์…˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
โ€ข
Promise ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋Š”:
โ€ข
API ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์‘๋‹ต(response) ๊ฐ์ฒด๋ฅผ resolveํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ(error) ๊ฐ์ฒด๋ฅผ rejectํ•ฉ๋‹ˆ๋‹ค.
fetch() ํ•จ์ˆ˜๋Š”:
โ€ข
HTTP ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ๋“ฑ์˜ ์š”์†Œ๋ฅผ JavaScript์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋„คํŠธ์›Œํฌ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
fetch API์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ
fetch(input, init) .then(response => { // ์‘๋‹ต ์ฒ˜๋ฆฌ return response.json(); // JSON ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ }) .then(data => { // ํŒŒ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ console.log(data); }) .catch(error => { // ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ console.error('Request failed:', error); });
JavaScript
๋ณต์‚ฌ

fetch API์˜ ์ฃผ์š” ๋งค๊ฐœ๋ณ€์ˆ˜:

๋งค๊ฐœ๋ณ€์ˆ˜
์„ค๋ช…
url
์š”์ฒญ์„ ๋ณด๋‚ผ URL
options
์š”์ฒญ์˜ ์˜ต์…˜ ๊ฐ์ฒด (๋ฉ”์†Œ๋“œ, ํ—ค๋”, ๋ณธ๋ฌธ ๋“ฑ)
1.
input:
โ€ข
์š”์ฒญ์„ ๋ณด๋‚ผ URL์ด๋‚˜ Request ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
2.
init (optional):
โ€ข
์ดˆ๊ธฐ ์„ค์ • ๊ฐ์ฒด๋กœ, ์š”์ฒญ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ฉ”์„œ๋“œ(method): GET, POST ๋“ฑ HTTP ๋ฉ”์„œ๋“œ ์„ค์ •
โ€ข
ํ—ค๋”(headers): ์š”์ฒญ ํ—ค๋” ์„ค์ •
โ€ข
๋ฐ”๋””(body): ์š”์ฒญ ๋ณธ๋ฌธ ์„ค์ •

fetch API์˜ ๋ฐ˜ํ™˜๊ฐ’:

fetch ํ•จ์ˆ˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด Promise๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต(Response)์„ ๋‚˜ํƒ€๋‚ด๋Š” Response ๊ฐ์ฒด๋ฅผ resolveํ•˜๊ฑฐ๋‚˜, ์š”์ฒญ์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ rejectํ•ฉ๋‹ˆ๋‹ค.

fetch API์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ:

๋ฉ”์†Œ๋“œ
์„ค๋ช…
fetch(input, init)
๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์‹œ์ž‘ํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. input์€ ์š”์ฒญ URL ๋˜๋Š” Request ๊ฐ์ฒด์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, init์€ ์ดˆ๊ธฐ ์„ค์ • ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
clone()
Response๋‚˜ Request ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.
arrayBuffer()
Response๋ฅผ ArrayBuffer๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
blob()
Response๋ฅผ Blob๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
json()
Response๋ฅผ JSON์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
text()
Response๋ฅผ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
formData()
Response๋ฅผ FormData๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

โ€ข
GET ์š”์ฒญ
// fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GET ์š”์ฒญ ๋ณด๋‚ด๊ธฐ fetch('https://httpbin.org/get') .then(response => { // ์„œ๋ฒ„ ์‘๋‹ต์„ JSON ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑ return response.json(); }) .then(data => { // ํŒŒ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ console.log(data); }) .catch(error => { // ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ console.error('Request failed:', error); });
JavaScript
๋ณต์‚ฌ
โ€ข
POST ์š”์ฒญ
// fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ POST ์š”์ฒญ ๋ณด๋‚ด๊ธฐ const url = 'https://httpbin.org/post' // URL ๊ฒฝ๋กœ const data = { name : 'joeun', age : 20 } // ๋ฐ์ดํ„ฐ (๊ฐ์ฒด) // ์˜ต์…˜ ๊ฐ์ฒด (method, headers, body) // - method : ์š”์ฒญ ๋ฉ”์†Œ๋“œ (GET, POST, PUT, DELETE) // - headers : ์š”์ฒญ ํ—ค๋” ๊ฐ์ฒด // - body : ์š”์ฒญ ๋ณธ๋ฌธ (data) const init = { method : 'POST', headers : { 'Content-Type' : 'application/json' }, body : JSON.stringify(data) } fetch(url, init) .then(response => { // ์„œ๋ฒ„ ์‘๋‹ต์„ JSON ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑ return response.json(); }) .then(data => { // ํŒŒ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ console.log(data); }) .catch(error => { // ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ console.error('Request failed:', error); });
JavaScript
๋ณต์‚ฌ