๐ค ๊ตฌ๊ธ๋ด / ํฌ๋กค๋ฌ ๋ฐฉ๋ฌธ ๊ฐ์งํ๊ธฐ
๊ฒ์๋ด์ด ํฌ๋กค๋ง/์คํฌ๋ฉํ ํ๋์ง ๊ฐ์งํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์์๋ ๋ํ์ ์ธ ๊ฒ์๋ด์ ๊ตฌ๊ธ๋ด์ด ์๋ค. ์ด ๊ตฌ๊ธ๋ด์ด ์ฐ๋ฆฌ์ ํฐ์คํ ๋ฆฌ๋ ์น์ฌ์ดํธ๋ฅผ ํฌ๋กค๋งํด์ผ ๊ตฌ๊ธ ๋ ธ์ถ์ ์์ผ์ค๋ค. ๋ค๋ง, ๊ตฌ๊ธ๋ด๋ ํ๋์ ์ฌ์ฉ์์ฒ๋ผ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ์กฐํํ๊ธฐ ๋๋ฌธ์ ๋ด ํํ์ด์ง๋ฅผ ์กฐํํ๊ฒ ๋ก๋ด์ธ์ง ์ฌ๋์ธ์ง ๊ตฌ๋ถํ ํ์์ฑ์ด ์๊ธธ ๋ ๊ฐ ์๋ค.
์ด๋ ๊ฐ๋จํ๊ฒ ์น๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ window ๊ฐ์ฒด์ navigator.userAgent ์ ์ ํ ์ ๋ณด๋ฅผ ๋ค์ ธ์ ์ก๊ท์์ผ๋ก ๋ด์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋์ง ํ๋ณํ๋ ์์ผ๋ก ๊ฐ์งํ ์ ์๋ค.
const detectRobot = (userAgent) => {
const robots = new RegExp([
/bot/,/spider/,/crawl/, // GENERAL TERMS
/APIs-Google/,/AdsBot/,/Googlebot/, // GOOGLE ROBOTS
/mediapartners/,/Google Favicon/,
/FeedFetcher/,/Google-Read-Aloud/,
/DuplexWeb-Google/,/googleweblight/,
/bing/,/yandex/,/baidu/,/duckduck/,/yahoo/, // OTHER ENGINES
/ecosia/,/ia_archiver/,
/facebook/,/instagram/,/pinterest/,/reddit/, // SOCIAL MEDIA
/slack/,/twitter/,/whatsapp/,/youtube/,
/semrush/, // OTHER
].map((r) => r.source).join("|"),"i"); // BUILD REGEXP + "i" FLAG
return robots.test(userAgent);
};
// ์ ์์๊ฐ ์ฌ์ฉ์์ธ์ง ๋ก๋ด์ธ์ง ์ฒดํฌ
const isrobot = detectRobot(navigator.userAgent) // true/false
isbot ๋ชจ๋
npm ์ง์์๋ isbot ์ด๋ผ๋ ๋ ธ๋ํจํค์ง๊ฐ ์กด์ฌํ๋ค. ์๋ฒ์์ ๋ง์ผ ๊ฒ์ ๋ด์ ๊ฐ์งํ๊ณ ์ถ์๋๋ ์ด ๋ ธ๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
import isbot from 'isbot'
// Nodejs HTTP
isbot(request.getHeader('User-Agent'))
// ExpressJS
isbot(req.get('user-agent'))
// Browser
isbot(navigator.userAgent)