JavaScript의 Promise 사용 방법
JavaScript의 Promise 사용방법에 대해서 알아보자.

Promise 란?
JavaScript에서 Promise는 비동기 작업의 성공 또는 실패를 나타내는 객체이다. 비동기 작업이 완료된 후 결과값을 반환하거나, 작업이 실패했을 때 이유를 알려주는 데 사용된다. 쉽게 말해, Promise는 현재 상태를 나타내며, 이를 통해 비동기 코드를 더 직관적으로 작성할 수 있다.
Promise의 상태 (States)
Promise는 아래 세 가지 상태를 가진다:
- Pending (대기): 초기 상태, 아직 결과가 결정되지 않은 상태.
- Fulfilled (이행): 작업이 성공적으로 완료되어 결과를 반환한 상태.
- Rejected (거부): 작업이 실패하고 에러를 반환한 상태.
Promise의 상태는 한 번 결정되면 변경되지 않는다.
Promise 사용 방법
- Promise 생성
Promise 객체는 new Promise 생성자를 사용하여 생성한다. 생성자는 두 가지 매개변수 resolve와 reject를 가진 콜백 함수를 받는다.
const myPromise = new Promise((resolve, reject) => {
const success = true;
if (success) {
resolve('작업 성공!'); // 성공 시
} else {
reject('작업 실패!'); // 실패 시
}
});
- then, catch, finally 메서드
- then: Promise가 이행(fulfilled)될 때 실행된다.
- catch: Promise가 거부(rejected)될 때 실행된다.
- finally: Promise의 성공 여부와 상관없이 항상 실행된다.
myPromise
.then((result) => {
console.log(result); // "작업 성공!"
})
.catch((error) => {
console.error(error); // "작업 실패!" (에러 발생 시)
})
.finally(() => {
console.log('작업 종료');
});
Promise를 사용한 예제: API 호출
다음은 fetch API를 사용하여 데이터를 가져오는 비동기 작업을 Promise로 처리하는 예제이다.
const fetchData = () => {
return new Promise((resolve, reject) => {
const url = 'https://jsonplaceholder.typicode.com/posts/1';
fetch(url)
.then((response) => {
if (!response.ok) {
reject('데이터를 가져오지 못했습니다.'); // HTTP 에러 처리
}
return response.json();
})
.then((data) => resolve(data)) // 성공적으로 데이터 가져오기
.catch((error) => reject(error)); // 네트워크 에러 처리
});
};
fetchData()
.then((data) => {
console.log('데이터 가져오기 성공:', data);
})
.catch((error) => {
console.error('에러 발생:', error);
});
async/await와 Promise
async/await은 Promise 기반의 비동기 코드를 더 간단하고 직관적으로 작성할 수 있게 도와준다.
const fetchDataAsync = async () => {
try {
const response = await fetch(
'https://jsonplaceholder.typicode.com/posts/1'
);
if (!response.ok) throw new Error('데이터를 가져오지 못했습니다.');
const data = await response.json();
console.log('데이터 가져오기 성공:', data);
} catch (error) {
console.error('에러 발생:', error);
} finally {
console.log('작업 종료');
}
};
fetchDataAsync();
Promise의 장점
- 콜백 지옥 해결: Promise는 코드의 가독성을 높여 콜백 중첩 문제를 해결한다.
- 에러 처리: catch를 사용하여 에러를 일관성 있게 처리할 수 있다.
- 체인 가능: 여러 비동기 작업을 순차적으로 처리할 수 있다.
정리
Promise는 비동기 작업을 관리하는 강력한 도구다. 기본적인 사용법을 익힌 후, async/await와 함께 사용하면 더 효율적이고 가독성 높은 코드를 작성할 수 있다. Promise는 특히 네트워크 요청이나 파일 읽기/쓰기 같은 작업에서 유용하게 사용된다.