โœ๐Ÿป [Code Camp_TIL] 4์ผ์ฐจ: ๋™๊ธฐ&๋น„๋™๊ธฐ ๋ฐฉ์‹

code_Jยท2023๋…„ 3์›” 19์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
5/41
post-thumbnail

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

API ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ๋™๊ธฐ, ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒŒ์‹œ๊ธ€์„ ๋“ฑ๋กํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋™๊ธฐ ๋ฐฉ์‹์€ ๊ฒŒ์‹œ๊ธ€์„ ๋“ฑ๋กํ•˜๊ณ , ๋“ฑ๋ก ์™„๋ฃŒ ํ›„ ๊ฒŒ์‹œ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ˜•์‹์ด๋‹ค. ๋ฐ˜๋ฉด, ๋น„๋™๊ธฐ ๋ฐฉ์‹์€ ๊ฒŒ์‹œ๊ธ€์ด ๋“ฑ๋ก ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ๊ฒŒ์‹œ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ๋น„๋™๊ธฐ ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์ฒญ๋“ค์ด ์ผ์–ด๋‚  ๋•Œ ์„œ๋กœ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์ผ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋น„๋™๊ธฐ ๋ฐฉ์‹์€ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ํ›„ ๊ฒŒ์‹œ๊ธ€์„ ๋ถˆ๋Ÿฌ์™”์„ ๋•Œ ๊ฒŒ์‹œ๊ธ€์ด ๋ถˆ๋Ÿฌ์™€์ง€์ง€ ์•Š๋Š” ๋“ฑ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฝ์šฐ์— ๋™๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.



Rest-API์—์„œ ๋™๊ธฐ & ๋น„๋™๊ธฐ ์‹คํ–‰

JS๋ฅผ ํฌํ•จํ•ด์„œ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด๋Š” ๋™๊ธฐ ์‹คํ–‰ ๋ฐฉ์‹์ด๊ณ , ์™ธ๋ถ€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋“ค์€ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋จผ์ €, ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

VS Code์—์„œ ๋น„๋™๊ธฐ๋กœ API ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•

function ํ•จ์ˆ˜์ด๋ฆ„() {
	const data = axios.get('https://koreanjson.com/posts/1')
	console.log(data) // Promise
}

์š”์ฒญ์„ ๋ณด๋‚ด๋†“๊ณ  ๋‚˜์„œ ์‘๋‹ต์ด ์˜ฌ๊ฑฐ๋ผ๊ณ  ์•ฝ์†ํ•œ ์ƒํƒœ๋กœ ๋‹ค์Œ์ค„์˜ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ฝ˜์†”์ฐฝ์—๋Š” return๋œ promise ๊ฐ์ฒด๊ฐ€ ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ promise ๊ฐ์ฒด๋ž€?

Promise ๊ฐ์ฒด๋Š” JS์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋กœ, ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค!

Promise์—๋Š” 3๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค.

Pending(๋Œ€๊ธฐ): ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ
Fulfilled(์ดํ–‰): ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด ์ค€ ์ƒํƒœ
Rejected(์‹คํŒจ): ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ


๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ช…๋ น์–ด๋Š” async์™€ await์ด๋‹ค.

async function ํ•จ์ˆ˜์ด๋ฆ„() {
	const data = await axios.get('https://koreanjson.com/posts/1')
	console.log(data) // {id: 1, title: "์ •๋‹น์˜ ๋ชฉ์ ์ด๋‚˜ ํ™œ๋™์ด ...", ...}
}

์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด await๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์‘๋‹ต์ด ์˜จ ํ›„์— ์•„๋žซ์ค„ ์ฝ”๋“œ๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋œ๋‹ค.




profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

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