본문 바로가기
Programming

JavaScript 비동기 처리

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 9. 7.
반응형

🚀 자바스크립트 비동기 처리: Callback, Promise, async/await

자바스크립트는 싱글 스레드 언어입니다. 하지만 비동기 처리를 통해 웹 페이지가 멈추지 않고 네트워크 요청, 타이머, 파일 읽기 등을 처리할 수 있습니다.

이번 강의에서는 자바스크립트의 비동기 처리 방식인 콜백 함수(Callback), 프로미스(Promise), 그리고 async/await의 개념과 사용법을 소개합니다.

🪝 1. 콜백 함수 (Callback)

콜백 함수는 다른 함수에 인자로 전달되어 특정 작업이 끝난 후 실행되는 함수입니다.

function greet(name, callback) {
  console.log("안녕하세요, " + name + "님!");
  callback();
}

function finish() {
  console.log("방문해주셔서 감사합니다.");
}

greet("홍길동", finish);
// 출력:
// 안녕하세요, 홍길동님!
// 방문해주셔서 감사합니다.

⚠️ 콜백 지옥(callback hell)은 중첩이 심해지며 가독성이 떨어지는 단점이 있습니다.

💎 2. 프로미스 (Promise)

Promise는 비동기 작업의 성공(resolve) 또는 실패(reject)를 나타내는 객체입니다.

const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const success = true;
      if (success) {
        resolve("데이터 가져오기 성공!");
      } else {
        reject("실패했습니다.");
      }
    }, 1000);
  });
};

fetchData()
  .then(result => console.log(result))
  .catch(error => console.error(error));

✔. then()은 성공,. catch()는 실패 시 실행됩니다.

✨ 3. async/await (ES2017+)

async/await은 Promise를 동기 코드처럼 읽기 쉽게 작성할 수 있게 해 줍니다.

async function getData() {
  try {
    const result = await fetchData();
    console.log(result);
  } catch (err) {
    console.error(err);
  }
}

getData();

💡 await는 Promise가 처리될 때까지 기다리며, try/catch로 에러를 처리합니다.

📌 정리:
• Callback: 함수 안에 또 다른 함수 호출
• Promise: then/catch로 비동기 결과 처리
• async/await: 가독성 향상, try/catch로 오류 처리

🧪 실전 예제: 가상의 API 호출

function fakeAPI() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ message: "서버 응답 완료!" });
    }, 1500);
  });
}

async function showAPIResult() {
  const data = await fakeAPI();
  console.log(data.message);
}

showAPIResult(); // "서버 응답 완료!"

✅ 마무리

  • 콜백 함수는 간단한 비동기 처리에 유용하지만 중첩 문제 있음
  • Promise는 then/catch 패턴으로 구조화된 비동기 처리 제공
  • async/await는 가장 현대적이고 가독성 높은 방법

비동기 처리는 자바스크립트에서 가장 중요한 개념 중 하나입니다. 오늘 배운 내용을 기반으로 API 통신, 파일 업로드, 타이머 등 다양한 비동기 작업에 활용해 보세요!

반응형

'Programming' 카테고리의 다른 글

JavaScript this와 바인딩  (112) 2025.09.09
JavaScript 스코프와 클로저  (107) 2025.09.08
JavaScript 배열 고차 함수  (77) 2025.09.06
JavaScript DOM 기본 조작  (106) 2025.09.05
JavaScript 이벤트 처리 기본  (98) 2025.09.04