[javascript] 프로미스와 동시성 제어 기법

프로미스(Promise)는 자바스크립트에서 비동기 코드를 다루는 데 사용되는 기술입니다. 프로미스는 비동기 작업의 결과를 나타내는 객체로, 성공적으로 완료되거나 실패할 수 있습니다. 이러한 프로미스를 사용하여 동시성 제어를 할 수 있습니다.

프로미스 기본 개념

프로미스는 3가지 상태를 가질 수 있습니다:

프로미스는 new Promise() 구문을 사용하여 생성하고, then() 메서드를 사용하여 성공적인 완료 후 처리할 로직을 등록합니다. catch() 메서드를 사용하여 실패한 경우 처리할 로직을 등록할 수도 있습니다.

프로미스 체이닝

프로미스를 사용하면 여러 개의 비동기 작업을 연결하여 순차적으로 실행할 수 있습니다. 이를 프로미스 체이닝이라고 합니다.

프로미스 체이닝을 사용하면 각각의 비동기 작업이 완료된 후에 다음 작업을 수행할 수 있으며, 중간에 에러가 발생하더라도 catch 블록을 통해 처리할 수 있습니다.

예제 코드

아래는 프로미스와 동시성 제어 기법을 사용하여 비동기 작업을 처리하는 간단한 예제 코드입니다.

function getUser(id) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(id === 1) {
        resolve({ id: 1, name: 'John Doe' });
      } else {
        reject(new Error('User not found'));
      }
    }, 1000);
  });
}

function getPosts(user) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(user.id === 1) {
        resolve(['Post 1', 'Post 2']);
      } else {
        reject(new Error('Posts not found'));
      }
    }, 1000);
  });
}

getUser(1)
  .then(user => getPosts(user))
  .then(posts => console.log(posts))
  .catch(error => console.error(error));

위의 코드에서 getUser() 함수는 1초 후에 유저 정보를 가져오는 비동기 작업을 수행하고, getPosts() 함수는 1초 후에 유저의 포스트 정보를 가져오는 비동기 작업을 수행합니다. 이후 then() 메서드를 통해 각각의 작업이 완료된 후에 다음 작업을 연결해주고, catch() 메서드를 통해 에러를 처리합니다.

이와 같이 프로미스를 사용하면 코드를 보다 간결하게 작성할 수 있고, 동시성을 제어하여 비동기 작업을 효율적으로 처리할 수 있습니다.

참고 자료