글을 본격적으로 시작하기 전에 필수적으로 알아야 할 것이 있다. 그것은 바로...
분위기 한 번 잡아봤지만 사실 별거 없다. API와 AJAX, 그리고 동기, 비동기가 무엇인지 알아야 한다. 많아 보이지만 의외로 개념 자체는 간단한 것들이다. 아 참고로 이 글은 중간 중간에 추가로 설명하는 것들이 많아 글이 꽤 길다. 지루할 수 있겠지만, 분위기를 바꾸기 위한 사진도 몇 개 넣어놨으니 인내심을 가지고 같이 한 번 알아보도록 하자.
API는 Application Programming Interface(애플리케이션 프로그래밍 인터페이스)의 줄임말이며, 소프트웨어 애플리케이션끼리 서로 소통하고 상호작용하기 위해 정의된 규약이나 프로토콜이다.

AJAX는 Asynchronous JavaScript and XML의 약자이다. 이름을 토대로 의미를 생각해보면, Asynchronous가 비동기라는 뜻이니 JavaScript를 사용한 비동기 통신, 즉 클라이언트와 서버 간에 데이터를 주고받는 기술이라고 할 수 있다.
AJAX를 통해 서버와 비동기적으로 통신함으로써 우리는 전체 웹페이지를 다시 불러오는 동기 방식과는 다르게 해당하는 부분만 비순차적으로 사용자 인터페이스에 갱신할 수 있다.
정리하면 AJAX는 JavaScript에서 비동기 HTTP 통신이 가능하도록 해준다. 비동기 HTTP 통신이란 request(요청)와 response(응답)를 비동기식으로 다룰 수 있다는 것을 의미한다.
![]()
이해를 돕기 위한 사진들
JavaScript로 API통신을 하는 방법에는 여러 가지가 있지만 나는 많이 알려진 XMLHttpRequest, jQuery AJAX, Fetch API, Axios를 소개하려 한다. 그리고 그중에서도 가장 많이 사용되는 Fetch API를 집중적으로 소개해보겠다
장점
단점
결론

장점
단점
장점
단점
여기서 잠깐 멈춰서 Promise와 콜백 함수가 무엇인지 알아볼 건데, 만약 본인이 이론을 읽을 시간이 없거나(혹은 귀찮거나) 사용법만 빠르게 알고 싶다면 지금 당장은 이 부분을 안 읽어도 된다. 그래도 요약 부분은 이해가 안 되더라도 한 번은 읽어보길 바란다.
우선 promise는 자바스크립트에서 비동기 작업을 처리하기 위한 객체이다. 비동기 작업이 완료되었을 때(성공 또는 실패) 결과 값을 가질 수 있도록 해주는 개념이고, 주로 콜백 함수의 복잡성을 줄이고 코드의 가독성을 높이는 데 사용된다.
그리고 promise는 3가지의 상태를 가지는데 순서대로 대기, 성공, 실패가 있다.
그리고 promise가 완료되면 then, catch, finally 메서드를 사용하여 결과를 처리할 수 있다. 자주 쓰이는 then, catch만 간단하게 알아보자.
then
비동기 작업이 성공적으로 완료되었을 때 실행할 함수를 정의한다.
catch
비동기 작업이 실패했을 때 실행할 함수를 정의한다.
요약하면 promise는 비동기 작업의 결과를 처리하는 데 유용한 자바스크립트 객체이며 then, catch, finally 메서드를 사용하여 비동기 작업의 성공, 실패, 완료 상태를 처리할 수 있다.
콜백 함수는 다른 함수의 인수로 전달되어 실행되는 함수이다. 자바스크립트에서 콜백 함수는 비동기 작업을 처리하거나 이벤트가 발생했을 때 실행되는 코드를 정의하는 데 자주 사용된다. 콜백 함수는 동기 또는 비동기 방식으로 호출될 수 있다.
콜백 지옥
콜백 함수는 간단한 비동기 작업에서는 유용하지만, 여러 비동기 작업을 연속적으로 처리할 때는 코드가 복잡해지고 가독성이 떨어지는 문제가 발생할 수 있는데, 이를 콜백 지옥이라고 부른다.
콜백 지옥 해결 방법
콜백 지옥 문제를 해결하기 위해 promise나 async/await를 사용하면 된다. 앞서 설명한 promise는 비동기 작업을 체인 형태로 처리할 수 있게 해주어 콜백 지옥을 피할 수 있게 해준다.
요약하면 콜백 함수는 다른 함수의 인수로 전달되어 실행되는 함수로, 주로 비동기 작업이나 이벤트 처리에 사용됩니다. 콜백 함수는 간단한 작업에는 유용하지만, 복잡한 비동기 작업에서는 코드가 난해해지는 콜백 지옥 문제가 발생할 수 있다. 이 문제를 해결하기 위해 promise와 async/await 같은 기능을 사용할 수 있다.

계속해서 이론만 배우면 재미도 없고 위 사진과 같은 상황에 처할 수 있으니 설명도 끝난 겸 가장 궁금해했을 코드를 한 번 짜보겠다.
fetch('https://api.example.com/data')
.then(response => {
return response.json();
})
// 요청이 성공하면 응답 객체(response)가 반환
// response 객체를 JSON 형태로 변환하여 반환
.then(data => {
console.log(data);
})
// JSON으로 변환된 데이터를 콘솔에 출력
.catch(error => {
console.error('There was a problem with the fetch operation:', error);
});
// 요청 과정에서 에러가 발생하면 블록을 실행
// 에러 메시지를 콘솔에 출력
이것이 Fetch API를 사용하는 가장 기본적인 형태이다.
서버로 데이터를 보내야 할 때는
fetch(url, {
method: 'POST', // HTTP 메서드 설정
headers: {
'Content-Type': 'application/json', // JSON 형식으로 데이터 전송
},
body: JSON.stringify(data), // 데이터를 JSON 문자열로 변환하여 전송
})
앞부분을 이런식으로 바꿔서 코드를 작성하면 된다.
다른 여러가지 메서드도 있지만 그것들은 일단 생략하겠다.
장점
단점
이렇게 길고 길었던 API통신이 드디어 끝이 났다. 중간 중간에 빠진 내용도 많고 잘못된 내용도 있을 수 있지만, 누군가에게는 이 글이 도움이 되었으면 좋겠다. 물론 여러 글을 읽고도 아래와 같은 상황을 많이 겪을 것이다.(경험담) 그렇지만 계속 시도해서 안될 것은 없기에 끈기를 가지고 꼭 성공하길 바란다.

지금까지 "야, 너두 할 수 있어. API통신" 이였습니다.
긴 글 읽어주셔서 정말 감사합니다.
유용한 글 감사합니다