TIL(22/12/07)

๊น€๊ทœํ˜„ยท2022๋…„ 12์›” 7์ผ
0

๐Ÿ’ป Today I Learned

๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ๊ฐ€ ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฐฑ์—”๋“œ CRUD ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํ›„ request ์š”์ฒญ ์‹œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ JavaScript์˜ fetch ์š”์ฒญ์„ ํ†ตํ•ด ํ”„๋ก ํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

์šฐ์„  ํฌ์ŠคํŠธ๋งจ์œผ๋กœ request๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ตํ•˜๋Š” response๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋‹ค์Œ์€ ํ”„๋ก ํŠธ์—์„œ JavaScript๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— fetch ์š”์ฒญ์„ ํ†ตํ•ด ์‘๋‹ต๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.

// ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ url์„ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ค์ •
const backend_base_url = "http://127.0.0.1:8000"

async function get_articles() {
    const response = await fetch(`${backend_base_url}/articles/`, {
        method: "GET",
    })
    const response_json = await reponse.json()
    
    console.log(response_json)
}

์—ฌ๊ธฐ์„œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— fetch ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๋ฐฉ๋ฒ•์ธ async์™€ await์„ ์‚ฌ์šฉํ•˜์—ฌ javascript์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด JavaScript์˜ ํŠน์„ฑ์ƒ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” ์‹คํ–‰ ์‹œ ์ˆœ์„œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋™์ž‘ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๋ถ€ํ„ฐ ์‹คํ–‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด async function์„ ์„ ์–ธํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๊ธฐ ์ „ await์„ ๊ฑธ์–ด์ฃผ๋ฉด promise ๊ฐ์ฒด๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜ ๋ฐ›์„ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ฐ˜ํ™˜์ด ์™„๋ฃŒ๋˜๊ณ  ๋‚œ ํ›„ ์ด์–ด์„œ ๋‹ค์Œ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์ด ์žˆ์„ ๋•Œ await์„ ๊ฑธ์–ด์ฃผ์ง€ ์•Š๊ณ  promise ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ฒŒ ๋  ๊ฒฝ์šฐ promise ๊ฐ์ฒด๊ฐ€ pending ์ƒํƒœ๋กœ ๋ฐ˜ํ™˜๋˜๋Š”๋ฐ ์ด ๋•Œ promise ๊ฐ์ฒด๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜ ๋ฐ›๊ณ  ๋‹ค์Œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก await์„ ๊ฑธ์–ด ๊ธฐ๋‹ค๋ ค์ค€๋‹ค.

๋‹ค์Œ์œผ๋กœ fetch ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ˜„์žฌ ๋‚˜๋Š” GET ๋ฉ”์„œ๋“œ๋กœ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— method๋ฅผ GET์œผ๋กœ ์ž…๋ ฅํ•˜์˜€๊ณ , ๋งŒ์•ฝ POST๋‚˜ PUT or PATCH ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ header์— content-type์„ ์ž…๋ ฅํ•˜์—ฌ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ง€ ์ •ํ•˜๊ณ  body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด fetch ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

์ด ํ›„ ๋ฐ˜ํ™˜๋œ reponse๋ฅผ json ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๊ณ  ์œ„์—์„œ ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

profile
์›น๊ฐœ๋ฐœ ํšŒ๊ณ ๋ก

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