[๐ŸŒณjavascript] ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์š”์ฒญํ•˜๊ธฐ

h-a-n-aยท2023๋…„ 3์›” 7์ผ
1

๐ŸŒณjavascript

๋ชฉ๋ก ๋ณด๊ธฐ
8/17

ajax

์„œ๋ฒ„์— get,post ์š”์ฒญํ• ๋•Œ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ

ajax ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ ์‡ผํ•‘๋ฌผ ์ƒํ’ˆ์„ ๋” ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ , ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ ๋Œ“๊ธ€์„ ์„œ๋ฒ„๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ œ๋ฐœ ๋ฐ์ดํ„ฐ ์ฃผ์„ธ์š”์˜ค์˜ค ๋ผ๊ณ  ๋–ผ์“ด๋‹ค๊ณ  ์ฃผ์ง€ ์•Š๊ณ , ๊ทœ๊ฒฉ์— ๋งž์ถฐ ์š”์ฒญ์„ ํ•ด์•ผ ํ•œ๋‹ค. ์•ˆ ๊ทธ๋Ÿฌ๋ฉด ์•ˆ์ค€๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ์š”์ฒญํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

์‚ฌ์šฉ๋ฒ•

๋‹ค์Œ 3๊ฐœ ์ค‘ ํƒ1

  • XLHttpRequest <- ์ฑ…์—์„œ๋งŒ ๋ณด๋˜ ์˜›๋‚  ๋ฌธ๋ฒ•์“ฐ...
  • fetch() <- ๋ฐ”๋‹๋ผ ๊ณผ์ œํ•  ๋•Œ ์ง€๊ธ‹์ง€๊ธ‹ํ•˜๊ฒŒ ์“ฐ๋˜ ๋ฌธ๋ฒ•
  • axios ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ <- JSON์œผ๋กœ ๋„์ฐฉํ•œ ์ž๋ฃŒ๋Š” ์•Œ์•„์„œ array/object ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค

fetch

๋ฐ”๋‹๋ผ ๊ณผ์ œ ๋•Œ ์‚ฌ์šฉํ•˜๋˜ fetch()๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ํ•จ์ˆ˜์—ฌ์„œ ์ฝ”๋“œ ์งค๋•Œ ์ผ์ผ์ด json() ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค ํ•ด์ค˜์•ผ ํ•œ๋‹ค.(์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋Š” ๋ฌธ์ž๋งŒ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. array, object ๋‹ค ๋ถˆ๊ฐ€๋Šฅ...)
์ด๋ ‡๊ฒŒ response.json()์„ ํ˜ธ์ถœํ•˜๋ฉด JSON ๋ฐ์ดํ„ฐ๋ฅผ javascript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

fetch('https://๋ฐ์ดํ„ฐ๋ฐ›์•„์˜ค๋Š”url')
  .then(res => res.json())
  .then(function(data){
    console.log(data)
  })
  .catch(function(error){
    console.log('์‹คํŒจ')
  })

JSON.parse()์™€ res.json()์˜ ์ฐจ์ด

JSON.parse()์—๋Š” ์‘๋‹ต(response) ๋ฐ”๋””๋งŒ์„ ๋„ฃ์–ด์•ผํ•œ๋‹ค. ๋ฐ”๋””์™€ ํ—ค๋”๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค์ง€ ๋ชปํ•œ๋‹ค.
res.json()์—๋Š” ์‘๋‹ต(response) ํ—ค๋”๊ฐ€ ๋“ค์–ด๊ฐ€๋„ ๋ฐ”๋””๋งŒ ์ฝ์–ด์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

axios ์‚ฌ์šฉ

๋‚œ ๊ณ„์† vite ๋กœ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ค‘์ด๋‹ˆ
1. yarn add axios๋กœ ์„ค์น˜ํ–ˆ๋‹ค.
2. import axios from 'axios'๋ผ๊ณ  ์ƒ๋‹จ์—์„œ importํ•˜๊ธฐ
3. axios.get(URL).then(()=>{})
4. ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋Œ€๋น„ํ•ด .catch()๋„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์ฃผ์ž

axios๋Š” promise๊ธฐ๋ฐ˜์˜ ajax ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ด ๊ธฐํšŒ์— promise๋„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๋ณต์Šต์‹œ๊ฐ„~!

Promise

๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

let ํ”„๋กœ๋ฏธ์Šค = new Promise();
ํ”„๋กœ๋ฏธ์Šค.then(function(){
}).catch(function(){
})

then:ํ”„๋กœ๋ฏธ์Šค ์•ˆ์˜ ์ฝ”๋“œ ์‹คํ–‰์ด ์„ฑ๊ณต์ผ ๋•Œ then()ํ•จ์ˆ˜ ๋‚ด์˜ ์ฝ”๋“œ ์‹คํ–‰
catch: ํ”„๋กœ๋ฏธ์Šค ์•ˆ์˜ ์ฝ”๋“œ ์‹คํ–‰์ด ์‹คํŒจํ•  ๋•Œ catch() ํ•จ์ˆ˜ ๋‚ด์˜ ์ฝ”๋“œ ์‹คํ–‰

์žฅ์ 

์ผ๋‹จ ๋ณด๊ธฐ ํŽธํ•˜๋‹ค. then ํ•จ์ˆ˜๋ฅผ ๋ถ™์—ฌ์„œ ์ˆœ์ฐจ์  ์‹คํ–‰๋˜๋ฏ€๋กœ!
์‹คํŒจ์‹œ ํŠน์ • ์ฝ”๋“œ ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”(catch) ๋ผ๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ!

์šฉ๋„

Promise๋Š” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์„ฑ๊ณตํ•˜๋ฉด then()์•ˆ์˜ ์ฝ”๋“œ ์‹คํ–‰, ์‹คํŒจํ•˜๋ฉด catch()์•ˆ์˜ ์ฝ”๋“œ ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”~
๋ผ๊ณ  ๋งํ•˜๋Š” ์„ฑ๊ณต&์‹คํŒจ ํŒ์ •๊ธฐ๊ณ„์ธ๋ฐ, Promise์•ˆ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ๋‹ค ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1+1 ์—ฐ์‚ฐ ๋๋‚˜๋ฉด ์„ฑ๊ณตํŒ์ • ๋‚ด๋ ค์ฃผ์„ธ์š”! ajax ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์ž˜ ๊ฐ€์ ธ์˜ค๋ฉด ์„ฑ๊ณต, ์—๋Ÿฌ๋‚˜๋ฉด ์‹คํŒจํŒ์ • ๋‚ด๋ ค์ฃผ์„ธ์š”!

new Promise() ์•ˆ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๊ทธ ์•ˆ์—์„œ ์„ฑ๊ณต/์‹คํŒจ ํŒ์ • ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.

let ํ”„๋กœ๋ฏธ์Šค = new Promise(function(์„ฑ๊ณต,์‹คํŒจ){
	let ์–ด๋–ค์—ฐ์‚ฐ=1+1;
	์„ฑ๊ณต(์–ด๋–ค์—ฐ์‚ฐ)});
ํ”„๋กœ๋ฏธ์Šค.then(function(a){
  console.log(`์™€ ๊ฒฐ๊ณผ๋Š” ${a}์ž…๋‹ˆ๋‹ค!์„ฑ๊ณตํ–ˆ์–ด์š”!`)
}).catch(function(){
  console.log('์˜ค์šฐ..์‹คํŒจ์ž…๋‹ˆ๋‹ค..')
})

์ฐธ๊ณ ๋กœ, ์—ฐ์‚ฐ๊ฒฐ๊ณผ ๊ฐ™์€๊ฑธ then์•ˆ์—์„œ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์„ฑ๊ณต()์•ˆ์— ๋„ฃ์–ด์ฃผ๊ณ , ๋‚˜์ค‘์— ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•ํƒœ๋กœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

.then()

promise๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ๋‘ ๊ฐœ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค. ํ•˜๋‚˜๋Š” Promise๋ฅผ ์ดํ–‰ํ–ˆ์„๋•Œ, ํ•˜๋‚˜๋Š” ๊ฑฐ๋ถ€๋์„ ๋•Œ

p.then(function(value){
  //์ดํ–‰
}, function(reson){
  //๊ฑฐ๋ถ€
});

.catch()

const ํ•จ์ˆ˜=new Promise(function(res,rej){
 ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์‡ผ})

ํ•จ์ˆ˜.then().catch(function(err){
	console.log(err)
});
// rej()์˜ ๊ฒฐ๊ณผ ๊ฐ’ Error๋ฅผ err์— ๋ฐ›์Œ

method chaining

์—ฐ์†์ ์ธ ์ฝ”๋“œ ์ค„์—์„œ ๊ฐœ์ฒด์˜ method๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. method๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ทธ ๋ฐ˜ํ™˜๊ฐ’(๊ฐ์ฒด)์ด ๋˜ ๋‹ค๋ฅธ method๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.


  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ

  • ์˜ค๋Š˜ ๊ถ๊ธˆํ–ˆ๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    ๊ทธ๋‹ˆ๊นŒ .then()์€ ๋‘ ๊ฐœ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณดํ†ต ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ๋งŒ ์ ๊ณ , ๋‚˜๋จธ์ง€๋Š” .catch()๋กœ ๋ฐ›๋Š”๋‹ค๋Š”๊ฑด๊ฐ€?

  • ์˜ค๋Š˜์˜ ์ผ๊ธฐ
    ํ• ์ผ์ด ์•„์ฃผ ๋งŽ๊ตฐ. ๋ณด๋žŒ์ฐฌ ํ•˜๋ฃจ์˜€๋‹ค.

profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€