[JS] 8. 비동기 통신

최재원's avatar
Apr 01, 2025
[JS] 8. 비동기 통신
ajax → 비동기 자바스크립트 XML 통신 → fetch() 함수
ajax를 사용하는 이유 → 부분 리로드를 하기 위해
json → javascript object notation
notion image
notion image

1. 통신 방법

구) 비동기 통신을 하는 방법 then()

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <h1>fetch get</h1> <hr /> <button onclick="download()">다운로드</button> <script> function download() { let response = fetch( "https://jsonplaceholder.typicode.com/todos/1", { method: "get", } ); response .then((res) => res.json()) .then((res) => { console.log(res); }); } </script> </body> </html>

신) 비동기 통신 방법 await()

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <h1>fetch get</h1> <hr /> <button onclick="download()">다운로드</button> <script> // async -> 비동기 함수라고 알려주는 것 async function download2() { let response = await fetch( // await -> 되돌아올 체크포인트 "https://jsonplaceholder.typicode.com/todos/1", { method: "get", } ); // console.log(response); let responseBody = await response.json(); console.log(responseBody); } </script> </body> </html>

비동기 통신 후 데이터를 화면에 뿌리는 법

코드
<!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; } </style> </head> <body> <div> <div id="userId"></div> <div id="id"></div> <div id="title"></div> <div id="body"></div> </div> <script> async function getPost() { let response = await fetch( "https://jsonplaceholder.typicode.com/posts/1" ); let responseBody = await response.json(); //js Object // console.log(responseBody.userId); // console.log(responseBody.id); // console.log(responseBody.title); // console.log(responseBody.body); document.querySelector("#userId").innerHTML = responseBody.userId; document.querySelector("#id").innerHTML = responseBody.id; document.querySelector("#title").innerHTML = responseBody.title; document.querySelector("#body").innerHTML = responseBody.body; } getPost(); </script> </body> </html>
notion image
notion image

2. 비동기 통신을 해야 하는 이유

코드
<!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>

비동기 통신

notion image

동기 통신

notion image
 
Share article

jjack1