비동기 JavaScript: Promise의 기본 이해 🚀
웹 개발을 하다 보면, 때로는 우리가 작업을 요청하고 그 결과를 기다려야 할 때가 있습니다. 예를 들어, 사용자의 데이터를 서버에서 가져오거나, 큰 파일을 다운로드하는 경우가 그렇죠. 이런 작업들은 즉시 완료되지 않습니다. 이때 우리는 비동기 JavaScript, 특히 Promise를 사용합니다.
Promise란 무엇인가요?
간단히 말해서, Promise는 JavaScript에서 비동기 작업의 최종 완료(또는 실패) 및 그 결과값을 나타내는 객체입니다. Promise는 세 가지 상태를 가집니다:
- 대기(Pending): 초기 상태, 성공 또는 실패가 아님
- 이행(Fulfilled): 연산이 성공적으로 완료됨
- 거부(Rejected): 연산이 실패함
Promise 사용하기
Promise를 사용하는 기본적인 방법은 다음과 같습니다:
let promise = new Promise(function(resolve, reject) {
// 비동기 작업을 수행합니다.
// 성공하면, resolve를 호출합니다.
// 실패하면, reject를 호출합니다.
});
promise.then(
function(result) { /* 성공 처리 */ },
function(error) { /* 실패 처리 */ }
);
예제: 파일 다운로드 시뮬레이션
function downloadFile(url) {
return new Promise((resolve, reject) => {
console.log(`다운로드 시작: ${url}`);
// 시뮬레이션을 위해 setTimeout 사용
setTimeout(() => {
// 50% 확률로 성공 또는 실패
if (Math.random() > 0.5) {
resolve("파일 다운로드 성공");
} else {
reject("파일 다운로드 실패");
}
}, 3000); // 3초 후
});
}
downloadFile('http://example.com/file')
.then(result => console.log(result))
.catch(error => console.error(error));
이 예제에서는 파일을 다운로드하는 작업을 시뮬레이션합니다. downloadFile 함수는 URL을 받아 Promise를 반환합니다. 3초 후에 무작위로 성공 또는 실패를 결정합니다. 성공하면 resolve를 호출하고, 실패하면 reject를 호출합니다. .then()은 성공 시 호출되고, .catch()는 실패 시 호출됩니다.
결론
Promise는 JavaScript에서 비동기 작업을 다룰 때 매우 유용합니다. 이를 통해 코드의 가독성을 높이고, 콜백 지옥(callback hell)을 피할 수 있습니다. 주니어 개발자 여러분, 비동기 작업을 더 쉽게 다루기 위해 Promise를 적극 활용해 보세요! 🚀