๐คทโ๏ธ User-Agent๋?
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํต์ ์ ํ ๋ ๋ด๊ฐ ๋๊ตฌ์ธ์ง ์๋ณํ๊ธฐ ์ํด HTTP ์์ฒญ ํค๋์ ๋ค์ํ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
์ด ์ ๋ณด๋ ์์๋ก ์์ ์ด ๋ ์ ์๊ณ ๋ณดํต ์ด์ํ ์์ฒญ์ด๋ HTTP ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ฌ์ฉ์ ์ ๋ณด์ ํ๊ฒฝ์ ์์๋ณด๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.
ํฌ๋กฌ(Chrome) ๋ธ๋ผ์ฐ์ ์ User-Agent๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.110 Safari/537.36
User-Agent์ ๊ตฌ์กฐ
- ํ๋ซํผ ์ ๋ณด: ์ด์์ฒด์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฅผ ๋ค์ด Windows NT 10.0, Macintosh, Linux ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋ณด: ๋ธ๋ผ์ฐ์ ์ ์ข ๋ฅ์ ๋ฒ์ ์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด Chrome/114.0.5735.110์ ๊ฐ์ ํํ๋ก ๋ํ๋ฉ๋๋ค.
- ๋ ๋๋ง ์์ง ์ ๋ณด: HTML์ ๋ ๋๋งํ๋ ์์ง์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋๋ค. AppleWebKit ๋๋ Gecko ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๊ฐ๊ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅธ ๋ฐฉ์์ User-Agent ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ์ ์ฒด์ ์ธ ๊ฐ๋ ์ ๋๊ฐ์ต๋๋ค.
๊ฐ๊ฐ ๋ธ๋ผ์ฐ์ ์ User-Agent ๊ตฌ์กฐ ๋ฌธ์
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/User-Agent
๐คทโ๏ธ User-Agent ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- User-Agent ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ:
- JavaScript๋ Python ๋ฑ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ User-Agent ํ์ฑ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด User-Agent ๋ฌธ์์ด์ ํ์ฑ ํ์ฌ ์ด์์ฒด์ , ๋ธ๋ผ์ฐ์ ์ข ๋ฅ, ๋ฒ์ ๋ฑ์ ์ ๋ณด๋ฅผ ์์ฝ๊ฒ ์ป์ด์ฌ ์ ์์ต๋๋ค.
- API ๊ฐ๋ฐ ์ User-Agent ์ฒดํฌ:
- API์ ์ ๊ทผํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๋ถ๋ฅํ๊ฑฐ๋ ๊ด๋ฆฌํ ๋ User-Agent๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ฐ์ผ ์ฑ, ์น ๋ธ๋ผ์ฐ์ , ๊ธฐํ ์๋ฒ ๊ฐ ํต์ ๋ฑ ์์ฒญ์ ์ถ์ฒ๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ํ์ง ์์ ํด๋ผ์ด์ธํธ์ ์ ๊ทผ์ ์ฐจ๋จํ๊ฑฐ๋ ์ ํํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ ํ
์คํธ:
- ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๋์ํ๋์ง ํ ์คํธํ๋ ๊ฒฝ์ฐ, User-Agent ์คํธํ์ ํตํด ํ๊ฒฝ์ ๋ณ๊ฒฝํ๋ฉฐ ํ ์คํธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ํ์ ํ ์ ์์ต๋๋ค.
User-Agent ์กฐ์ํด์ ์ค์ ์ฌ์ฉ์์ฒ๋ผ ์์ฒญ์ ๋ณด๋ผ์์์ด์ User-Agent ์ ๋ณด๋ฅผ 100% ์ ๋ขฐํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ User-Agent ์ฌ์ฉ๋ฒ
const userAgent = navigator.userAgent;
navigator.userAgent๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก ์ ๋ฌํ๋ User-Agent ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํน์ ๋ธ๋ผ์ฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ
if (userAgent.indexOf("Chrome") > -1) {
console.log("Chrome ๋ธ๋ผ์ฐ์ ์์ ์คํ ์ค์
๋๋ค.");
} else if (userAgent.indexOf("Firefox") > -1) {
console.log("Firefox ๋ธ๋ผ์ฐ์ ์์ ์คํ ์ค์
๋๋ค.");
} else if (userAgent.indexOf("Safari") > -1) {
console.log("Safari ๋ธ๋ผ์ฐ์ ์์ ์คํ ์ค์
๋๋ค.");
} else {
console.log("์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์
๋๋ค.");
}
๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค ํ์ธํ๋ ๋ฐฉ๋ฒ
const userAgent = navigator.userAgent;
if (/Mobi|Android|iPhone|iPad/i.test(userAgent)) {
console.log("๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์คํ ์ค์
๋๋ค.");
} else {
console.log("๋ฐ์คํฌํ ๊ธฐ๊ธฐ์์ ์คํ ์ค์
๋๋ค.");
}
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก User-Agent ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค
์ฌ์ ๋งค์ถ์ ๋์ด๋ ๋๋ฉํ์ด์ง ์์๋ณด๊ธฐ
https://www.issue-economy.com/post/%EB%9E%9C%EB%94%A9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%80
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/247
https://cometruedream.tistory.com/243
https://cometruedream.tistory.com/242
https://cometruedream.tistory.com/241
https://cometruedream.tistory.com/244