๐คทโ๏ธ 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 - HTTP | MDN
์ฌ์ฉ์ ์์ด์ ํธ ์์ฒญ ํค๋๋ ์๋ฒ์ ๋คํธ์ํฌ ํผ์ด๊ฐ ์์ฒญํ๋ ์ ํ๋ฆฌ์ผ์ด์ , ์ด์์ฒด์ , ์ ์กฐ์ ์ฒด, ์ฌ์ฉ์ ์์ด์ ํธ ์์ฒญ ๋ฒ์ ์ ์๋ณํ๋ ๋ ํนํ ๋ฌธ์์ด์ ๋๋ค.
developer.mozilla.org
๐คทโ๏ธ 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
์ฌ์ ๋งค์ถ์ ๋์ด๋ ๋๋ฉํ์ด์ง๋?
๋๋ฉํ์ด์ง๋ ๋ฐฉ๋ฌธ์๊ฐ ํน์ ํ๋์ ์ทจํ๋๋ก ์ ๋ํ๋ ์นํ์ด์ง๋ก, ๋งค์ถ ์ฆ๋์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ธ์์๋ ๋งค์ถ์ ๋์ด๋ ๋๋ฉํ์ด์ง์ ์ ์, ๊ตฌ์ฑ ์์, ๊ทธ๋ฆฌ๊ณ ํจ๊ณผ์ ์ธ ์ ๋ต์ ๋
www.issue-economy.com
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/247
[React] Tailwind ํ์ค, ๋์ค, ์ธ์ค ํจ๊ณผ className ์ปค์คํ
๐คทโ๏ธ Tailwind ํ์ค, ๋์ค, ์ธ์ค ํจ๊ณผํ๋ก์ ํธ ์งํ์ค ๋ฐฐ๋ ๋งํฌ์ URL ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธธ์ด์ 3์ค ํจ๊ณผ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ์ต๋๋ค. React + Tailwind CSS ์ ํ ๋ ํ๋ก์ ํธ ์ฌ์ CSS ํ์ผ & style ํ๊ทธ๋ฅผ ์ฌ์ฉํ
cometruedream.tistory.com
https://cometruedream.tistory.com/243
NestJS Lifecycle (์๋ช ์ฃผ๊ธฐ) ๊ฐ๋
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ Nest JS ๊ฐ๋ ?Nest JS๋ Node JS ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋นํ ์ค๋ซ๋์ Express ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์๋์ ์ธ ์
cometruedream.tistory.com
https://cometruedream.tistory.com/242
๋ฆฌ์กํธ Vite Proxy ํ์ฉํ CORS ์ค๋ฅ ํด๊ฒฐ
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ํ๋ก ํธ์๋ ๋ฒ๋ค๋ฌ ๊ฐ๋ ๊ณผ webpack vs vite ๋น๊ต์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํ๊ณ ๊ธ์ ๋ณด์๋ฉด ๋ ๋ง์ ๋์์ด ๋ฉ๋๋ค^^ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํ ๋ฒ๋ค๋ฌ ๊ฐ๋ ๊ณผ webpack vs vite ๋น๊ตhttps://comet
cometruedream.tistory.com
https://cometruedream.tistory.com/241
React ํด๋๊ตฌ์กฐ FSD ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ ์ํคํ ์ฒ
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ์์ ํด๋ ๊ตฌ์กฐ, ์ค๊ณ์ ๋ํ ์ํคํ ์ฒ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋นํ ์ด๋ ต๋ค. ์ด๋ฒ ํ๋ก์ ํธ์ React FSD ํด๋๊ตฌ์กฐ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ ์์ ์ด๋ผ์ FSD ์ํคํ
cometruedream.tistory.com
https://cometruedream.tistory.com/244
์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ Prisma ๋ช ๋ น์ด ์ ๋ฆฌ
๐คทโ๏ธ Prisma ๋ช ๋ น์ด ๋ณธ๋ก ์ ์์ Prisma๋?Nest JS ํ๋ ์์ํฌ์ Prisma ORM์ ํ์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Prisma๋ Node JS ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ์์ฉ์ด ์๋๋ฉฐ Prisma + DB ์ฐ๋์ผ
cometruedream.tistory.com
[๋์ปค ์ ๋ฌธ ์๋ฆฌ์ฆ] Dockerfile ๊ฐ๋ ๋ฐ ์ฌ์ฉ๋ฒ
์ด ๊ธ์์๋ ์ ๋ฌธ์๋ฅผ ์ํ ๋์ปค ์๋ฆฌ์ฆ๋ก ๋์ปค ์ ๋ฌธ ์๋ฆฌ์ฆ - Dockerfile ๊ฐ๋ ๋ฐ ์ฌ์ฉ๋ฒ์ ๋ํด์ ์๊ฐํฉ๋๋ค. ์๋ ํ์ธ์! ITibiza ์ ๋๋ค. ์ด์ ๊ธ์์ ๋์ปค ์ด๋ฏธ์ง, ์ปจํ ์ด๋์ ๊ฐ๋ ๊ณผ ๋์ปค
itibiza.tistory.com