๋ฐ์ํ
๐ค ํฌ์คํ ์์ฑ์ ์์ ๊ถ๊ณ ๋๋ฆฝ๋๋ค!
- ํน์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฌธ์ ๋ถ์ด ์ด ๊ธ์ ์ฝ๊ณ ๊ณ์๋ค๋ฉด fetch(), promise ๊ฐ์ฒด์ ๋ํด ์ถฉ๋ถํ ์ดํด๋ฅผ ๋จผ์ ์งํํ์๊ธฐ๋ฅผ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
- ์ ์ญ์ ์ ๋ฌธ์๋ก API ํธ์ถ ํจํด์ ๋ํด ์ถฉ๋ถํ ๋ฐ๋ณตํ์ต์ ์งํํ ๋ค์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํด ์ค๋ํซ ์ ์์ ์งํํ๊ฒ ๋์์ต๋๋ค.
- ํด๋น ๊ฒ์๋ฌผ์ fetch() ๋ฉ์๋๋ฅผ promise.then ๋ฉ์๋๋ฅผ ํ์ฉํด ์คํํ๋ ๋ฐฉ์๊ณผ, async/await์ ํ์ฉํด ์คํํ๋ ๋ฐฉ์ ๋ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ Visual Studio Code ํ๋ก๊ทธ๋จ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค.
๐ ์ค๋ํซ ์ค์ ๋ฐฉ๋ฒ
- vscode ์์ ์ฌ์ฉ์ ์ฝ๋ ์กฐ๊ฐ ๊ตฌ์ฑ(snippets) ์ค์ ์ผ๋ก ์ด๋.
- ์ ์ญ(global.code-snippets), ํน์ javascript.json์ ์ ํํด์ ์ค๋ํซ ์ ์.
- json ํ์์ผ๋ก ์ค๋ํซ ์์ฑ.
1๏ธโฃ Promise.then์ ์ฌ์ฉํ์ฌ ์ค๋ํซ ๋ง๋ค๊ธฐ.
- ์ค๋ํซ ํธ์ถ ์ fetchPromise ์ฝ๋ ์คํ
- ํด๋น ์ค๋ํซ์ fetch()๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ API ํธ์ถ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ํ๋์ arguments๋ง ๋ฐ๋๋ค.
- ์คํ ์ '$1' ๊ตฌ๋ฌธ์ API ํธ์ถ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
- ์๋ต์ Response ๊ฐ์ฒด๋ก ํํ๋๋ฏ๋ก JSON ๋ณธ๋ฌธ ์ฝํ ์ธ ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด .json()๋ฉ์๋๋ฅผ ํตํด Parsing์ ์งํํ๊ณ Promise๋ฅผ ํ๋ฒ ๋ ๋ฐํํ๋ค.
- promise๊ฐ ์ดํ(resolve)๋ ๋ console.log๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด์๋์ง ํ์ธํ๋ค.
- promise๊ฐ ๊ฑฐ๋ถ(reject)๋ ๋ ํธ์ถ๋๋ catch() ๋ฉ์๋๋ฅผ ํตํด ์๋ฌ๋ฉ์์ง ์ถ๋ ฅํ๋ค.
{
"[Fetch API] Promise.then": {
"prefix": "fetchPromise",
"body": [
"fetch('$1')",
" .then(response => response.json())",
" .then(data => console.log(data))",
" .catch(error => console.error('Error:', error));"
],
"description": "[Fetch API] Promise.then"
}
}
2๏ธโฃ Async/await์ ์ฌ์ฉํ์ฌ ์ค๋ํซ ๋ง๋ค๊ธฐ.
- ์ค๋ํซ ํธ์ถ ์ fetchAsync ์ฝ๋ ์คํ
- ํด๋น ์ค๋ํซ์ fetch()๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ API ํธ์ถ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ํ๋์ arguments๋ง ๋ฐ๋๋ค.
- ์คํ ์ '$1' ๊ตฌ๋ฌธ์ API ํธ์ถ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
- function ํค์๋ ์์ async ๋ง ๋ถ์ฌ์ฃผ๊ณ , ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ ๋ถ๋ถ ์์ await ๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ๊ฒฐํ ๋ก์ง ์คํ ๊ฐ๋ฅ.
- await๋ ์ด๋ฆ๊ณผ ๊ฐ์ด Promise ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฝ๋ ์คํ์ ์ผ์ ์ค์งํ๋ค๋ ์๋ฏธ.
fetch() ๋ฉ์๋๋ฅผ ํตํ APIํธ์ถ, json() ๋ฉ์๋๋ฅผ ํตํ Parsing์ ์งํํ ๋ ์ผ๋ฐ์ ์ผ๋ก 2๋ฒ ๋ถ์ฌ์ค๋ค.
{
"[Fetch API] Async/Await": {
"prefix": "fetchAsync",
"body": [
"async function fetchData() {",
" const response = await fetch('$1');",
" const data = await response.json();",
" console.log(data);",
"}"
],
"description": "[Fetch API] Async/Await"
}
}
3๏ธโฃ Try/Catch ์์ธ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ Async/Await ์ค๋ํซ ๋ง๋ค๊ธฐ
- ์ค๋ํซ ํธ์ถ ์ fetchTryAsync ์ฝ๋ ์คํ.
- ํด๋น ์ค๋ํซ์ fetch()๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ API ํธ์ถ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ํ๋์ arguments๋ง ๋ฐ๋๋ค.
- ์คํ ์ '$1' ๊ตฌ๋ฌธ์ API ํธ์ถ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
- ์๋ต(200-299 ๋ฒ์์ HTTP ์ํ ์ฝ๋)์ด ์ฑ๊ณตํ๋์ง ํ์ธํ๊ณ ์๋ฌ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ if(!response.ok) ์กฐ๊ฑด๋ฌธ ์ถ๊ฐ.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ํ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ try/catch๋ฌธ์ผ๋ก ๊ฐ์ธ์ ์์ธ์ฒ๋ฆฌ.
- 1๏ธโฃ, 2๏ธโฃ ๋ฒ ์ค๋ํซ ๊ตฌ์กฐ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋ ๊ฒฌ๊ณ ํด์ง ์ฝ๋๋ผ๊ณ ํ ์ ์๋ค.
{
"[Fetch API]Async/Await with Try/Catch": {
"prefix": "fetchTryAsync",
"body": [
"async function fetchData() {",
" try {",
" const response = await fetch('$1');",
" if (!response.ok) {",
" throw new Error('HTTP error ' + response.status);",
" }",
" const data = await response.json();",
" console.log(data);",
" } catch (error) {",
" console.error('Error:', error);",
" }",
"}"
],
"description": "[Fetch API] Async/Await with Try/Catch and HTTP error check"
}
}
4๏ธโฃ Promise.all ๋ฉ์๋๋ฅผ ํตํ ๋ณ๋ ฌ์ฒ๋ฆฌ ์ค๋ํซ ๋ง๋ค๊ธฐ
- ์ค๋ํซ ํธ์ถ ์ fetchMultipleAsync ์ฝ๋ ์คํ.
- ํด๋น ์ค๋ํซ์ fetch()๋ ๊ฐ์ ธ์ค๊ณ ์ ํ๋ API ํธ์ถ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ arguments๋ฅผ ๋ฐ๋๋ค.
- await ํค์๋๋ฅผ ์ฐ๋ฉด ๋น๋๊ธฐ๊ฐ ๊ฐ์ ์ ์ผ๋ก ๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๋์ด ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์ํ๋๋ฏ๋ก
ํ ๊ฐ ์ด์์ API๋ฅผ ํธ์ถํ ๋ ์์ฐจ์ ์ผ๋ก ์คํ์ํฌ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ promise.all() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์
๋ณ๋ ฌ๋ก ๋น๋๊ธฐ ํจ์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์คํ์ํฌ ์ ์๋ค. - Promise.all() ์ ๋ฐฐ์ด ๋ด์ ์ธ์๋ก ๋ฐ์ promise ๋ชจ๋๊ฐ ์ดํ(resolve)๋์ด์ผ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด ๋ฐ๋๋ค.
๋ฐฐ์ด ์ธ์์ ๊ฐ ํ๋ก๋ฏธ์ค ํจ์๋ค์ ์ ๊ฐ๊ฐ ๋น๋๊ธฐ๋ก ์ฆ์ ์คํ๋์ด ์๊ฐ์ด ๋จ์ถ๋๋ ํน์ง์ด ์์ผ๋ฉฐ, ๋ฐฐ์ด์ ๊ฐ์ ๋ด์์ ๋ฐํํ๋ค.
{
"[Fetch Multiple APIs] Promise.all and Async/Await": {
"prefix": "fetchMultipleAsync",
"body": [
"async function fetchData() {",
" try {",
" const [response1, response2] = await Promise.all([fetch('$1'), fetch('$2')]);",
" if (!response1.ok || !response2.ok) {",
" throw new Error('HTTP error ' + response1.status + ' or ' + response2.status);",
" }",
" const [data1, data2] = await Promise.all([response1.json(), response2.json()]);",
" console.log('Data1:', data1);",
" console.log('Data2:', data2);",
" } catch (error) {",
" console.error('Error:', error);",
" }",
"}"
],
"description": "[Fetch multiple APIs] Promise.all and Async/Await"
}
}
๋ฐ์ํ