[javascript] Lodash의 병렬 처리 함수들과 사용 예제

Lodash는 JavaScript의 유용한 유틸리티 라이브러리로, 광범위한 기능을 제공합니다. 그 중에서도 Lodash의 병렬 처리 함수들은 비동기 작업을 더욱 쉽게 다룰 수 있도록 도와줍니다. 이번 글에서는 Lodash의 몇 가지 병렬 처리 함수들과 그 사용 예제를 살펴보겠습니다.

1. _.map_.mapValues

_.map은 배열 내의 각 요소에 비동기 작업을 적용하고, 작업이 모두 완료된 후 결과를 배열로 반환합니다. 예를 들어, 사용자 목록에서 각 사용자의 정보를 가져오는 작업을 수행할 때 유용합니다.

const users = ["john", "adam", "alice"];

_.map(users, async (user) => {
  const res = await getUserInfo(user);
  console.log(res);
});

_.mapValues는 객체 내의 각 값을 비동기 작업으로 변경하고, 작업이 모두 완료된 후 결과를 객체로 반환합니다. 예를 들어, 사용자의 정보를 가져오는 API를 호출해 각 사용자의 나이를 업데이트하는 작업에 유용합니다.

const users = {
  john: { name: "John", age: 25 },
  adam: { name: "Adam", age: 30 },
  alice: { name: "Alice", age: 28 },
};

const updatedUsers = await _.mapValues(users, async (user) => {
  const age = await getUserAge(user.name);
  return { ...user, age };
});

console.log(updatedUsers);

2. _.zip_.unzip

_.zip은 여러 배열을 조합하여 하나의 배열로 만들고, 이를 사용해 병렬로 동작하는 작업을 처리할 수 있습니다. 예를 들어, 여러 개의 API로부터 데이터를 가져와 한 번에 처리하는 경우 유용합니다.

const api1Data = await getDataFromAPI1();
const api2Data = await getDataFromAPI2();
const api3Data = await getDataFromAPI3();

const zippedData = _.zip(api1Data, api2Data, api3Data);

_.forEach(zippedData, async (data) => {
  await processData(data);
});

_.unzip_.zip으로 조합된 배열을 다시 분리하여 원래 상태로 복원하는 역할을 합니다.

const zippedData = [
  [1, "a", true],
  [2, "b", false],
  [3, "c", true],
];

const [data1, data2, data3] = _.unzip(zippedData);

console.log(data1); // [1, 2, 3]
console.log(data2); // ["a", "b", "c"]
console.log(data3); // [true, false, true]

3. _.chunk

_.chunk은 배열을 지정한 크기로 잘라서 여러 개의 작은 배열로 분할합니다. 이를 통해 병렬 처리할 작업을 더 작은 단위로 나누어 처리할 수 있습니다. 예를 들어, 대용량 파일을 여러 부분으로 나눠서 동시에 처리할 때 유용합니다.

const largeArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const chunks = _.chunk(largeArray, 3);

_.forEach(chunks, async (chunk) => {
  await processChunk(chunk);
});

결론

Lodash의 병렬 처리 함수들은 비동기 작업을 더 효율적으로 다룰 수 있도록 도와줍니다. _.map_.mapValues는 배열과 객체 내의 요소에 비동기 작업을 적용하고 결과를 다루는데 사용됩니다. _.zip_.unzip은 배열을 여러 개로 조합하거나 분리하여 병렬 처리를 가능하게 합니다. _.chunk은 배열을 작은 부분으로 나눠서 병렬 처리에 유용하게 사용될 수 있습니다. 이러한 Lodash의 병렬 처리 함수들은 JavaScript 개발자들에게 큰 편의를 제공합니다.

참고: Lodash 공식 문서