kohigowild
async / await κ°λ μ 리 (Feat. λκΈ°, λΉλκΈ°) λ³Έλ¬Έ
π‘ λκΈ°μ λΉλκΈ°
λκΈ°(synchronous)λ, μ΄λ€ μμ
μ μ€νν λ κ·Έ μμ
μ΄ λλκΈ°λ₯Ό κΈ°λ€λ¦¬λ λ°©μμ μλ―Ένλ€. μ¦, μμ
μ΄ μλ£λ λκΉμ§ λ€μ μ½λμ μ€νμ λ©μΆκ³ κΈ°λ€λ¦¬λ κ²μ΄λ€. μ΄λ¬ν λ°©μμ μμ
μ μμλ₯Ό 보μ₯νκ³ , μμ
μ΄ λλ λκΉμ§ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬λ κ²μ΄ κ°λ₯νλ€.
λΉλκΈ°(asynchronous)λ, μ΄λ€ μμ
μ μ€νν λ κ·Έ μμ
μ΄ μλ£λμ§ μλλΌλ λ€μ μ½λλ₯Ό μ€ννλ λ°©μμ μλ―Ένλ€. μ¦, μμ
μ΄ μλ£λμ§ μμλλΌλ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μ½λλ₯Ό μ€ννλ κ²μ΄λ€. μ΄λ¬ν λ°©μμ μμ
μ΄ μ€λ 걸리λ κ²½μ° μκ°μ μ μ½νκ³ , λ³λ ¬μ μΈ μμ
μ²λ¦¬κ° κ°λ₯νλ€.
λκΈ° λ°©μμΌλ‘ νμΌμ μ½λλ€λ©΄ νμΌμ μ½κΈ° μμν μ΄νμ λ€μ μ½λλ₯Ό μ€ννμ§ μκ³ νμΌμ΄ μ½νμ§κΈ°λ₯Ό κΈ°λ€λ¦°λ€. λ°λ©΄μ λΉλκΈ° λ°©μμΌλ‘ νμΌμ μ½λλ€λ©΄ νμΌμ μ½λ μμ
μ΄ μ€νλλ λμ λ€λ₯Έ μμ
μ μνν μ μλ€.
π‘ μλ°μ€ν¬λ¦½νΈμμμ λΉλκΈ° μ²λ¦¬
μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ(Single Thread) κΈ°λ°μ νλ‘κ·Έλλ° μΈμ΄μ΄λ€. νλμ μ€λ λμμ λͺ¨λ μμ μ μ²λ¦¬νλλ‘ λμ΄ μκΈ° λλ¬Έμ, ν λ²μ νλμ μμ λ§ μ²λ¦¬ν μ μλ€. κ·Έλμ μλ°μ€ν¬λ¦½νΈμμ λκΈ° λ°©μμΌλ‘ μ²λ¦¬λ₯Ό νκ² λλ©΄, μ΄μ μμ μ΄ μλ£λ λκΉμ§ λ€μ μμ μ μ²λ¦¬ν μ μλ€. μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ μλ°μ€ν¬λ¦½νΈμμλ λΉλκΈ° μ²λ¦¬κ° νμνλ€.
function test() {
for (let i = 0; i < 10000; i++) {
console.log(1);
}
console.log(2);
}
- μ½μμ 2κ° μ°νλ €λ©΄ 1λ§ λ²μ 1μ΄ μ°ν λκΉμ§ κΈ°λ€λ €μΌ νλ€.
λΉλκΈ° μ²λ¦¬λ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈλ νλμ μ€λ λμμλ λ³λ ¬μ μΌλ‘ μ¬λ¬ μμ
μ μ²λ¦¬ν μ μλ€. μλ₯Ό λ€μ΄, λ€νΈμν¬ ν΅μ μ λΉλκΈ° λ°©μμΌλ‘ μ²λ¦¬νλ©΄, μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μμ€λ λμμλ λ€λ₯Έ μμ
μ μ²λ¦¬ν μ μμΌλ©°, λ°μ΄ν°λ₯Ό λ°μμ€λ μμ
μ΄ μλ£λλ©΄ ν΄λΉ μμ
μ μ²λ¦¬ν μ μλ€.
π‘ μ λΉλκΈ° μ²λ¦¬κ° νμνκ°?
μΉ νμ΄μ§μ λ°μμ± ν₯μ: μ¬μ©μκ° μμ²ν μμ
μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬λ κ²μ μ¬μ©μ κ²½νμ μ ν΄μν¨λ€. λ°λΌμ, λΉλκΈ° μ²λ¦¬λ₯Ό ν΅ν΄ μ¬μ©μμ μμ²μ λΉ λ₯΄κ² λ°μν μ μλλ‘ ν΄μΌ νλ€.
λ€νΈμν¬ ν΅μ : μΉ μ ν리μΌμ΄μ
μμλ μλ²μμ λ°μ΄ν° ν΅μ μ΄ νμνλ€. λκΈ°μ μΈ μ²λ¦¬λ₯Ό νκ² λλ©΄ μλ΅μ κΈ°λ€λ¦¬λ λμ λ€λ₯Έ μμ
μ μνν μ μκΈ° λλ¬Έμ μΉ νμ΄μ§μ λ°μμ±μ΄ λ¨μ΄μ§ μ μλ€. λ°λΌμ, λΉλκΈ°μ μΌλ‘ λ°μ΄ν°λ₯Ό λ°μμ€λ κ²μ΄ μΉ νμ΄μ§μ μ±λ₯μ ν₯μμν€λλ° λμμ΄ λλ€.
λ³λ ¬ μ²λ¦¬: λΉλκΈ° μ²λ¦¬λ₯Ό ν΅ν΄ μ¬λ¬ μμ
μ λμμ μ²λ¦¬ν μ μλ€. μ΄λ₯Ό ν΅ν΄ μκ°μ΄ μ€λ 걸리λ μμ
μ λ³λ ¬μ μΌλ‘ μ²λ¦¬ν μ μμΌλ©°, κ²°κ³Όμ μΌλ‘ μ 체 μμ
μκ°μ λ¨μΆμν¨λ€.
μλ¬ μ²λ¦¬: λΉλκΈ°μ μΌλ‘ μ²λ¦¬ν λ μλ¬κ° λ°μνλ©΄, ν΄λΉ μλ¬λ₯Ό μ½κ² μ²λ¦¬ν μ μλ€. μλ¬ λ°μ μ, μλ¬λ₯Ό μ²λ¦¬ν μ μλ μ½λ°± ν¨μλ₯Ό μ€ννκ±°λ, μλ¬λ₯Ό μΊμΉνμ¬ μ²λ¦¬ν μ μμ΄ νλ‘κ·Έλ¨μ μμ μ±μ λμΌ μ μλ€.
π‘ asyncμ await
asyncμ awaitλ ES2017(ECMAScript 8)λΆν° μΆκ°λ μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μ²λ¦¬ λ°©μ μ€ νλμ΄λ€. asyncμ awaitλ₯Ό μ¬μ©νλ©΄ λΉλκΈ° μ½λλ₯Ό λκΈ° μ½λμ²λΌ μμ±ν μ μμ΄, κ°λ μ±μ΄ μ’μμ§κ³ μλ¬ μ²λ¦¬κ° κ°λ¨ν΄μ§λ€.
asyncλ ν¨μμ μμ λΆμ¬μ ν΄λΉ ν¨μκ° λΉλκΈ° ν¨μμμ λνλ΄λ©°, awaitλ λΉλκΈ° ν¨μμ μ€ν κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬λ ν€μλμ΄λ€. async ν¨μ μμμ await ν€μλλ₯Ό μ¬μ©νλ©΄, ν΄λΉ λΉλκΈ° μμ μ΄ μλ£λ λκΉμ§ μ½λ μ€νμ μΌμ μ€μ§νκ³ κ²°κ³Όλ₯Ό κΈ°λ€λ¦° λ€μ, ν΄λΉ κ²°κ³Όλ₯Ό λ°ννλ€.
async function getData() {
const response = await fetch('/api');
const data = await response.json();
return data;
}
ν΄λΉ ν¨μλ async ν¨μ getDataλ₯Ό μ μνκ³ , fetch ν¨μλ₯Ό μ¬μ©νμ¬ URLμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ , ν΄λΉ λ°μ΄ν°λ₯Ό JSONμΌλ‘ νμ±νλ μμ μ λΉλκΈ°μ μΌλ‘ μννλ€. awaitλ₯Ό μ¬μ©νμ¬ fetchμ json() λ©μλλ₯Ό κΈ°λ€λ¦¬κ³ , λ°μ΄ν°λ₯Ό λ°ννλ€.
async function getData() {
try {
const response = await fetch('/api');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
}
}
await ν€μλλ Promise κ°μ²΄κ° μλ£λ λκΉμ§ μ½λ μ€νμ μΌμ μ€μ§νλ―λ‘, try-catch λΈλ‘ μμμ μ¬μ©νμ¬ μλ¬ μ²λ¦¬λ₯Ό ν μ μλ€. fetchμμ λ€νΈμν¬ μλ¬κ° λ°μν κ²½μ°, await μ΄νμ μ½λλ μ€νλμ§ μμΌλ©°, catch λΈλ‘μΌλ‘ μ μ΄κ° λμ΄κ° μλ¬λ₯Ό μ²λ¦¬ν μ μλ€.
'mitmitwiki' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
SPA CSR SSR SEO SSG JKP (0) | 2023.05.19 |
---|---|
λΈλΌμ°μ λ λλ§ μ리 (0) | 2023.04.27 |
REST APIκ° λ¨Όλ°μ... (0) | 2023.04.11 |
νμ΄μ΄λ² μ΄μ€λ‘ 무ν μ€ν¬λ‘€ ꡬννκΈ° (1) | 2023.04.08 |
νμ΄μ΄λ² μ΄μ€λ‘ ν€μλ κ²μ ꡬννκΈ° (0) | 2023.04.07 |