동기(Synchronous)와 비동기(Asynchronous)의 차이와 활용

동기(Synchronous)와 비동기(Asynchronous)의 차이와 활용

프론트엔드 개발에서 성능 최적화와 사용자 경험을 향상시키려면 동기(Synchronous)와 비동기(Asynchronous)의 개념을 정확히 이해하는 것이 중요합니다. 이 글에서는 두 개념의 차이점, 장단점, 그리고 실제 프론트엔드 개발에서의 활용 사례를 살펴보겠습니다.


🔹 동기(Synchronous)란?

동기 방식은 작업이 순차적으로 실행됩니다.

즉, 앞의 작업이 끝나야 다음 작업이 실행됩니다.

✅ 동기 방식의 특징

  • 한 번에 하나의 작업만 수행
  • 코드가 위에서 아래로 순차적으로 실행
  • 실행 순서가 예측 가능
  • 응답 시간이 느려질 수 있음

✅ 동기 방식 예제 (JavaScript)

console.log("A 작업 시작");
for (let i = 0; i < 1000000000; i++) {} // 연산량이 큰 동기 작업
console.log("B 작업 시작");

위 코드에서는 A 작업이 끝나야 B 작업이 실행됩니다. 따라서 실행 시간이 길어지면 UI가 멈추는 현상(blocking)이 발생할 수 있습니다.


🔹 비동기(Asynchronous)란?

비동기 방식은 작업을 동시에 처리할 수 있습니다.

즉, 하나의 작업이 끝날 때까지 기다리지 않고 다른 작업을 진행합니다.

✅ 비동기 방식의 특징

  • 여러 작업을 동시에 실행 가능
  • 사용자 경험(UX) 향상
  • 코드의 실행 순서가 예측하기 어려움
  • 콜백 지옥(Callback Hell)이나 복잡한 코드 구조 가능성

✅ 비동기 방식 예제 (JavaScript - setTimeout)

console.log("A 작업 시작");
setTimeout(() => {
  console.log("비동기 작업 완료");
}, 2000);
console.log("B 작업 시작");

출력 결과:

A 작업 시작  
B 작업 시작  
(2초 후) 비동기 작업 완료

 


🔹 동기 vs 비동기 차이점 정리

구분
동기(Synchronous)
비동기(Asynchronous)
실행 방식
순차적으로 실행
동시에 실행 가능
실행 속도
느림 (블로킹)
빠름 (논블로킹)
사용자 경험
멈춤 현상 발생 가능
부드러운 UX 제공
예제
for 루프, 기본 함수 실행
setTimeout(), fetch()

🔹 프론트엔드에서 비동기 활용 사례

 

1️⃣ API 호출 (fetch, axios)

웹 애플리케이션에서 데이터를 가져올 때 비동기를 활용합니다.

fetch("https://jsonplaceholder.typicode.com/todos/1")
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error("Error:", error));

이렇게 하면 데이터를 요청하는 동안 UI가 멈추지 않고 계속 동작합니다.

2️⃣ 이벤트 핸들링 (Event Listeners)

사용자의 클릭, 키보드 입력 등은 비동기적으로 처리됩니다.

document.getElementById("btn").addEventListener("click", () => {
  console.log("버튼이 클릭되었습니다!");
});

3️⃣ setTimeout & setInterval 활용

애니메이션, 딜레이 처리 시 유용합니다.

setTimeout(() => {
  console.log("3초 후 실행됩니다!");
}, 3000);

🔹 결론

동기와 비동기의 차이를 이해하고 적절한 상황에 활용하는 것이 프론트엔드 성능 최적화의 핵심입니다.

  • 빠른 응답이 필요한 경우 → 비동기(fetch, setTimeout)
  • 순차적인 실행이 중요한 경우 → 동기(기본 코드 실행)

비동기 코드의 흐름을 제어하기 위해 async/await 도 많이 사용되므로 이를 함께 공부하면 더욱 효율적인 코드 작성이 가능합니다! 🚀

 


#프론트엔드 #동기비동기 #JavaScript #AsyncAwait #Web개발 #비동기처리