React
동기와 비동기
Lulung
2024. 12. 19. 14:38
동기(synchronous)와 비동기(asynchronous)는 작업이 실행되는 방식에 대한 개념이다. 작업의 흐름이나 시간적 순서에 따라 구분된다.
동기
순차적으로 작업을 처리하는 방식이다. 한 작업이 끝난 후 다음 작업을 실행한다. 앞선 작업이 완료될 때까지 뒤의 작업이 실행되지 않는다. 작업의 흐름이 직관적이고 단순하다.
console.log("작업 1 시작");
console.log("작업 1 끝");
console.log("작업 2 시작");
console.log("작업 2 끝");
비동기
작업이 독립적으로 실행되며, 다른 작업을 기다리지 않고 진행되는 방식이다. 즉, 한 작업이 실행되는 동안 다른 작업을 동시에 할 수 있다. 보통 이벤트 기반으로 작동하거나 타이머, 서버 요청 등에서 사용된다. 콜백 함수, 프로미스(Promise), async/await 등을 사용하여 결과를 처리한다.
console.log("작업 1 시작");
setTimeout(() => {
console.log("작업 1 끝");
}, 2000); // 2초 후에 실행되는 비동기 작업
console.log("작업 2 시작");
console.log("작업 2 끝");
이 경우, 작업2는 작업1과 관계없이 즉시 실행된다.
이런 비동기는 긴 작업이 실행되는 동안에도 UI가 멈추지 않고 사용자와 상호작용을 계속할 수 있으며 작업의 완료 시점이 예측 불가능하다.
비동기 예시 : setTimeout
console.log("작업 1 시작");
setTimeout(() => {
console.log("작업 1 끝");
}, 2000); // 2초 후에 실행되는 비동기 작업
console.log("작업 2 시작");
console.log("작업 2 끝");
비동기 예시 : fetch (서버 요청)
console.log("데이터 요청 시작");
fetch("https://api.example.com/data")
.then(response => response.json())
.then(data => {
console.log("서버 응답 데이터:", data);
});
console.log("데이터 요청 중...");
데이터 요청 시작과 데이터 요청 중은 바로 출력된다. fetch는 서버에 요청을 보내고, 응답이 오면 .then()으로 결과를 처리한다.