![[자바스크립트(Java Script)]7. 동기적(Synchronous) vs 비동기적(Asynchronous) 처리 방식](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EC%259E%2590%25EB%25B0%2594%25EC%258A%25A4%25ED%2581%25AC%25EB%25A6%25BD%25ED%258A%25B8%28Java%2520Script%29%255D7.%2520%25EB%258F%2599%25EA%25B8%25B0%25EC%25A0%2581%28Synchronous%29%2520vs%2520%25EB%25B9%2584%25EB%258F%2599%25EA%25B8%25B0%25EC%25A0%2581%28Asynchronous%29%2520%25EC%25B2%2598%25EB%25A6%25AC%2520%25EB%25B0%25A9%25EC%258B%259D%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3Dsson17&w=2048&q=75)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
.red {
background-color: red;
}
.orange {
background-color: orange;
}
.yellow {
background-color: yellow;
}
.green {
background-color: green;
}
</style>
</head>
<body>
<div id="outer-box">
</div>
<script>
let site = document.querySelector("#outer-box");
makeRedBox();
makeOrangeBox();
makeWhiteBox2();
makeYellowBox();
makeGreenBox();
function makeRedBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "red");
site.append(divDom);
}
function makeOrangeBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "orange");
site.append(divDom);
}
function makeYellowBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "yellow");
site.append(divDom);
}
function makeGreenBox() {
let divDom = document.createElement("div");
divDom.setAttribute("class", "green");
site.append(divDom);
}
function makeWhiteBox() {
let request = new XMLHttpRequest();
request.open('GET', 'http://localhost:8080/api/boards/1', false); // 마지막 인자 false → 동기 요청
request.send(null);
let responseBody = JSON.parse(request.responseText);
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
site.append(divDom);
}
async function makeWhiteBox2() {
let response = await fetch("http://localhost:8080/api/boards/1");
let responseBody = await response.json();
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
site.append(divDom);
}
</script>
</body>
</html>
프로그래밍에서 데이터를 요청하고 응답을 처리하는 방식에는 동기적(Synchronous) 방식과 비동기적(Asynchronous) 방식이 있습니다. 이 두 개념은 특히 네트워크 요청(예: API 호출)에서 중요한 차이를 보입니다.
1. 동기적(Synchronous)이란?
동기적 처리는 하나의 작업이 끝나야만 다음 작업이 진행되는 방식입니다. 요청을 보낸 후 응답이 올 때까지 다음 코드가 실행되지 않고 대기 상태가 됩니다.
예제 코드 (동기적 요청)
function makeWhiteBox() {
let request = new XMLHttpRequest();
request.open('GET', 'http://localhost:8080/api/boards/1', false); // false -> 동기 요청
request.send(null);
let responseBody = JSON.parse(request.responseText);
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
document.querySelector("#outer-box").append(divDom);
}
makeWhiteBoxSync();
2. 비동기적(Asynchronous)이란?
비동기적 처리는 하나의 작업이 실행되는 동안에도 다른 작업을 동시에 진행할 수 있는 방식입니다. API 요청을 보낸 후 응답을 기다리는 동안 다른 코드가 실행됩니다.
예제 코드 (비동기적 요청)
async function makeWhiteBox2() {
let response = await fetch("http://localhost:8080/api/boards/1");
let responseBody = await response.json();
let divDom = document.createElement("div");
divDom.innerHTML = responseBody.body.title;
site.append(divDom);
}
</script>
</body>
</html>
이 코드에서는
fetch
API를 사용하여 비동기적으로 데이터를 요청합니다. await
키워드를 사용하면 해당 줄에서 응답을 기다리지만, 그동안 브라우저는 다른 작업을 계속 수행할 수 있습니다.3. 동기적 vs 비동기적 차이점 정리
구분 | 동기적(Synchronous) | 비동기적(Asynchronous) |
실행 방식 | 요청 후 응답이 올 때까지 대기 | 요청 후 응답을 기다리는 동안 다른 작업 수행 |
UI 반응성 | 멈출 수 있음 | 원활한 UI 유지 가능 |
사용 예시 | 단순한 스크립트, 작은 데이터 처리 | 대규모 네트워크 요청, 파일 다운로드 |
4. 언제 동기적, 비동기적 처리를 사용할까?
- 동기적 처리는 간단한 코드에서 사용되며, 예측 가능한 실행 순서가 필요할 때 적합합니다.
- 비동기적 처리는 네트워크 요청, 파일 처리, 데이터베이스 쿼리 등 시간이 오래 걸리는 작업에서 사용해야 합니다.
결론적으로, 대부분의 경우 비동기적 방식이 유리합니다. 특히 프론트엔드 개발에서는 비동기 처리가 필수적이며,
async/await
문법을 활용하면 가독성이 높은 코드를 작성할 수 있습니다!

Share article