๋ฒ์ ๊ณ ์ค๋ฝ ํฐ์ผ ํ๊ณ ๋ง์ง๋ง ์๋ฆฌ์ฆ์ ๋๋ค. ๋ถ๋ช ํ '์ด๊ฑด ์ ์ด๋์ผ์ง' ํ๋ค๊ฐ ๊น๋จน์๊ฒ ์์ํ ๋ฐ. (์ ์ ๊ธฐ์ ๋ธ๋ก๊ทธ๊ฐ ์ผ๊ธฐ์ฅ์ฒ๋ผ ์ฐ์ด๋๊ฒ ๊ฐ์ง๋ง) ์์ฃผ ๋ฉ์ง ํ๋ก์ ํธ์ ๊ฑธ๋ง๋ ์์ฃผ์์ฃผ ๋ฉ์ง ๊ณต์ฐ์ด์์ต๋๋ค. ์์ง๋ ์ฌ์ด์ด ๊ฐ์์ง ์๋๊ตฐ์. ํ. ๊ทธ๋ผ ์์ํด๋ณด๊ฒ ์ต๋๋ค.
๋๋ฉํ์ด์ง
ํ๋ฒ์ด ์ด๋ ต์ง, ๋๋ฒ์ ๊ทธ๋๋ ํ ๋งํ๋ค. 3์๊ณต์ฐ์ด๋ผ๋ ์์ฃผ ์ ํฉํ ๋ ํผ๋ฐ์ค๊ฐ ์์๊ธฐ ๋๋ฌธ์.
์ด์ ๊ณผ ํ์ด์ง ๊ตฌ์ฑ์์ ํฐ ์ฐจ์ด๋ ์๋ค. ๋์ ์ ์ฒด์ ์ผ๋ก ๋คํฌ๋ชจ๋๋ฅผ ์น ๊ฑท์ด๋์. ๊ฒ์ ๋ฐฐ๊ฒฝ์ ์ฐ๋๊น ๋ค๋ฅธ ์๋ค์ ์ฌ์ฉํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ต๋ค!! ๋์์ธ์ด ์ ์ผ ํ๋ค์ด. ๋ค๋ฅธ ์ด๋ ํ์ด์ง๋ณด๋ค ์ ์ผ ์์ฑ๋๊ฐ ์ค์ํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋ํ ์ผ ํ๋ํ๋ ์ฑ๊ธฐ๋๊ฒ ๊ฝค ์คํธ๋ ์ค์๋ค. ๋๋ถ์ ๊ฒฐ๊ณผ๋ ํจ์ฌ ์ด์๊ฒ ๋์จ ๊ฒ ๊ฐ์ ์ข๋ค. ํนํ ๋ฐ์ํ์ด ๊ธฐ๊น๋๊ฒ ์ ๋ฝํ์ ๊ธฐ๋ถ์ด ์ข์.
์ ์ผ ์ ๊ฒฝ ์ผ๋ ๋ถ๋ถ์ ์คํฌ๋กค ์์น์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์ ์ด์๋ค. ์๋จ๋ฐ๊ฐ ์คํฌ๋กค์ ์กฐ๊ธ ๋ด๋ ธ์ ๋๋ถํฐ ๋ฐฐ๊ฒฝ์ด ํ์๊ฒ ๋๋๋ก, ์ค๋ฅธ์ชฝ ํ๋จ ํ๋กํ ๋ฒํผ์ ํ๋ฉด์ด ์ ์ผ ์์ ์๋์ ์์ ๋ ์ฌ๋ผ์ง๋๋ก.
์ฒ์์๋ ํ์ด์ง ์ปดํฌ๋ํธ์์ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฐ์ window.scrollY
๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค state์ ๋ณ๊ฒฝํ๋๋ก ํ์๋ค. state๊ฐ ๋ฐ๋๋๋ง๋ค ์ ์ฒด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ฉด์ ์ ๋๋ฉ์ด์
์ด ๊ณ์ ์ฒ์๋ถํฐ ์คํ๋๋ ์ฐธ์ฌ๊ฐ ์์๋ค.
๊ทธ๋์ ์คํฌ๋กค ๋์ด๋ฅผ ๋ฐ์์ค๋ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ง๋ค์ด๋๊ณ , ํ์ํ ์ปดํฌ๋ํธ์์๋ง ์ฌ๋ ๋๋ง์ด ๋๋๋ก ๋ฐ๊พธ๋ ํด๊ฒฐ๋์๋ค.
useScroll.tsx
import { throttle } from 'lodash';
import { useEffect, useState } from 'react';
const useScroll = () => {
const [scrollY, setScrollY] = useState<number>(0);
const onScroll = throttle(() => {
setScrollY(window.scrollY);
}, 100);
useEffect(() => {
window.addEventListener('scroll', onScroll);
return () => window.removeEventListener('scroll', onScroll);
}, []);
return { scrollY };
};
export default useScroll;
๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค
์ ์ฒด ์ฌ์ฉ์๊ฐ ๋ช๋ช ์ธ์ง, ์กฐํ์๊ฐ ์ผ๋ง๋ ๋๋์ง ๋ฑ์ ๋ณด๊ณ ์ถ์ด์ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค๋ ๋ฌ์๋ณด์๋ค.
react-ga
ํจํค์ง๋ฅผ ์ค์นํด ์ฌ์ฉํ๋ค.
useGAPageTraking.tsx
const TRACKING_ID = process.env.REACT_APP_GA_TRACKING_ID!;
const useGAPageTracking = () => {
const location = useLocation();
const [initialized, setInitialized] = useState(false);
/* localhost๋ ์ธ์ง ๋ชปํ๊ฒ */
useEffect(() => {
if (!window.location.href.includes('localhost')) {
ReactGA.initialize(TRACKING_ID);
}
setInitialized(true);
}, []);
useEffect(() => {
if (initialized) {
ReactGA.pageview(location.pathname + location.search);
}
}, [initialized, location]);
// ๊ฐ๋ฐ์ฉ
/* useEffect(() => {
ReactGA.initialize(TRACKING_ID);
ReactGA.pageview(location.pathname + location.search);
}, [location]); */
};
export default useGAPageTracking;
์ ํจ์๋ฅผ App.tsx
์ ๊ฐ์ ธ์ ์คํํ๋ค.
๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ค์ ์ ๊ฒ์ํ๋ฉด ๋ญ ์ ๋์ด. ์ ๋๋ฆฌํฑ์ค4๊ฐ ์๋๋ผ '์ ๋๋ฒ์ค ์ ๋๋ฆฌํฑ์ค ์์ฑ๋ง ๋ง๋ค๊ธฐ'๋ฅผ ์ ํํ๋๊ฒ ํฌ์ธํธ. react-ga
์์ ๊ทธ๊ฑธ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ด๋
7์๋ถํด ์ฌ์ฉ ๋ชปํ๋ค๊ณ ํ๋.. ์๋ก์ด ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ ๋๋ด
์๋ค.
๋ณธ์ธ์ ํฐ์ผ QR์ฝ๋ ํ์ด์ง๋ฅผ ๋ฌด๋ ค 22๋ฒ์ด๋ ๋ค์ด๊ฐ ๋ถ์ด ์๊ธธ๋ ํ์ธํด๋ดค๋๋ 22ํ๋ฒ ์น๊ตฌ์์. ๊ดํ ๋ฟ๋ฏํ๋ค. ์์ํก ํ์ด์ง์ ์๊ฐ๋ณด๋ค ๋ทฐ๊ฐ ์ ์ด์ ์์ฝ๋ค. ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์๋ ๋ค์ด๊ฐ์ ๋ณผ ์ ์๋๋ก ํ๋ฉด ์ด๋ ์๊น ํ๋ ์์ฌ์์ด ์๋ค.
๋ฐ์นญ ์ QA ์๊ฐ
๋ชจ๋ ๊ฐ๋ฐ์ด ๋๋๊ณ ์๋งค์คํ ์ผ์ผ ์ ์ ํ์๋ค์ ๋ชจ๋ ๋ชจ์์ ๋์๊ฐ๋์ QAํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ๋ฑ ํค์ฆ์์ ๋ณ๊ฐ์ ๋ ธ์ ํ์ด์ง๋ฅผ ํตํด์ ๊ด๋ฆฌํ์ง๋ง, ์ด๋ฒ์ ๊นํ๋ธ์์ ์ด์๋ฅผ ํ์ ์งํํ๋ค. ๊ทธ๋งํผ์ ๋ณผ๋ฅจ๋ ์๋๊ณ QA์ ๋์ํ ์ ์๋ ์ธ์์ด ๋์ ๋ค๋ฅธ ์น๊ตฌ ๋๋ช ๋ฐ์ ์์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ด์๋ก ๊ด๋ฆฌํ๋๊ฒ ์ ๋นํ๋ค๋ ์๊ฐ์ด์๋ค. ํด๋น ์ด์ ๋งํฌ๋ก ๊ฐ์ ํ์ธํด ๋ณผ ์ ์๋ค.
QAํ ๋๋ง๋ค ๋๋ผ๋๊ฑด๋ฐ, ํญ์ ์๊ฐ๋ณด๋ค ๋ง์ด ๋์จ๋ค. ๋ณดํต ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ๋ฌธ์ , ๊ธฐ๊ธฐ๋ณ ํ๋ฉด์ ๋ฐ๋ฅธ ๋ฌธ์ ๊ฐ ๋ง์๋ค. ๋๋ ์ด๋ค ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ฉด์ ๋์ค๋ ๋๋ค๋ฅธ ์ค๋ฅ๋ค์ธ ๊ฒฝ์ฐ๋ ์๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ๋์ ํ๋ค๋ฉด ๋ค๋ฅธ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋์ค๋ ๊ฒฝ์ฐ๋ฅผ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ธ์ ๊ฐ ๊ผญ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋์ ํด๋ณด๊ณ ์ถ๋ค!
์๋น์ค ์๊ฐ ์ด๋ฏธ์ง
๋ฆฌ๋๋ฏธ์ ์๊ฐ ์ด๋ฏธ์ง์ ์ ๋ฒ๋ณด๋ค ๋ ์ด์ ๋๋ค. ์ฒ์ ํด๋ณด๋๊ฑฐ์์ง๋ง ๊ฝค ์ฌ๋ฐ๋ ์์ ์ด์์. ๋๋ถ์ธ์ง ์ํ ํซ๊ฒ ๊ฐ๋ค. ๊ฐ์ฌํฉ๋๋ค.
๋๋ฆ ๋น์ ๊ณต์์ ์ผ๋งค๋ค ์ฌ์ด์์ ์ ๊ฟ๋ฆฐ๋ค๊ณ (...) ์๋ฉ ์ด๊นจ ์ฌ๋ผ๊ฐ ์ํ์๋ค๊ฐ, ๋ฑ ํค์ฆ์์ ์ฐ ๋์์ด๋๋ค์ด ํด๋์๊ฑฐ ๋ณด๊ณ ๋ค์ ์๋๋๋ก ๋์์๋ค. ๋ถ๋ช ํ ๋น์ทํ๊ฒ ํ๋๋ฐ ๋๊ปด์ง๋ ํ๋ฆฌํฐ๋ ํ๋๊ณผ ๋ ์ฐจ์ด๋๋ผ. ๋ํ ์ผ์ ์ฐจ์ด์ธ๊ฐ ์ถ๋ค. ๋์์ธ์ด ์ ์ผ ์ด๋ ต๋ค.
ํ๋น์ฝ๋ ์ด์์ง. ์ ์ฒด์ ์ผ๋ก ๋ฐ๋ ์์ ์ปจ์ ์ ๋ง์ถฐ์ ๋ฐ๊ฟ๋ณด์๋ค. ์์ฃผ ๋ง์ ๋ค์ด์.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํฐ์ผ ์๋งค ์๋น์ค๋ ๊ณต์ฐ ์์ผ ๋ชจ๋ ๋ฌธ์ ์์ด ์ ์ฌ์ฉ๋์๋ค. 21,22ํ๋ฒ ํ๋๊ธฐ์ ์น๊ตฌ๋ค์ด ๊ณ ์์ ๋ง์ด ํด์ฃผ์์. ์ ์ฐํ๊ณ ํต๊ณ๋ด๋๋ฐ ๊ทธ๋๋ ํฐ ๋์์ด ๋์๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค. ์ด ํ๋ก์ ํธ๋ ๋งค ๊ณต์ฐ๋ง๋ค ์ง์์ ์ผ๋ก ์ด์ด์ก์ผ๋ฉด ํ๋ ๋ฐ๋์ด ์์ง๋ง.. ํ์์๋ฅผ ๋นจ๋ฆฌ ์ฐพ์์ผ๊ฒ ๋ค!!