๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Frontend/TroubleShooting

[Trouble Shooting] bingbot์œผ๋กœ ์ธํ•œ ์ž˜๋ชป๋œ API ์š”์ฒญ ์ฐจ๋‹จํ•˜๊ธฐ

by YWTechIT 2025. 12. 16.
728x90

๐Ÿ“ bingbot์œผ๋กœ ์ธํ•œ ์ž˜๋ชป๋œ API ์š”์ฒญ ์ฐจ๋‹จํ•˜๊ธฐ

๋ฌธ์ œ ๋ฐœ๊ฒฌ

ํ•ด์™ธ TNA ์„œ๋น„์Šค๋‚ด DataDog ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ /analytics ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ 500์—๋Ÿฌ๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” POST ๋ฉ”์„œ๋“œ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ์— GET ์š”์ฒญ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋“ค์–ด์˜ค๊ณ  ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์›์ธ ํŒŒ์•…

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€์ ์—์„œ๋Š” ์ •์ƒ์ ์ธ ์‚ฌ์šฉ์ž flow์—์„œ๋Š” ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์š”์ฒญ์ด์—ˆ๊ธฐ์— ํฌ๋กค๋Ÿฌ์— ์˜ํ•œ ๋น„์ •์ƒ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์ง์ž‘ํ•˜๊ณ  DataDog๋‚ด User-Agent๋ฅผ ํ™•์ธํ•œ ๊ฒฐ๊ณผ Microsoft Bing์˜ ๊ฒ€์ƒ‰ ํฌ๋กค๋Ÿฌ ๋ด‡์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

xxx.xxx.xx.xxx - - [12/Dec/2025:07:24:52 +0000] "GET /analytics HTTP/1.1" 500 90 "-" 
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; 
+http://www.bing.com/bingbot.htm)"

 

ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ `/analytics` ์—”๋“œํฌ์ธํŠธ๋Š” ๋ช…์‹œ์ ์œผ๋กœ POST ์š”์ฒญ์œผ๋กœ๋งŒ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

useEffect(() => {
  async function fetchPostProductAnalytics() {
    await postProductAnalytics(productId, {
      url: `${process.env.NEXT_PUBLIC_WEB_BASE_URL}/tna/products/${productId}`,
    })
  }

  fetchPostProductAnalytics()
}, [productId])

 

๊ทธ๋ ‡๋‹ค๋ฉด HTML ํƒœ๊ทธ๋„ ์•„๋‹ˆ๊ณ , ๋งํฌ๋กœ ๋…ธ์ถœ๋œ ์ ๋„ ์—†๋Š” ์ด ์—”๋“œํฌ์ธํŠธ์— ์™œ GET ์š”์ฒญ์ด ๋ฐœ์ƒํ–ˆ์„๊นŒ์š”?

์™œ bingbot์ด API๋ฅผ ํ˜ธ์ถœํ–ˆ์„๊นŒ?

์กฐ์‚ฌ ๊ณผ์ •์—์„œ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

  1. bingbot์€ JavaScript๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

- bingbot์€ ๋‹จ์ˆœํžˆ HTML ๋งํฌ๋งŒ ์ˆ˜์ง‘ํ•˜๋Š” ํฌ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ, JavaScript ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉฐ ํŽ˜์ด์ง€ ์ค‘์š”๋„๋‚˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ JavaScript๋ฅผ ์‹คํ–‰ํ•ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฒˆ๋“ค ๋‚ด๋ถ€์— ํฌํ•จ๋œ API ๊ฒฝ๋กœ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ํฌ๋กค๋ง ๋Œ€์ƒ์ด ๋œ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋ฒˆ๋“ค ํŒŒ์ผ์—์„œ /analytics ๊ฒฝ๋กœ๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

f = async (e, t) => await i.be.post("/foo/bar/baz".concat(e, "/analytics"), t);

 

์ด ๊ณผ์ •์—์„œ bingbot์ด JS ๋ฒˆ๋“ค ๋‚ด ๋ฌธ์ž์—ด์„ ์ •์ ์œผ๋กœ ๋ถ„์„ํ–ˆ๊ฑฐ๋‚˜, JS๋ฅผ ์‹คํ–‰ํ•œ ๋’ค /analytics ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ง‘ํ•œ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

 

  1. ํฌ๋กค๋Ÿฌ๋Š” HTTP Method์˜ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํฌ๋กค๋Ÿฌ๋Š” API์˜ ์ŠคํŽ™์„ ์ดํ•ดํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์—, URL์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ GET ์š”์ฒญ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ POST ์ „์šฉ API์ž„์—๋„ GET ์š”์ฒญ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์œ ์ž…๋˜์—ˆ๊ณ  ์„œ๋ฒ„์— 500 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ฃ .

๋Œ€์•ˆ ๋ถ„์„

  1. โœ… ์„œ๋ฒ„์—์„œ 405 METHOD_NOT_ALLOWED ์ฒ˜๋ฆฌ

์žฅ์ 

  • API ์ŠคํŽ™ ๋ช…ํ™•ํ™” (POST๋งŒ ํ—ˆ์šฉ)
  • ์—๋Ÿฌ ๋กœ๊ทธ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

๋‹จ์ 

  • ์š”์ฒญ์ด ๋ฐฑ์—”๋“œ๊นŒ์ง€ ๋„๋‹ฌ (๋ฆฌ์†Œ์Šค ์†Œ๋ชจ)
  • ํฌ๋กค๋Ÿฌ ์š”์ฒญ ์ž์ฒด๋ฅผ ์ฐจ๋‹จํ•˜์ง€๋Š” ๋ชปํ•จ
  1. ํ”„๋ก ํŠธ middleware์—์„œ /analytics GET ์š”์ฒญ ์ฐจ๋‹จ

์žฅ์ 

  • ๋ฒ„ํ‹ฐ์ปฌ์—์„œ ๋น ๋ฅธ ๋Œ€์‘ ๊ฐ€๋Šฅ
  • ๋ถˆํ•„์š”ํ•œ ํ”„๋ก์‹œ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ

๋‹จ์ 

  • ์˜ˆ์™ธ์ผ€์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋ฏธ๋“ค์›จ์–ด ๋กœ์ง ๋ณต์žก๋„ ์ฆ๊ฐ€
  1. web/api gateway๋‚ด ๊ฒฝ๋กœ๋ณ„ ์ œํ•œ

์žฅ์ 

  • ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ
  • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ผ๊ด€๋œ ์ •์ฑ… ์ ์šฉ ๊ฐ€๋Šฅ

๋‹จ์ 

  • ๋‹ค๋ฅธ ๋ฒ„ํ‹ฐ์ปฌ์—์„œ ๋™์ผ ๊ฒฝ๋กœ ์‚ฌ์šฉ๊ฐ„์œผ์„ฑ ์กด์žฌ
  • ์˜ํ–ฅ ๋ฒ”์œ„ ๋ถ„์„ ํ•„์š”
  1. โœ… WAF(Web Application Firewall): ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ ์ฐจ๋‹จ

์žฅ์ 

  • ๊ฐ€์žฅ ์•ž๋‹จ์—์„œ ์ฐจ๋‹จํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ตœ๋Œ€ ์ ˆ์•ฝ
  • ํ”„๋ก ํŠธ/๋ฐฑ์—”๋“œ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ
  • ์ธํ”„๋ผ ๋ ˆ์ด์–ด์—์„œ ํ™•์‹คํ•œ ๋ฐฉ์–ด

๋‹จ์ 

  • ์ธํ”„๋ผํŒ€ ํ˜‘์—… ํ•„์š”

์ตœ์ข… ์†”๋ฃจ์…˜

๋ฐฑ์—”๋“œ(1๋ฒˆ) + WAF(4๋ฒˆ) ์กฐํ•ฉ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • WAF: bingbot์„ ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ์—์„œ ์ฐจ๋‹จํ•˜์—ฌ ๋น„์ •์ƒ ์š”์ฒญ์„ ๊ทผ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ
  • ๋ฐฑ์—”๋“œ: ์ถ”ํ›„ ๋™์ผํ•œ ํŒจํ„ด์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ 405 ์‘๋‹ต์œผ๋กœ ์กฐ๊ธฐ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐœ์„ 

๊ธฐ๋Œ€ ํšจ๊ณผ

  1. DataDog๋‚ด ๋™์ผ ์—๋Ÿฌ ๋กœ๊ทธ ๋Œ€ํญ ๊ฐ์†Œ
  2. ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ๊ฑฐ๋กœ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ
  3. ๋„คํŠธ์›Œํฌ -> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์˜ ๋‹ค์ธต ๋ฐฉ์–ด ๊ตฌ์กฐ๋กœ ์•ˆ์ •์„ฑ ํ™•๋ณด

๊ฒฐ๋ก 

์ด๋ฒˆ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ํฌ๋กค๋Ÿฌ๊ฐ€ ๋‹จ์ˆœํžˆ HTML ๋งํฌ๋งŒ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š๊ณ  JavaScript ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜์—ฌ URL์„ ์ถ”์ถœํ•œ๋‹ค๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฒ„ํ‹ฐ์ปฌ๋‚ด ๋ฌธ์ œ๋กœ๋งŒ ์น˜๋ถ€ํ•˜์ง€ ์•Š๊ณ , ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ๊นŒ์ง€ ์—ฌ๋Ÿฌ ๋ฐฉ์–ด์„ ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์šด์˜ํ™˜๊ฒฝ์—์„œ๋Š” ํ›จ์”ฌ ์•ˆ์ •์ ์ธ ์ ‘๊ทผ์ด๋ผ๋Š” ์ ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

  1. Bing Webmaster Guidelines - Bing ํฌ๋กค๋Ÿฌ ๋™์ž‘ ๋ฐฉ์‹
  2. bingbot Series: JavaScript, Dynamic Rendering, and Cloaking. Oh My! - Microsoft Bing Blogs
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€