๋ด ๋ธ๋ก๊ทธ ์๋ ๋น ๋ฅด๊ฒ ํ๋ ๋ฒ: ๊ธฐ๋ฅ ์ถ๊ฐํด๋ ๋๋ ค์ง์ง ์๋ ๋ฐฉ๋ฒ
๋ธ๋ก๊ทธ ์๋ ์ต์ ํ, ๊ธฐ๋ฅ ์ถ๊ฐ ์ฑ๋ฅ ์ํฅ: ์ฌ์ฉ์๊ฐ ์ ํํ ๊ธฐ๋ฅ๋ง ๋ก๋ฉํ๋ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ์ ๋ต์ผ๋ก ๋ธ๋ก๊ทธ ์ฑ๋ฅ๊ณผ SEO ์ ์๋ฅผ ๋์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ.
์ค๋๋ ๋ธ๋ก๊ทธ๋ ๋จ์ํ ํ ์คํธ์ ์ด๋ฏธ์ง๋ผ๋ ์ ์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ํ๋ซํผ์ ์ญํ ์ ๋์ด์ฐ์ต๋๋ค. ์ฌ์ฉ์์ ์ฐธ์ฌ๋ฅผ ์ ๋ํ๊ณ ๋ง์ถคํ๋ ๊ฒฝํ์ ์ ๊ณตํ๋ '์น ๋ฉํฐ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ '์ ๊ฐ๊น๊ฒ ์งํํ๊ณ ์์ต๋๋ค.
๋ณธ ๊ธ์ ์ฌ์ฉ์ ์ ํ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์์คํ (Feature Toggle and Lazy Loading)์ ์ค์ฌ์ผ๋ก, ์ด๋ฌํ ๋์ ๊ธฐ๋ฅ ๋ก๋ฉ ๋ฐฉ์์ด ์น ์ฑ๋ฅ(Performance), ๊ฒ์ ์์ง ์ต์ ํ(SEO), ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๋ฏธ์น๋ ์ํฅ์ ๋ถ์ํฉ๋๋ค.
๋ํ, ์ฝํ ์ธ ๋ง ์ ๊ณตํ๋ ์ ํต์ ์ธ ๋ธ๋ก๊ทธ์ ํ๊ณ๋ฅผ ๋ฒ์ด๋ ๋ค๊ธฐ๋ฅ ๋ฉํฐ๋ฏธ๋์ด ๋ธ๋ก๊ทธ๋ก ์งํํด์ผ ํ๋ ํ์ฐ์ ์ธ ์ด์ ์ ๊ทธ ๋ฏธ๋ ๋ฐฉํฅ์ ์ ์ํฉ๋๋ค.
ํ๋์ ๋ธ๋ก๊ทธ๋ ๋ ์ด์ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋ ์ ๋ณด์ ์งํฉ์ฒด๊ฐ ์๋๋๋ค. ๋ ์๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ํ์ฑํํ ์ ์๋ ๋ฅ๋์ ์ธ ํ๊ฒฝ์ ์ ๊ณตํจ์ผ๋ก์จ, ๋ถํ์ํ ๋ฆฌ์์ค ๋ก๋ฉ์ ์ต์ํํ๊ณ ํต์ฌ ์ฝํ ์ธ ์ ๋ํ ์ ๊ทผ์ฑ์ ํฅ์์์ผ์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก AI ์ฝํ ์ธ ์๋์๊ธฐ์กด ๋ธ๋ก๊ทธ๊ฐ ์์กดํ๊ณ ์ฑ์ฅํ ์ ์๋ ํต์ฌ ์ ๋ต์ ๋๋ค.
1. ์ฌ์ฉ์ ์ ํ์ ๊ธฐ๋ฅ ๋ก๋ฉ ์์คํ ์ ์๋ ์๋ฆฌ: ์ง์ฐ ๋ก๋ฉ๊ณผ ๋ธ๋ก๊ทธ ์ฑ๋ฅ
์ฐ๋ฆฌ๊ฐ ๊ตฌํํ๋ ค๊ณ ํ๋ ๋ฐฉ์์ ํต์ฌ์ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์์ ์ ์ต๋ํ ๊ฐ๋ณ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.

1.1. ์ ํต์ ์ธ ๋ธ๋ก๊ทธ ๋ก๋ฉ์ ํ๊ณ: JavaScript ๋ฌด์กฐ๊ฑด ๋ก๋(Eager Loading)
๊ธฐ์กด ๋ธ๋ก๊ทธ๋ (์: ๋ผ์ด๋ธ ๋ฐฉ์ก, SEO ๋ชจ๋ํฐ, ์ฑ๋ด, ์คํฌ๋กค ๋ฒํผ) ๋ฑ ์ถ๊ฐํด์ ๋ธ๋ก๊ทธ์ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ํด๋น ๊ธฐ๋ฅ์ ์ํ JavaScript ์ฝ๋๋ฅผ ํ์ด์ง ๋ก๋ ์ ๋ฌด์กฐ๊ฑด(Eagerly) ํจ๊ป ๋ก๋ํ์ต๋๋ค.
- ๋ฌธ์ ์ :
- ์ฌ์ฉ์๊ฐ ์ํ์ง ์๋ ๊ธฐ๋ฅ์ ์ฝ๋๊น์ง ๋ก๋ํ์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ(Loading Time)์ด ์ฆ๊ฐํฉ๋๋ค.
- CPU๊ฐ ๋ถํ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ๊ณ ์คํํ๋๋ผ ๋ฐ๋น ์ ธ ์ํธ์์ฉ๊น์ง์ ์๊ฐ(Time to Interactive, TTI)์ด ๊ธธ์ด์ง๋๋ค.
- ์ด๋ ๊ณง Core Web Vitals(CWV) ์ ์ ํ๋ฝ์ผ๋ก ์ด์ด์ง๋๋ค. ํนํ ์ด ์ฐจ๋จ ์๊ฐ(Total Blocking Time, TBT)๊ณผ ์ต๋ ์ฝํ ์ธ ๋ ๋๋ง ์๊ฐ(Largest Contentful Paint, LCP)์ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.

1.2. ์ฌ์ฉ์ ์ ํ์ ๋ก๋ฉ: ๋์ ์ํฌํธ๋ฅผ ํ์ฉํ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ์ ๋ต
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ตฌํํ ๋ฐฉ๋ฒ์ ๋์ ์ํฌํธ(Dynamic Import) ๋ฐ ์ฌ์ฉ์ ํ ๊ธ ์ํ๋ฅผ ํ์ฉํ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ด๊ธฐ ์ํ: ํ์์ ์ธ ๋ฉ์ธ ๋ก๋ ์คํฌ๋ฆฝํธ๋ง ๋ก๋๋ฉ๋๋ค.
- ์ ํ: ์ฌ์ฉ์๊ฐ '(์: SEO ๋ชจ๋ํฐ๋ฑ ๊ธฐํ ๊ธฐ๋ฅ)' ํ ๊ธ๋ก ์๋๋ฐฉ์์ ์ค์ ํฉ๋๋ค.
- ๋์ ๋ก๋: ๋ฉ์ธ ๋ก๋๋ ํด๋น ๊ธฐ๋ฅ์ URL(`data-script`)์ ์ฝ์ด์ `script` ํ๊ทธ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ์ฌ DOM์ ์ถ๊ฐํฉ๋๋ค.
- ์คํ: ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด, ๋ฉ์ธ ๋ก๋๋ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์ ์ญ์ ๋ ธ์ถํ ๊ฐ์ฒด(`data-global`, ์: `VitalsMonitor`)์ `init()` ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
- ์ข ๋ฃ: ํ ๊ธ์ '๊บผ์ง'์ผ๋ก ์ค์ ํ๋ฉด, `stop()` ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๊ณ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.

์๋ ์๋ฆฌ ์์ฝ
| ๋จ๊ณ | ์ญํ | ๊ฒฐ๊ณผ |
|---|---|---|
| ํ ๊ธ ON (ํ์ฑํ) | ๋ฉ์ธ ๋ก๋๊ฐ ์ธ๋ถ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ , ํด๋น ๋ชจ๋์ init() ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. | ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ์๋ก์ด DOM ์์(์: ์ฑ๋ด ๋ฒํผ, SEO ๋ชจ๋ํฐ DIV)๋ฅผ ํ์ด์ง์ ์ถ๊ฐํฉ๋๋ค. |
| ํ ๊ธ OFF (์ข ๋ฃ) | ๋ฉ์ธ ๋ก๋๊ฐ ํด๋น ๋ชจ๋์ stop() ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. | 1. stop() ํจ์๋ ์ค์ค๋ก ์์ฑํ๋ DOM ์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ช
์์ ์ผ๋ก ์ ๊ฑฐํฉ๋๋ค. 2. ๋ฉ์ธ ๋ก๋๊ฐ ๋์ ์ผ๋ก ์์ฑํ๋ script ํ๊ทธ ์์ฒด๋ฅผ DOM์์ ์ ๊ฑฐํฉ๋๋ค. |
์ด ๋ฐฉ์์ ํต์ฌ์ ์ฌ์ฉ์์ ๋ช ์์ ์ธ ์๋(ํ ๊ธ)์ ๋ฐ๋ผ ๋ฆฌ์์ค ๋ก๋ฉ ์์ ์ ์๋ฒฝํ๊ฒ ์ ์ดํ์ฌ, ์ด๊ธฐ ๋ก๋ฉ ์์ ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๊ทผ๋ณธ์ ์ผ๋ก ํด์ํ๋ ๋ฐ ์์ต๋๋ค.
2. ๋ธ๋ก๊ทธ ์ฑ๋ฅ(Performance) ๋ฐ SEO ๋ถ์: CWV ์ต์ ํ์ ํธ๋ ์ด๋์คํ
2.1. ์ฅ์ ๋ถ์: ์ด๊ธฐ ๋ก๋ฉ ์ต์ ํ์ Core Web Vitals ๊ฐ์
์ฌ์ฉ์ ์ ํ์ ๋ก๋ฉ์ SEO์ ํต์ฌ ์์์ธ ์น ์ฑ๋ฅ์ ์ง์ ์ ์ด๊ณ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ด๊ธฐ ๋ก๋ ์๋ ํฅ์: ๋ถํ์ํ JavaScript ํ์ผ์ด ์ด๊ธฐ ๋ก๋์์ ์ ์ธ๋๋ฏ๋ก ์ ์ก ๋ฐ์ดํธ(Transfer Bytes)๊ฐ ์ค์ด๋ญ๋๋ค. ์ด๋ ๊ณง LCP(์ต๋ ์ฝํ ์ธ ๋ ๋๋ง ์๊ฐ) ๊ฐ์ ์ผ๋ก ์ด์ด์ ธ ์ฌ์ฉ์๊ฐ ํต์ฌ ์ฝํ ์ธ ๋ฅผ ๋ ๋นจ๋ฆฌ ๋ณผ ์ ์๊ฒ ํฉ๋๋ค.
- TBT(์ด ์ฐจ๋จ ์๊ฐ) ํ๊ธฐ์ ๊ฐ์: JavaScript ์คํ์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ TBT๋ฅผ ๋์ด๋ ์ฃผ๋ฒ์ ๋๋ค. ์ง์ฐ ๋ก๋ฉ์ ์ด ๋ฌด๊ฑฐ์ด ์์ ์ ์ด๊ธฐ ๋ก๋ ํ๋ก ๋ฏธ๋ฃจ๊ธฐ ๋๋ฌธ์ TBT๊ฐ ํฌ๊ฒ ๊ฐ์ํ์ฌ ํ์ด์ง ๋ฐ์์ฑ์ด ์ฆ์ ํฅ์๋ฉ๋๋ค.
- ํจ์จ์ ์ธ ์บ์ฑ: ๋ฉ์ธ ๋ก๋ ํ์ผ์ ๋ณ๊ฒฝ๋์ง ์๋ ๋ฐ๋ฉด, ๊ฐ๋ณ ๊ธฐ๋ฅ ํ์ผ์ ํ์ํ ๋๋ง ๋ก๋๋๋ฏ๋ก, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ๋ณ ๊ธฐ๋ฅ ํ์ผ์ ์บ์ฑํ๊ธฐ ์ฉ์ดํด์ง๋๋ค.
- SEO ์์ ์์น ๊ธฐ์ฌ:Google์ CWV ์งํ๋ฅผ ์ฃผ์ ๋ญํน ์์๋ก ์ฌ์ฉํฉ๋๋ค. LCP์ TBT์ ๊ฐ์ ์ ๊ณง SEO ์ ์ ์์น์ ์๋ฏธํ๋ฉฐ, ์ด๋ ๊ฒ์ ๊ฒฐ๊ณผ์์ ๋ ๋์ ์์๋ฅผ ์ฐจ์งํ๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ (UX) ํฅ์: CWV ๊ฐ์ ์ ๊ณง ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ณด๊ณ ,๋ ๋นจ๋ฆฌ ์ํธ์์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฒ์์์ง์ ์ด๋ฌํ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ์๊ทธ๋(User Signal)์ ๋งค์ฐ ์ค์ํ๊ฒ ํ๊ฐํฉ๋๋ค.

2.2. ๋จ์ ๋ถ์: ๊ด๋ฆฌ ๋ณต์ก์ฑ ๋ฐ ๊ฒ์ Bot์ ์ ๋ณด ๋ถ๊ท ํ ๋ฌธ์
๋ชจ๋ ์ต์ ํ ๊ธฐ๋ฒ์๋ ํธ๋ ์ด๋์คํ๊ฐ ์กด์ฌํฉ๋๋ค.
- ๊ด๋ฆฌ ๋ณต์ก์ฑ ์ฆ๊ฐ: ๊ธฐ๋ฅ ๋ชจ๋ ํ๋๋น HTML ํ ๊ธ, ๋ฉ์ธ ๋ก๋ ๋ฑ๋ก, ์ธ๋ถ JS ๋ชจ๋ ํ์ผ 3๊ฐ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก, ๊ธฐ์กด์ ๋จ์ํ ์ฝ๋ ์ฝ์ ๋ฐฉ์๋ณด๋ค ์ ์ง๋ณด์ ๋ฐ ๋๋ฒ๊น ๋ณต์ก์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์ด๊ธฐ ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ง์ฐ: ํ ๊ธ์ ์ผ ํ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๋ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ๋ ์ด ์งง์ ์ง์ฐ์ด ๋ถํธํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค.
- ๊ฒ์ Bot์ ์ธ์ ๋ฌธ์ : Google Bot์ ์ต์ JavaScript๋ฅผ ์คํํ ์ ์์ง๋ง, ์ฌ์ฉ์์ '์ ํ์ ํ ๊ธ' ์ํ๋ฅผ ์ ์ฅํ๋ `localStorage`๋ฅผ ์ง์ ์คํํ์ง๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด์ด ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ ๋, ํ ๊ธ์ด ๊บผ์ง ์ํ๋ผ๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๋ก๋๋์ง ์์ Google์๊ฒ ํด๋น ๊ธฐ๋ฅ์ ์ฝ๋๋ DOM ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ์ง ๋ชปํ ์ ์์ต๋๋ค. (SEO ๊ด์ ์์ ๊ธฐ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.)
2.3. ์ ๋ณด ํ์ฅ๊ณผ ๋ค๊ธฐ๋ฅ ๋ธ๋ก๊ทธ์ SEO ์๋์ง
๋จ์ ์ ์์ํ๊ณ ์ฅ์ ์ ๊ทน๋ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. SEO ๋ชจ๋ํฐ, ์ฑ๋ด๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ ์ ๋ณด ํ์ฅ์ฑ์ ๋์ฌ ๋ธ๋ก๊ทธ์ ๊ฐ์น๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
- ๋ ์ ์ ์ง์จ(Retention Rate) ํฅ์: ์ฑ๋ด, ๋ผ์ด๋ธ ๋ฐฉ์ก ๋ฑ ๋ ์ ์ฐธ์ฌํ ๊ธฐ๋ฅ์ ํ์ด์ง์ ๋จธ๋ฌด๋ ์๊ฐ์ ๋๋ฆฌ๊ณ ์ดํ๋ฅ ์ ๋ฎ์ถฅ๋๋ค. ์ด๋ ๊ฒ์์์ง์ด ์ค์ํ๊ฒ ํ๊ฐํ๋ ์ฌ์ฉ์ ์๊ทธ๋(User Signal) ๊ฐ์ ์ ๊ธฐ์ฌํฉ๋๋ค.
- ๊ณ ์ ํ ๊ฒ์ ๊ฒฝํ ์ ๊ณต: ์น ๋ฐ์ดํ ์ ์๊ฐ ๋๊ณ , ํ ๋ธ๋ก๊ทธ์๋ ์๋ ๊ณ ์ ํ ์ํธ์์ฉ ๊ธฐ๋ฅ(์: SEO ๋ชจ๋ํฐ)์ ์ ๊ณตํ๋ ๋ธ๋ก๊ทธ๋ ๊ฒ์ ๊ฒฝํ ๋ฉด์์ ์ฐ์๋ฅผ ์ ํ๋ฉฐ ์ ์ฌ์ ์ผ๋ก ์์ ๋ณด๋์ค๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
3. ์ธ๋ถ JavaScript ๋ชจ๋ํ ์์ ๋ฐฉ๋ฒ: ์ ์ด๊ถ ํ๋ณด ๋ฐ ์์ ๊ด๋ฆฌ
ํ์ฌ ์งํํ๋ ์์ ์ ํต์ฌ์ ์ธ๋ถ JavaScript ์ฝ๋๋ฅผ ๋ฉ์ธ ๋ก๋๊ฐ ์ธ์ํ๊ณ ์ ์ดํ ์ ์๋ ํ์คํ๋ ๋ชจ๋๋ก ๋ณํํ๋ ๊ฒ์ด์์ต๋๋ค.
3.1. '์ ์ด๊ถ'์ ํ๋ณด: ๋ธ๋ก๊ทธ ์์ ์ฑ์ ์ํ ๋ชจ๋ํ
| ๊ตฌ๋ถ | ์ผ๋ฐ์ ์ธ ์ธ๋ถ ์คํฌ๋ฆฝํธ | ์ฐ๋ฆฌ์ ๋ชจ๋ํ (Loader ์์คํ ) |
|---|---|---|
| ์คํ ์์ | `script` ํ๊ทธ ์ฝ์ ์ฆ์ | ๋ฉ์ธ ๋ก๋๊ฐ `init()` ํธ์ถ ์์ |
| ์ข ๋ฃ ๋ฐฉ์ | ๊ฐ์ ์๋ก๊ณ ์นจ ํ์ | `stop()` ํธ์ถ๋ก ์์ ์ ๋ฆฌ ๋ฐ ํด์ |
| ์์ ๊ด๋ฆฌ | ์ด๋ฒคํธ/Observer ํด์ ๋ถ๊ฐ | `stop()`์ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง |
| ํต์ ์ฃผ์ฒด | ๋ธ๋ผ์ฐ์ | ๋ฉ์ธ ๋ก๋ (์ฌ์ฉ์์ ์ ํ) |
์ฐ๋ฆฌ๋ ๋ฉ์ธ ๋ก๋์๊ฒ ๊ฐ๋ณ ๊ธฐ๋ฅ์ ๋ํ ์์ ํ ์ ์ด๊ถ์ ๋ถ์ฌํ์ต๋๋ค. ์ด๋ ๋ธ๋ก๊ทธ์ ์ด์ ํจ์จ์ฑ๊ณผ ์ฑ๋ฅ ์์ ์ฑ์ ๋์ฌ์ค๋๋ค.
3.2. `init()`๊ณผ `stop()` ์ธํฐํ์ด์ค์ ๊ฐ์ (์ฝ๋ ์ค๋ช ): JavaScript ๋ชจ๋ ํ์ค
๋ชจ๋ ์ธ๋ถ ์ฝ๋๋ `window.GlobalName = (function(){...})()` ํจํด์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ `GlobalName`์ HTML์ `data-global` ๊ฐ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
[์์ 1] SEO ๋ชจ๋ํฐ (`vitals-monitor.js`) ์์ ์์ : PO(PerformanceObserver) ํด์
ํ์์ฑ: PerformanceObserver(PO)์ DOM ์์๋ฅผ ์์ฑํ๋ฏ๋ก, `stop()` ์ ๋ฐ๋์ ํด์ ๋ฐ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
| ํจ์ | ์ญํ | ํต์ฌ ์ฝ๋ (์์ ์๋ฏธ) |
|---|---|---|
| `startMonitoring()` | ๊ธฐ๋ฅ ์์ | `vitalsElement = document.createElement('div'); targetEl.appendChild(vitalsElement);` (DOM ์์ฑ) |
| `lcpObserver.observe({...}); observers.push(lcpObserver);` (PO ์์ฑ ๋ฐ ๋ฐฐ์ด์ ์ ์ฅ) | ||
| `stopMonitoring()` | ๊ธฐ๋ฅ ์ค์ง | `observers.forEach(o = o.disconnect());` (PO ํด์ - ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง) |
| `vitalsElement.parentNode.removeChild(vitalsElement); vitalsElement = null;` (DOM ์ ๊ฑฐ - ์ค๋ณต ์์ฑ ๋ฐฉ์ง) | ||
| `init()` | ๋ก๋ ์ธํฐํ์ด์ค | `startMonitoring()` ํธ์ถ |
| `stop()` | ๋ก๋ ์ธํฐํ์ด์ค | `stopMonitoring()` ํธ์ถ |
[์์ 2] ์ฑ๋ด ๊ธฐ๋ฅ (`chatbot-feature.js`) ์์ ์์ : ์ด๋ฒคํธ ํด์ ๋ฐ ๋ฆฌ์์ค ์ ๋ฆฌ
ํ์์ฑ: DOM์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๊ณ `iframe`์ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ฏ๋ก, ํด์ ์ ๋ฆฌ์์ค ์ ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
| ํจ์ | ์ญํ | ํต์ฌ ์ฝ๋ (์์ ์๋ฏธ) |
|---|---|---|
| `startChatbot()` | ๊ธฐ๋ฅ ์์ | `openBtn.addEventListener("click", openHandler);` (์ด๋ฒคํธ ๋ฑ๋ก) |
| `stopChatbot()` | ๊ธฐ๋ฅ ์ค์ง | `openBtn.removeEventListener("click", openHandler);` (์ด๋ฒคํธ ํด์ - ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง) |
| `toggleChatbot(true);` (`iframe.src = ""`๋ฅผ ํตํด ์ฑ๋ด ํ์ ๋ซ๊ธฐ ๋ฐ ๋ฆฌ์์ค ์ ๋ฆฌ) |
์ด์ฒ๋ผ `init()`์ ๋ฑ๋ก/์์ฑ์, `stop()`์ ํด์ /์ ๊ฑฐ/์ ๋ฆฌ๋ฅผ ๋ด๋นํ๋๋ก ๋ชจ๋ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ํ์คํํ์ต๋๋ค.
3.3. ๋ฉ์ธ ๋ก๋ ์คํฌ๋ฆฝํธ์ ์๋ ๋ฐฉ์ (์ฝ๋ ์ค๋ช ): ๋์ ๋ก๋ฉ ๋ฐ ์ ์ด ๋ก์ง
๋ฉ์ธ ๋ก๋ ์ฝ๋๋ ์ด ๊ธฐ๋ฅ ๋ชจ๋๋ค์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ๋์ง ์ค๋ช ํฉ๋๋ค.

- `handleToggleChange`: ํ ๊ธ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- `loadScript`: ํ ๊ธ ON ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๊ณ , ์๋ฃ๋๋ฉด `callInitWithRetry`๋ฅผ ํตํด ํด๋น ๋ชจ๋์ `init()`์ ์คํํฉ๋๋ค.
- `unloadScript`: ํ ๊ธ OFF ์ ๋จผ์ ๋ชจ๋์ `stop()`์ ์คํํ์ฌ ์์์ ์ ๋ฆฌํ ํ, ๋์ ์ผ๋ก ์ฝ์ ๋ `script` ํ๊ทธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ด ๊ตฌ์กฐ๋ ๋ชจ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ต์ํ์ ์ฝ๋๋ก, ์ต์ ์ ์ฑ๋ฅ์ ์ ์งํ๋ฉฐ ์ถ๊ฐํ ์ ์๊ฒ ๋ณด์ฅํฉ๋๋ค.
4. ๋ค๊ธฐ๋ฅ ๋ธ๋ก๊ทธ์ ์งํ์ ์ฝํ ์ธ ๋ธ๋ก๊ทธ์ ํ๊ณ: ์ ๋ณด ํ์ฅ๊ณผ ์ฌ์ฉ์ ์ ํ
4.1. ์ฝํ ์ธ ๋ธ๋ก๊ทธ์ ํ๊ณ: ์ ์ฒด๋ ๊ฒฝํ๊ณผ ๊ธฐ์ ์ ๋ถ์ฑ
์ฝํ ์ธ ๋ง ์ ๊ณตํ๋ ์ ํต์ ์ธ ๋ธ๋ก๊ทธ๋ ์ฌ์ฉ์ ์ฐธ์ฌ์ ์ ๋ณด ํ์ฅ์ด๋ผ๋ ํ๋ ์น์ ๋ ๊ฐ์ง ์ค์ํ ํธ๋ ๋๋ฅผ ๋ฐ๋ผ๊ฐ์ง ๋ชปํฉ๋๋ค.
- ์ ๋ณด ํ๋ฆ์ ์ผ๋ฐฉํฅ์ฑ: ๋ ์๋ ์ฝ๊ณ , ๋๊ธ์ ๋ฌ๊ฑฐ๋(์ ํ์ ), ๋ค๋ก ๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ ๊ฒ์ด ์ ๋ถ์ ๋๋ค.
- ๊ฒฝํ์ ํ์คํ: ๋ชจ๋ ๋ธ๋ก๊ทธ๊ฐ ๋น์ทํ ๋์์ธ๊ณผ ํฌ๋งท์ ๊ฐ์ง๋ฉด์ ๊ณ ์ ํ ๊ฐ์น(Unique Selling Proposition, USP)๋ฅผ ์ฐฝ์ถํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๊ธฐ์ ์ ๋ถ์ฑ: ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ฃ์ผ๋ ค ํ ๋๋ง๋ค ๋ธ๋ก๊ทธ ์ฑ๋ฅ ์ ํ๋ผ๋ ๋๋ ๋ง์ ๋น ์ ธ ๊ฒฐ๊ตญ ๊ธฐ๋ฅ์ ํฌ๊ธฐํ๊ฑฐ๋ ๋ธ๋ก๊ทธ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
4.2. ๋ฏธ๋ํ ๋ฉํฐ๋ฏธ๋์ด ๋ค๊ธฐ๋ฅ ๋ธ๋ก๊ทธ๋ก์ ์งํ
์ฐ๋ฆฌ๊ฐ ๊ตฌ์ถํ ์์คํ ์ ๋ธ๋ก๊ทธ๋ฅผ ๋จ์ํ ๊ธ์ ๋ด๋ ๊ทธ๋ฆ์ด ์๋๋ผ, ๋ง์ถคํ ์๋น์ค์ ํ๋ธ๋ก ๋ง๋ญ๋๋ค.
- ๋ง์ถคํ ๊ต์ก: ํน์ ์ฃผ์ ๋ฅผ ๊ณต๋ถํ๋ ๋ ์์๊ฒ๋ง ํ์ต ์ง๋ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด๋ ํด์ฆ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค.
- ๋ฅ๋์ ์ธ ์ ๋ณด ๋ถ์: SEO ๋ชจ๋ํฐ ๊ธฐ๋ฅ์ฒ๋ผ, ๋ ์ ์ค์ค๋ก ํ์ด์ง์ ์ฑ๋ฅ์ ์ ๊ฒํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ์ ๋ณด์ ๊ฐ์น๋ฅผ ๋์ ๋๋ค.
- ์ค์๊ฐ ์ํธ์์ฉ: ์ฑ๋ด์ด๋ ๋ผ์ด๋ธ ๋ฐฉ์ก ๊ธฐ๋ฅ์ ํตํด ๋ ์์ ์ด์์ ๊ฐ์ ์ค์๊ฐ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐํํฉ๋๋ค.
4.3. ์ฌ์ฉ์ ์ ํ์ ์ค์์ฑ: ๋ง์ถคํ ๊ฐ์ธํ ๊ฒฝํ ์์ฑ
์ฌ์ฉ์์๊ฒ "๋ฌด์์ ๋ณผ์ง"๋ฟ๋ง ์๋๋ผ "์ด๋ค ๊ธฐ๋ฅ์ ์ธ์ง" ์ ํํ ๊ถ๋ฆฌ๋ฅผ ์ฃผ๋ ๊ฒ์ ๊ถ๊ทน์ ๊ฐ์ธํ์ ๋๋ค.
- ๊ฒฝํ ์ ์ด๊ถ ์ ๊ณต: ๋ ์๋ ์์ ์๊ฒ ํ์ ์๋ ์ฑ๋ด ๊ธฐ๋ฅ์ ๋๊ณ ์ฑ๋ฅ์ ํ๋ณดํ๋ฉฐ, ํ์ํ SEO ๋ชจ๋ํฐ ๊ธฐ๋ฅ๋ง ์ผค ์ ์์ต๋๋ค. ์ด๋ ์น์ฌ์ดํธ์ ๋ํ ๊ธ์ ์ ์ธ ์ฌ๋ฆฌ์ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ต์ ํ: ๋ก๋ ์์คํ ์ ํ์ฅํ์ฌ, ์ด๋ค ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๊ณ ์ด๋ค ๊ธฐ๋ฅ์ด ์ธ๋ฉด๋ฐ๋์ง ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฏธ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ๋ฐฉํฅ์ฑ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
5. ์ ๋ณด ๊ฒ์ฆ ๋ฐ ์ฃผ์ ์ฌํญ: ๊ฒ์ Bot์ ์ธ์ ๋ฌธ์ ์ SEO ์ ๋ต
5.1. ์ฌ์ฉ์ ์ ํ์ ๋ก๋ฉ์ SEO ๋ถํฉ์ฑ ๋ฐ CWV ์ต์ ํ
์ด๋ฌํ ๋ฐฉ์์ผ๋ก JavaScript ์ฝ๋๋ฅผ ๋ก๋ํ๋ ๊ฒ์ SEO์ ๋งค์ฐ ๋ถํฉํ๋ฉฐ, ์ ๊ทน ๊ถ์ฅ๋๋ ์ต์ ํ ์ ๋ต์ ๋๋ค. ํนํ Core Web Vitals(CWV) ์ ์ ๊ฐ์ ์ ๊ฒฐ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ด ์ฐจ๋จ ์๊ฐ (TBT) ๊ฐ์: ๋ฌด๊ฑฐ์ด JS ๋ก๋ ๋ฐ ํ์ฑ์ ์ง์ฐ์์ผ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ ์๊ฐ์ ์ค์ ๋๋ค.
- ์ต๋ ์ฝํ ์ธ ๋ ๋๋ง ์๊ฐ (LCP) ๊ฐ์ : ๋ถํ์ํ ๋ฆฌ์์ค ๋ก๋๋ฅผ ์ด๊ธฐ ๋จ๊ณ์์ ์ ์ธํ์ฌ ํต์ฌ ์ฝํ ์ธ ๋ ๋๋ง์ ๊ฐ์ํํฉ๋๋ค.
5.2. ์ฃผ์ ์ฌํญ ๋ฐ ๋์ ๋ฐฉ์: ๊ฒ์ Bot๊ณผ ํต์ฌ ์ฝํ ์ธ
๊ฒ์ Bot์ `localStorage` ๊ฐ์ ์ฝ๊ฑฐ๋ ํ ๊ธ์ ํด๋ฆญํ์ง ์์ผ๋ฏ๋ก, ๋ค์ ์์น์ ์ง์ผ์ผ ํฉ๋๋ค.
- `localStorage` ์ธ์ ๋ถ๊ฐ: ๊ฒ์ Bot์ ์ค์ ์ฌ์ฉ์์ฒ๋ผ ๋ธ๋ผ์ฐ์ ์ `localStorage` ๊ฐ์ ์ฝ๊ฑฐ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ธฐ ์ํด ํ ๊ธ์ ํด๋ฆญํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด์ด ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ ๋, ํ ๊ธ์ด ๊บผ์ง ์ํ๋ผ๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๋ก๋๋์ง ์์ ๊ฒ์ ๋ด์๊ฒ ํด๋น ๊ธฐ๋ฅ์ ์ฝ๋๋ DOM ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ์ง ๋ชปํ ์ ์์ต๋๋ค.
- ํต์ฌ ์ฝํ ์ธ ๋ HTML์: ๋ธ๋ก๊ทธ ํฌ์คํธ์ ์ ๋ชฉ, ๋ณธ๋ฌธ, ๋ฉํ๋ฐ์ดํฐ ๋ฑ SEO์ ๊ธฐ๋ณธ์ด ๋๋ ๋ชจ๋ ํ ์คํธ ์ฝํ ์ธ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋์ ๊ด๊ณ์์ด ์ด๊ธฐ HTML์ ์กด์ฌํด์ผ ํฉ๋๋ค.
- JS๋ก ๋ก๋๋๋ ๊ธฐ๋ฅ์ '๋ถ๊ฐ์ ์ธ ์ํธ์์ฉ'์ ํ์ : SEO ๋ชจ๋ํฐ, ์ฑ๋ด, ์คํฌ๋กค ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ถ๊ฐ์ ์ธ ๋๊ตฌ์ด๋ฏ๋ก ์ง์ฐ ๋ก๋ฉ์ด ์ ํฉํฉ๋๋ค.
์ฌ์ฉ์ ์ ํ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์์คํ ์ SEO ์ต์ ํ์ ๋ฏธ๋ ์งํฅ์ ์ธ ๋ธ๋ก๊ทธ ์ค๊ณ๋ผ๋ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ์ก๋ ํต์ฌ ์๋ฃจ์ ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌํํ ๋ชจ๋ํ ๋ฐ ์ง์ฐ ๋ก๋ฉ ์ ๋ต์ ๋ธ๋ก๊ทธ์ ํต์ฌ ๊ฐ์น(๋น ๋ฅธ ๋ก๋ฉ, ์์ ์ ์ธ ์ฝํ ์ธ ์ ๊ทผ)๋ฅผ ํผ์ํ์ง ์์ผ๋ฉด์, ๋ผ์ด๋ธ, ๋ถ์, ์ํธ์์ฉ ๊ธฐ๋ฅ์ ๋ฌดํ๋๋ก ํ์ฅํ ์ ์๋ ํ ๋๋ฅผ ๋ง๋ จํ์ต๋๋ค.
๋ฏธ๋์ ๋ธ๋ก๊ทธ ์ฑ๊ณต ๋ฐฉ์ ์์ ๋จ์ํฉ๋๋ค. "๋น ๋ฅธ ๋ก๋ฉ ์๋ + ๊ฐ์ธํ๋ ๋ค๊ธฐ๋ฅ ๊ฒฝํ"์ ๋๋ค.
Q1: ๋ธ๋ก๊ทธ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ๊ฐ์?
A1: ๋ถํ์ํ JavaScript ํ์ผ์ ์ด๊ธฐ ๋ก๋์์ ์ ์ธํ๊ณ , ์ฌ์ฉ์ ์ ํ์ ๊ธฐ๋ฅ ๋ก๋ฉ(Feature Toggle + Lazy Loading)์ ํ์ฉํ๋ฉด ์ฑ๋ฅ ์ต์ ํ์ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
Q2: Lazy Loading๊ณผ Dynamic Import๋ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์?
A2: Lazy Loading์ ๊ธฐ๋ฅ์ ํ์ํ ๋๋ง ๋ก๋ํ๋ ์ ๋ต์ด๊ณ , Dynamic Import๋ JavaScript ๋ชจ๋์ ๋์ ์ผ๋ก ๊ฐ์ ธ์ ์คํํ๋ ๊ธฐ์ ์ ๋๋ค. ๋ณดํต ๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๋๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
Q3: SEO์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ๋์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋์?
A3: ๋ค, ํต์ฌ ์ฝํ ์ธ ๋ HTML์ ๊ทธ๋๋ก ์ ์งํ๊ณ , ๋ถ๊ฐ ๊ธฐ๋ฅ(์: ์ฑ๋ด, SEO ๋ชจ๋ํฐ, ์คํฌ๋กค ๋ฒํผ ๋ฑ)๋ง ๋์ ์ผ๋ก ๋ก๋ํ๋ฉด SEO ์ ์์ ์ฌ์ฉ์ ๊ฒฝํ ๋ชจ๋ ์ ์ง ๊ฐ๋ฅํฉ๋๋ค.
Q4: ํ ๊ธ์ OFF ํ๋ฉด ๋ก๋๋ ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์?
A4: ๋ฉ์ธ ๋ก๋์์ ํด๋น ๋ชจ๋์ `stop()` ํจ์๋ฅผ ํธ์ถํ์ฌ DOM ์์์ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ๊ณ , `script` ํ๊ทธ๋ DOM์์ ์ญ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์
html ํ๋จ์ ์๋ ์ฝ๋๋ฅผ ์ ์ฉํฉ๋๋ค.