ํ‰๋ฒ”ํ•œ ๋กœ๊น…?

try {
  // Do Something
} catch (ex) {
  console.log(`Error : ${ex}`);
}

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ํŽธํ•˜์ง€๋งŒ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์„ ๋•Œ ์ฝ˜์†”์„ ์Šคํฌ๋กค ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ๋†“์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๊ณ ํ•ด์•ผ ํ•˜์ฃ .

[์˜ค๋ฅ˜ ๋ฐœ์ƒ]
ํ”„๋ก ํŠธ: ์„œ๋ฒ„๋‹˜... 500 ๋– ์š”
๋„ค? ์ž ์‹œ๋งŒ์š”....
[๋กœ๊ทธ ์ฐฝ์„ ๋›ฐ์šด ํ›„]
๋‹ค์‹œ ์š”์ฒญ ๋ณด๋‚ด์ฃผ์‹ค๋ ˆ์š”?

Slack๊ณผ ์—ฐ๋™ํ•˜๊ธฐ

๊ผญ Slack์ด ์•„๋‹ˆ์—ฌ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์—…๋ฌด์šฉ ๋ฉ”์‹ ์ €๊ฐ€ ์žˆ๊ณ , ํ•ด๋‹น ๋ฉ”์‹ ์ €์— ์—ฐ๋™์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์—…๋ฌด์šฉ ๋ฉ”์‹ ์ €๋ฅผ ์‚ฌ์šฉํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ •๋ณด๋ฅผ ๋„ฃ์–ด์•ผ ํ• ๊นŒ์š”?

์ €๋Š” ๋กœ๊น…์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๋ชฉ-์—†์Œ-2.png

์š”์ฒญ ๊ฒฝ๋กœ, ์š”์ฒญ Body, User Agent, ์ตœ๊ทผ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ์‹œ ํŽธํ•˜๊ฒŒ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Middleware ์ž‘์„ฑ

Middleware ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธํ•˜๊ฒŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Koa ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ
const axios = require('axios');

const loggingMiddleware = async (ctx, next) => {
  // ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ
  await next();

  // ์‘๋‹ต ์ฝ”๋“œ ๊ฒ€์‚ฌ
  if ( ctx.status !== 500 ) {
   return; 
  }

  // ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ Slack์œผ๋กœ ๋ณด๋ƒ„
  await axios.post([Slack WebHook ์ฃผ์†Œ], {
    // ์˜ค๋ฅ˜ ์ •๋ณด
    // Slack API๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  });
}

module.exports = loggingMiddleware;

์ด Middleware ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ๋‹ค๋ฉด Slack WebHook ์ฃผ์†Œ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.