Skip to content

๐ŸงŠ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์š”์ฒญ ์ œ์–ดํ•˜๊ธฐ

kimminsu edited this page Dec 2, 2024 · 1 revision

์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์š”์ฒญ ์ œ์–ดํ•˜๊ธฐ

๋ถ„์•ผ ์ž‘์„ฑ์ž ์ž‘์„ฑ์ผ
BE ๊น€๋ฏผ์ˆ˜ 24๋…„ 12์›” 03์ผ

๊ฐœ์š”

๊ฐ€๊ฒฉ ์ƒ์Šน, ํ•˜๋ฝ๋ฅ  ์ˆœ์œ„์— ๋Œ€ํ•œ API๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ๋งŒ๋“ค์—ˆ๋‹ค. ํ•ด๋‹น ์ž‘์—…์€ ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฃผ๊ฐ€ ์„œ๋ฒ„์˜ API๋ฅผ ํ†ตํ•ด, 20๊ฐœ์˜ ๋žญํ‚น์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ํ›„ ๊ฐ ์ข…๋ชฉ์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด 20๊ฐœ์˜ ์š”์ฒญ์„ ์ถ”๊ฐ€๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์‹คํŒจํ•˜๋ฉด ์žฌ ์š”์ฒญํ•˜๋„๋กํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ง‘๋˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ง‰๋„๋ก ํ–ˆ๋‹ค.

async getDecreaseRankStocks(count = 5) {
    try {
      if (count === 0) return;
      const result = await this.getFluctuationRankApiStocks(false);
      const liveResult = await this.getFluctuationRankApiLive(result);
      await this.datasource.transaction(async (manager) => {
        await this.saveFluctuationRankStocks(result, manager);
        await this.saveLiveData(liveResult, manager);
        this.logger.info('decrease rank stocks updated');
      });
    } catch (error) {
      this.logger.warn(error);
      await new Promise((resolve) =>
        setTimeout(() => resolve(this.getDecreaseRankStocks(--count)), 2000),
      );
    }
  }

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 500 ์—๋Ÿฌ๊ฐ€ ์ˆ˜์—†์ด ๋งŽ์ด ๋ฐ˜๋ณต์ด ๋˜์—ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” 1๊ฐœ์˜ ๊ณ„์ขŒ์—์„œ ํ—ˆ์šฉ๋œ ์š”์ฒญ์˜ ์ˆ˜(์ดˆ ๋‹น 20๊ฐœ)๋ฅผ ์ดˆ๊ณผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋•Œ ํ•˜๋ฃจ ๋‹น ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ์–ด๋Š ์ •๋„ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ธก์ •ํ•ด ๋ณด์•˜๋‹ค.

๋†€๋ž๊ฒŒ๋„ 1๋งŒ ๊ฐœ ์ด์ƒ์˜ ์š”์ฒญ์ด ์‹คํŒจ๊ฐ€ ๋˜์—ˆ๋‹ค.

์›์ธ

์š”์ฒญ ์ˆ˜ ์ œ์–ด๋ฅผ ์‹คํŒจํ•œ ์›์ธ์€ ํ˜„์žฌ ์š”์ฒญ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง์ด ์‹ค์ œ๋กœ๋Š” ์ œ์–ด๊ฐ€ ์ž˜ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ๊ธฐ์กด์— ์ง„ํ–‰ํ•œ ์š”์ฒญ ์ œ์–ด ๋กœ์ง์€ ํฌ๊ฒŒ 2๊ฐ€์ง€์˜€๋‹ค. ์šฐ์„  ์ฒซ ๋ฒˆ์งธ๋Š” ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ•ด๋‹น ๋กœ์ง์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„์ด ๋„๋‹ฌํ•˜๋ฉด api ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๋Š” ๋กœ์ง์œผ๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋”ฐ๋ผ์„œ 1๋ถ„ ์ฃผ๊ธฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ์ดํ„ฐ(๋ณ€๋™๋ฅ  ์ˆœ์œ„, ๊ทธ์™€ ์—ฐ๊ด€๋œ ๋ผ์ด๋ธŒ ๋ฐ์ดํ„ฐ ๋“ฑ)์— ์“ฐ์ด๊ฒŒ ๋œ๋‹ค. ํŠน์ • ์‹œ๊ฐ„์— ๋„๋‹ฌํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ดˆ ๋‹น 20๊ฐœ์˜ ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ ์œผ๋กœ๋Š” ๊ฐ ๋กœ์ง๋งˆ๋‹ค ๋™๊ธฐํ™”๊ฒŒ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๋ณ€๋™๋ฅ  ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์™€์ค‘์— ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์‹œ์— ์š”์ฒญ๋˜์–ด ํ—ˆ์šฉ๋˜๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‘ ๋ฒˆ์งธ ๋กœ์ง์€ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์ด ํ•œ๋ฒˆ์— ๋งŽ์€ ์š”์ฒญ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋กœ์ง์ด๋‹ค. ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ„์ขŒ์˜ ์ˆ˜๋งŒํผ task chunk๋ฅผ ๋‚˜๋ˆ„์–ด์„œ setTimeout์„ ๊ฑธ์–ด์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ์š”์ฒญ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋„ ์š”์ฒญ์„ ์ œ์–ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค. ํ•ด๋‹น ๋กœ์ง์˜ ๋ฌธ์ œ๋Š” ์ฒซ๋ฒˆ์งธ ๋กœ์ง๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ์š”์ฒญ๊ณผ ๊ฒน์น˜๊ฒŒ ๋  ๋•Œ ์š”์ฒญ์ด ์ดˆ๊ณผ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , setTimeout์˜ ์˜ค์ฐจ๊ฐ€ ๋งŽ์ด ์Œ“์—ฌ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋” ํฐ ๋ฌธ์ œ๋กœ ๋„ˆ๋ฌด ๋งŽ์€ setTimout์„ ์Œ“์•„๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ„ฐ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ฒฐ๊ตญ ์ œํ•œ๋œ ์š”์ฒญ ์ˆ˜๋ฅผ ์ž˜ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด ๋กœ์ง์„ ๋งŒ๋“ค ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์ž

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ง€์ ์ด ํ•„์š”ํ–ˆ๊ณ , ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ค‘๊ฐ„ ์ง€์ ์œผ๋กœ ๋‘์–ด ์š”์ฒญ ์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๊ฐœ์„ ๋œ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์‚ฐ์ž - ํ - ์†Œ๋น„์ž ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋„๋ก ํ–ˆ๋‹ค.

์ƒ์‚ฐ์ž

์šฐ์„  ์ƒ์‚ฐ์ž๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ํ์—๊ฒŒ ์š”์ฒญ task๋ฅผ ์‚ฝ์ž…ํ•˜๋„๋ก ํ•œ๋‹ค. ํ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์š”์ฒญ url - ์ฃผ๊ฐ€ API์— ์š”์ฒญํ•  url
  • ์ฟผ๋ฆฌ - ์š”์ฒญ์— ํ•„์š”ํ•œ ์ฟผ๋ฆฌ
  • TR_ID - ๊ฑฐ๋ž˜ ๋ฒˆํ˜ธ
  • callback - ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜

์šฐ์„ ์ˆœ์œ„ ํ

์ƒ์‚ฐ์ž์˜ ์š”์ฒญ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด๋•Œ ์š”์ฒญ์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ž‘์—…์„ ๋จผ์ € ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์†Œ๋น„์ž

์šฐ์„ ์ˆœ์œ„ ํ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ api๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜จ ํ›„ callback ํ•จ์ˆ˜์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค. ์ด๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์žฌ์š”์ฒญ์„ ํ•˜๋„๋กํ•œ๋‹ค.

ํ•ด๋‹น ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•œ ํ›„ ์ด์ „์— ๋น„ํ•ด์„œ ์š”์ฒญ ์ œ์–ด ์‹คํŒจ์— ๋Œ€ํ•œ ์—๋Ÿฌ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“  ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿœ ํŒ€ ๊ฐœ๋ฏธ

๐Ÿ›๏ธ ํŒ€ ๋ฌธํ™”

๊ฐœ๋ฐœ ์œ„ํ‚ค

FE

BE

Infra

๐Ÿ—ฃ๏ธ ๋ฐœํ‘œ

๐Ÿ“š ํšŒ์˜๋ก

๐Ÿ”ด ์ธํ„ฐ๋ฏธ์…˜
๐ŸŸ  1์ฃผ์ฐจ
๐ŸŸก 2์ฃผ์ฐจ
๐ŸŸข 3์ฃผ์ฐจ
๐Ÿ”ต 4์ฃผ์ฐจ
๐ŸŸฃ 5์ฃผ์ฐจ
๐ŸŸค 6์ฃผ์ฐจ

๐Ÿ’ญ ํšŒ๊ณ 

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ๋ฉ˜ํ† ๋ง

Clone this wiki locally