๐Ÿค Web/๐ŸŒ React

Promise.all()๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ - ์ฝ˜์†” ๋กœ๊ทธ๋งŒ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ๋ฒ„๊ทธ๊ฐ€ ๊ณ ์ณ์กŒ๋‹ค?

chamroro 2025. 4. 30. 14:23

๐Ÿค” ๋ฌธ์ œ ์ƒํ™ฉ

์ œ์ผ ์ฒซ ๋Œ“๊ธ€์˜ ์œ ์ € ๋‹‰๋„ค์ž„์„ ๋ชป๋ถˆ๋Ÿฌ์˜ค๋Š” ์ƒํ™ฉ

React ํ”„๋กœ์ ํŠธ์—์„œ Firebase Firestore๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์žฌ๋ฏธ์žˆ๋Š” ํ˜„์ƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋ฅผ ์™„๋ฃŒํ•œ ์‚ฌ์šฉ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ๋ช‡๋ช‡ ์‹œ์—์„œ ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž์˜ ๋‹‰๋„ค์ž„์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, ๋†€๋ž๊ฒŒ๋„ ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

 

 

๐Ÿ” ์›์ธ ๋ถ„์„

์›๋ž˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค:

const fetchUserNicknames = async (userIds: string\[\]) => {  
  if (!userIds.length) return;  

  try {  
    const nicknames: { \[key: string\]: string } = {};  

    for (const userId of userIds) {  
      if (nicknames\[userId\]) continue;  

      const userDoc = await getDoc(doc(db, 'users', userId));  
      if (userDoc.exists()) {  
        const userData = userDoc.data();  
        nicknames\[userId\] = userData.nickname || userData.displayName || userId.substring(0, 8);  
      } else {  
        nicknames\[userId\] = userId.substring(0, 8);  
      }  
    }  

    setCompletedUserNames(nicknames);  
  } catch (error) {  
    console.error('์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜:', error);  
  }  
};  

 

์ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์€:

  1. ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฐ ์š”์ฒญ ์‚ฌ์ด์˜ ํƒ€์ด๋ฐ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ์€, ๋กœ๊ทธ ์ถœ๋ ฅ์œผ๋กœ ์ธํ•ด ๊ฐ ๋น„๋™๊ธฐ ์ž‘์—… ์‚ฌ์ด์— ๋ฏธ์„ธํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ƒ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์‚ฌ์‹ค ์˜ˆ์ „์—๋„ ์ข…์ข… ๊ฒช์—ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ๋ฐ”๋กœ ๋„˜๊ธฐ๊ณค ํ–ˆ๋Š”๋ฐ,

์กฐ๊ธˆ ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ ์ด๋ฅผ "Heisenbug"๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฑธ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

 

https://en.wikipedia.org/wiki/Heisenbug

 

Heisenbug - Wikipedia

From Wikipedia, the free encyclopedia Software bug that seems to change when debugging For the Linux distribution codenamed Heisenbug, see Fedora Linux. In computer programming jargon, a heisenbug is a software bug that seems to disappear or alter its beha

en.wikipedia.org

 

Heisenbug : ๋ฒ„๊ทธ๋ฅผ ๊ด€์ฐฐํ•˜๋ ค๋Š” ํ–‰์œ„(๋กœ๊ทธ ์ถ”๊ฐ€)๊ฐ€ ๋ฒ„๊ทธ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ํ˜„์ƒ

 

โœจ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋” ์•ˆ์ •์ ์ธ ํ•ด๊ฒฐ์„ ์œ„ํ•ด `Promise.all()`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋น„๋™๊ธฐ ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค:

const fetchUserNicknames = async (userIds: string\[\]) => {  
if (!userIds.length) return;

try {  
const nicknames: { \[key: string\]: string } = {};


// Promise.all์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ  
await Promise.all(  
  userIds.map(async (userId) => {  
    if (nicknames\[userId\]) return;  

    const userDoc = await getDoc(doc(db, 'users', userId));  
    if (userDoc.exists()) {  
      const userData = userDoc.data();  
      nicknames\[userId\] = userData.nickname || userData.displayName || userId.substring(0, 8);  
    } else {  
      nicknames\[userId\] = userId.substring(0, 8);  
    }  
  })  
);  

setCompletedUserNames(nicknames);  


} catch (error) {  
console.error('์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜:', error);  
}  
};  

 

์ˆ˜์ • ํ›„์—๋Š”,

  1. ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •๋ณด ์š”์ฒญ์ด ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ ์š”์ฒญ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ํ•œ ์š”์ฒญ์˜ ์ง€์—ฐ์ด ๋‹ค๋ฅธ ์š”์ฒญ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ๋ชจ๋“  ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ํ•œ ๋ฒˆ์— ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก ๊ตํ›ˆ

  1. ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์ˆœ์ฐจ ์ฒ˜๋ฆฌ์™€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ
  2. ์ฝ˜์†” ๋กœ๊ทธ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ํƒ€์ด๋ฐ ์ด์Šˆ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ!
  3. `Promise.all()` ์—ฌ๋Ÿฌ ๋น„๋™๊ธฐ ์ž‘์—…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ 
  4. "Heisenbug" ํ˜„์ƒ์ด๋ผ๋Š” ๊ฒŒ  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค ~~ 
๋ฐ˜์‘ํ˜•