์ ์ธ๊ณ์ ์ผ๋ก ๋๊น ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ตฌํํ์ธ์. ๊ฐ๋ ฅํ๊ณ ์ค๋ฅ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ JavaScript ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ตฌ์ถํ๊ณ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ JavaScript ํ ์คํธ ๋ง์คํฐํ๊ธฐ: ์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค
๊ธ๋ก๋ฒ ๋์งํธ ์์ฅ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ , ์ฌ๋ฌด์ค, ์ ์ธ๊ณ ์ฌ์ฉ์๋ค๊ณผ์ ์ฃผ์ ์ ์ ์ ๋๋ค. ํน์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ๋ ๋จ์ผ JavaScript ์ค๋ฅ๋ ๋ฒ ๋ฅผ๋ฆฐ์์์ ํ๋งค ์คํจ, ๋์ฟ์์์ ๋ฑ๋ก ์คํจ, ์ํ์ธ๋ฃจ์์์ ๋ถ๋ง์กฑ์ค๋ฌ์ด ์ฌ์ฉ์๋ฅผ ์๋ฏธํ ์ ์์ต๋๋ค. ์ฝ๋๊ฐ ๋ชจ๋ ๊ณณ์์ ๋์ผํ๊ฒ ์คํ๋๋ ํตํฉ ์น์ ๊ฟ์ ์ฌ์ ํ ๊ฟ์ผ ๋ฟ์ ๋๋ค. ํ์ค์ ๋ธ๋ผ์ฐ์ , ์ฅ์น ๋ฐ ์ด์ ์ฒด์ ์ ํํธํ๋ ์ํ๊ณ์ ๋๋ค. ์ฌ๊ธฐ์์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ ๋จ์ํ ์์ ์ด ์๋ ์ ๋ต์ ํ์ ์ฌํญ์ด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ๋ต์ ๋๊ท๋ชจ๋ก ๊ตฌํํ๋ ์ด์ ๋ ์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค์ ๋๋ค.
์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ ์ด ๊ฐ๋ ์ด ํ๋ ์น ๊ฐ๋ฐ์ ์ ์ค์ํ์ง, ์์ฒด ๋งคํธ๋ฆญ์ค๋ฅผ ๊ฐ๋ ํํ๊ณ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ด ์ด๋ ค์ด ์์ ์ ๊ฐ์ํ๋ ์๋ํ๋ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ์ ์ผ๋ถ๋ก ๋ณํํ ์ ์๋ ๋๊ตฌ๋ฅผ ์๋ดํฉ๋๋ค.
์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ด ํ๋ ์น์์ ์ฌ์ ํ ์ค์ํ๊ฐ
ํนํ ์ ๊ท ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ํํ ์คํด๋ "๋ธ๋ผ์ฐ์ ์ ์"์ด ๋๋ฌ๊ณ ํ๋์ ์ธ ์๊ตฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์น์ ํฌ๊ฒ ํ์คํํ๋ค๋ ๊ฒ์ ๋๋ค. ECMAScript์ ๊ฐ์ ํ์ค์ด ์์ฒญ๋ ๋ฐ์ ์ ์ด๋ฃจ์์ง๋ง ์ฌ์ ํ ์ค์ํ ์ฐจ์ด์ ์ด ์กด์ฌํฉ๋๋ค. ์ด๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๊ฒ ํฐ ์ํ ๋ถ๋ด์ ๋๋ค.
- ๋ ๋๋ง ์์ง ์ฐจ์ด: ์น์ ์ฃผ๋ก Blink(Chrome, Edge, Opera), WebKit(Safari) ๋ฐ Gecko(Firefox)์ ์ธ ๊ฐ์ง ์ฃผ์ ๋ ๋๋ง ์์ง์ผ๋ก ๊ตฌ๋๋ฉ๋๋ค. ์ด๋ค์ ๋ชจ๋ ์น ํ์ค์ ๋ฐ๋ฅด์ง๋ง ๊ณ ์ ํ ๊ตฌํ, ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ ๋ฐ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. JavaScript๋ก ๊ตฌ๋๋๋ ์ ๋๋ฉ์ด์ ์ ํ์ฑํํ๋ CSS ์์ฑ์ด Chrome์์๋ ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง Safari์์๋ ๋ฒ๊ทธ๊ฐ ์๊ฑฐ๋ ์ง์๋์ง ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์์๋ ์ ์์ต๋๋ค.
- JavaScript ์์ง์ ๋ฏธ๋ฌํ ์ฐจ์ด: ๋ง์ฐฌ๊ฐ์ง๋ก JavaScript ์์ง(Blink์ ๊ฒฝ์ฐ V8, Gecko์ ๊ฒฝ์ฐ SpiderMonkey)์ ๋ฏธ๋ฌํ ์ฑ๋ฅ ์ฐจ์ด์ ์ต์ ECMAScript ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค. ์ต์ฒจ๋จ ๊ธฐ๋ฅ์ ์์กดํ๋ ์ฝ๋๋ ์ฝ๊ฐ ์ค๋๋์์ง๋ง ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์์ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ๊ฑฐ๋ ๊ธฐ์ : ์น์ ์๋์ ์ผ๋ก ๋ชจ๋ฐ์ผ์ ๋๋ค. ์ด๋ ๋จ์ํ ๋ ์์ ํ๋ฉด์์ ํ ์คํธํ๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค. ์ด๋ ์๋นํ ๊ธ๋ก๋ฒ ์์ฅ ์ ์ ์จ์ ์ฐจ์งํ๋ Samsung Internet๊ณผ ๊ฐ์ ๋ชจ๋ฐ์ผ ์ ์ฉ ๋ธ๋ผ์ฐ์ ์ Android ๋ฐ iOS์ ๊ธฐ๋ณธ ์ฑ ๋ด WebView ๊ตฌ์ฑ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ํ๊ฒฝ์๋ ์์ฒด ์ ์ฝ ์กฐ๊ฑด, ์ฑ๋ฅ ํน์ฑ ๋ฐ ๊ณ ์ ํ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
- ๊ธ๋ก๋ฒ ์ฌ์ฉ์์๊ฒ ๋ฏธ์น๋ ์ํฅ: ๋ธ๋ผ์ฐ์ ์์ฅ ์ ์ ์จ์ ์ง์ญ๋ณ๋ก ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. Chrome์ด ๋ถ๋ฏธ์์ ์ฐ์ธํ ์ ์์ง๋ง UC Browser์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ ์ญ์ฌ์ ์ผ๋ก ์์์ ์ ์ญ์ ์์ฅ์์ ์ธ๊ธฐ๊ฐ ์์์ต๋๋ค. ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ๊ฐ๋ฐ ํ์ ๋ธ๋ผ์ฐ์ ์ ํธ๋๋ฅผ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ์ ์ฌ์ ์ฒญ์ค์ ์๋น ๋ถ๋ถ์ ์์ธ์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ฐ์ํ ์ ํ ๋ฐ ์ ์ง์ ๊ฐ์ : ํ๋ ฅ์ ์ธ ์น ๊ฐ๋ฐ์ ํต์ฌ ์์น์ ์ผ๋ถ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ์๋ํ์ง ์๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ ์๋ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ ์ด๋ฅผ ํ์ธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝํ์ด ํ๋ถํ์ง ์๋๋ผ๋ ์ฌ์ฉ์๊ฐ ์ด์ ๋ธ๋ผ์ฐ์ ์์ ํต์ฌ ์์ ์ ์๋ฃํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ ๋ฌด์์ ๋๊น?
ํต์ฌ์ ์ผ๋ก ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ ๊ทธ๋ฆฌ๋์ ๋๋ค. ํ ์คํธ ๋์(๊ธฐ๋ฅ, ์ฌ์ฉ์ ํ๋ฆ, ๊ตฌ์ฑ ์์)๊ณผ ํ ์คํธ ์์น(๋ธ๋ผ์ฐ์ /๋ฒ์ , ์ด์ ์ฒด์ , ์ฅ์น ์ ํ)๋ฅผ ๋งคํํ๊ธฐ ์ํ ๊ตฌ์ฑ๋ ํ๋ ์์ํฌ์ ๋๋ค. ๋ชจ๋ ํ ์คํธ ์ ๋ต์ ๊ธฐ๋ณธ์ ์ธ ์ง๋ฌธ์ ๋ตํฉ๋๋ค.
- ๋ฌด์์ ํ ์คํธํ๊ณ ์์ต๋๊น? (์: ์ฌ์ฉ์ ๋ก๊ทธ์ธ, ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ, ๊ฒ์ ๊ธฐ๋ฅ)
- ์ด๋์์ ํ ์คํธํ๊ณ ์์ต๋๊น? (์: macOS์ Chrome 105, iOS 16์ Safari 16, Windows 11์ Firefox)
- ์์ ๊ฒฐ๊ณผ๋ ๋ฌด์์ ๋๊น? (์: ํต๊ณผ, ์คํจ, ์๋ ค์ง ๋ฌธ์ )
์๋ ๋งคํธ๋ฆญ์ค๋ QA ์์ง๋์ด๊ฐ ํ ์คํธ ์คํ์ ์ถ์ ํ๋ ์คํ๋ ๋์ํธ์ผ ์ ์์ต๋๋ค. ์๊ท๋ชจ ํ๋ก์ ํธ์๋ ์ ์ฉํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋๋ฆฌ๊ณ ์ธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ต์ CI/CD(์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ) ํ๊ฒฝ์์๋ ์์ ํ ์ง์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ ์ด ๊ฐ๋ ์ ๊ฐ์ ธ์ ๊ฐ๋ฐ ํ์ดํ๋ผ์ธ์ ์ง์ ํตํฉํฉ๋๋ค. ์ ์ฝ๋๊ฐ ์ปค๋ฐ๋ ๋๋ง๋ค ์๋ํ๋ ํ ์คํธ ์ค์ํธ๊ฐ ๋ฏธ๋ฆฌ ์ ์๋ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น ๊ทธ๋ฆฌ๋์์ ์คํ๋์ด ์ฆ๊ฐ์ ์ด๊ณ ํฌ๊ด์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ตฌ์ถ: ํต์ฌ ๊ตฌ์ฑ ์์
ํจ๊ณผ์ ์ธ ์๋ํ๋ ๋งคํธ๋ฆญ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ผ๋ จ์ ์ ๋ต์ ๊ฒฐ์ ์ด ํ์ํฉ๋๋ค. ๋ค ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๋๋์ด ๋ณด๊ฒ ์ต๋๋ค.
1๋จ๊ณ: ๋ฒ์ ์ ์ - "๋๊ฐ" ๋ฐ "๋ฌด์์"
๋ชจ๋ ๊ฒ์ ๋ชจ๋ ๊ณณ์์ ํ ์คํธํ ์๋ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ฌํญ์ ๋ํด ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ ์ฒด ํ ์คํธ ๋ ธ๋ ฅ์ ๋ํ ํฌ์ ์์ต์ ์ ์ํ๋ฏ๋ก ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋์ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น ์ ํ:
- ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋ถ์: ์ง์ค์ ์ฃผ์ ์์ฒ์ ์์ฒด ๋ถ์์ ๋๋ค. Google Analytics, Adobe Analytics ๋๋ ๋ณด์ ํ ๋ค๋ฅธ ํ๋ซํผ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ์ฒญ์ค์ด ์ฌ์ฉํ๋ ์์ ๋ธ๋ผ์ฐ์ , ์ด์ ์ฒด์ ๋ฐ ์ฅ์น ๋ฒ์ฃผ๋ฅผ ์๋ณํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ์๋ ๊ฒฝ์ฐ ์ง์ญ์ ์ฐจ์ด์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
- ๊ธ๋ก๋ฒ ํต๊ณ ์ฐธ์กฐ: StatCounter ๋๋ Can I Use์ ๊ฐ์ ์์ค์ ๊ธ๋ก๋ฒ ํต๊ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ฐํฉ๋๋ค. ์ด๋ ์ถ์ธ๋ฅผ ํ์ ํ๊ณ ์ง์ถํ ๊ณํ์ธ ์์ฅ์์ ์ธ๊ธฐ ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๊ณ์ธตํ๋ ์์คํ
๊ตฌํ: ๊ณ์ธตํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฒ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์
๋๋ค.
- 1๋จ๊ณ: ๊ฐ์ฅ ์ค์ํ ๋ธ๋ผ์ฐ์ ์ ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋๋ค์๋ฅผ ์ฐจ์งํ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge)์ ์ต์ ๋ฒ์ ์ ๋๋ค. ์ด๋ค์ ์ ์ฒด ์๋ํ๋ ํ ์คํธ ์ค์ํธ(์๋ ํฌ ์๋, ํตํฉ, ์๊ฐ์ )๋ฅผ ๋ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ์คํจํ๋ฉด ๋ฐฐํฌ๊ฐ ์ฐจ๋จ๋์ด์ผ ํฉ๋๋ค.
- 2๋จ๊ณ: ์ค์ํ์ง๋ง ๋ ์ผ๋ฐ์ ์ธ ๋ธ๋ผ์ฐ์ ๋๋ ์ด์ ๋ฒ์ ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์ ์ด์ ์ฃผ์ ๋ฒ์ ๋๋ Samsung Internet๊ณผ ๊ฐ์ ์ค์ํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ค์ ์ค์ํ ๊ฒฝ๋ก ํ ์คํธ์ ๋ ์์ ์ค์ํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์คํจํ๋ฉด ์ฐ์ ์์๊ฐ ๋์ ํฐ์ผ์ด ์์ฑ๋ ์ ์์ง๋ง ๋ฆด๋ฆฌ์ค๋ฅผ ๋ฐ๋์ ์ฐจ๋จํ์ง๋ ์์ต๋๋ค.
- 3๋จ๊ณ: ๋ ์ผ๋ฐ์ ์ด๊ฑฐ๋ ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ชฉํ๋ ์ฐ์ํ ์ ํ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๋๋๊ณ ํต์ฌ ๊ธฐ๋ฅ์ด ์์ ํ ์์๋์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง "์ค๋ชจํฌ ํ ์คํธ"๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ค์ ์ฌ์ฉ์ ๊ฒฝ๋ก ์ ์:
๋ชจ๋ ๋จ์ผ ๊ธฐ๋ฅ์ ํ ์คํธํ๋ ค๊ณ ์๋ํ๋ ๋์ ๊ฐ์ฅ ๋ง์ ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ์ค์ํ ์ฌ์ฉ์ ์ฌ์ ์ ์ง์คํ์ญ์์ค. ์ ์ ์๊ฑฐ๋ ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ฉ์ ๋ฑ๋ก ๋ฐ ๋ก๊ทธ์ธ
- ์ ํ ๊ฒ์
- ์ ํ ์ธ๋ถ ์ ๋ณด ํ์ด์ง ๋ณด๊ธฐ
- ์ฅ๋ฐ๊ตฌ๋์ ์ ํ ์ถ๊ฐ
- ์ ์ฒด ๊ฒฐ์ ํ๋ฆ
์ด๋ฌํ ํต์ฌ ํ๋ฆ์ ๋ํ ํ ์คํธ๋ฅผ ์๋ํํจ์ผ๋ก์จ ๋น์ฆ๋์ค์ ์ค์ํ ๊ธฐ๋ฅ์ด ์ ์ฒด ํธํ์ฑ ๋งคํธ๋ฆญ์ค์์ ๊ทธ๋๋ก ์ ์ง๋๋๋ก ํฉ๋๋ค.
2๋จ๊ณ: ์๋ํ ํ๋ ์์ํฌ ์ ํ - "์ด๋ป๊ฒ"
์๋ํ ํ๋ ์์ํฌ๋ ํ ์คํธ๋ฅผ ์คํํ ์์ง์ ๋๋ค. ํ๋ JavaScript ์ํ๊ณ๋ ๊ฐ๊ฐ ๊ณ ์ ํ ์ฒ ํ๊ณผ ๊ฐ์ ์ ๊ฐ์ง ๋ช ๊ฐ์ง ํ๋ฅญํ ์ ํ์ ์ ๊ณตํฉ๋๋ค.
-
Selenium:
์ค๋ซ๋์ ์ ๊ณ ํ์ค์ด์์ต๋๋ค. W3C ํ์ค์ด๋ฉฐ ์ฌ์ค์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. ์ฑ์๋๋ ๊ด๋ํ ์ปค๋ฎค๋ํฐ์ ๊ด๋ฒ์ํ ๋ฌธ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ์ด ๋ ๋ณต์กํ ์ ์์ผ๋ฉฐ ํ ์คํธ๋ฅผ ์ ์คํ๊ฒ ์์ฑํ์ง ์์ผ๋ฉด ๋ณ๋์ฑ์ด ๋ ๋์ ์ ์์ต๋๋ค.
-
Cypress:
๊ฐ๋ฐ์ ์ค์ฌ์ ์ฌ์ธ์ ํ๋ ์์ํฌ๋ก ์์ฒญ๋ ์ธ๊ธฐ๋ฅผ ์ป์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ์คํ ๋ฃจํ์์ ์คํ๋๋ฏ๋ก ํ ์คํธ๊ฐ ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ผ ์ ์์ต๋๋ค. ๋ํํ ํ ์คํธ ๋ฌ๋๋ ์์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ญ์ฌ์ ์ผ๋ก ๊ต์ฐจ ์ถ์ฒ ๋ฐ ๋ค์ค ํญ ํ ์คํธ์ ์ ํ์ด ์์์ง๋ง ์ต๊ทผ ๋ฒ์ ์์๋ ์ด๋ฌํ ์ ํ ์ฌํญ์ ๋ง์ด ํด๊ฒฐํ์ต๋๋ค. ๊ต์ฐจ ๋ธ๋ผ์ฐ์ ์ง์์ ํ๋ ์ ํ์ ์ด์์ง๋ง ํฌ๊ฒ ํ์ฅ๋์์ต๋๋ค.
-
Playwright:
Microsoft์์ ๊ฐ๋ฐํ Playwright๋ ํ๋์ ์ด๊ณ ๊ฐ๋ ฅํ ๊ฒฝ์์์ ๋๋ค. ์ธ ๊ฐ์ง ์ฃผ์ ๋ ๋๋ง ์์ง(Chromium, Firefox, WebKit)์ ๋ชจ๋ ํ๋ฅญํ๊ฒ ์ง์ํ๋ฏ๋ก ๊ต์ฐจ ๋ธ๋ผ์ฐ์ ๋งคํธ๋ฆญ์ค์ ํ์ํ ์ ํ์ ๋๋ค. ์๋ ๋๊ธฐ, ๋คํธ์ํฌ ๊ฐ๋ก์ฑ๊ธฐ ๋ฐ ๋ณ๋ ฌ ์คํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋ ๊ฐ๋ ฅํ API๊ฐ ์์ด ๊ฐ๋ ฅํ๊ณ ๋ณ๋์ฑ์ด ์๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ถ์ฅ ์ฌํญ: ์ค๋๋ ์๋ก์ด ๊ต์ฐจ ๋ธ๋ผ์ฐ์ ํ ์คํธ ์ด๋์ ํฐ๋ธ๋ฅผ ์์ํ๋ ํ์ ๊ฒฝ์ฐ Playwright๋ ๋ฐ์ด๋ ๊ต์ฐจ ์์ง ์ํคํ ์ฒ์ ์ต์ ๊ธฐ๋ฅ ์ธํธ ๋๋ฌธ์ ์ข ์ข ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ ํ์ ๋๋ค. Cypress๋ ํนํ ๋จ์ผ ๋๋ฉ์ธ ๋ด์์ ๊ตฌ์ฑ ์์ ๋ฐ ์๋ ํฌ ์๋ ํ ์คํธ๋ฅผ ์ํด ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ฐ์ ์ํ๋ ํ์๊ฒ ํ์์ ์ธ ์ต์ ์ ๋๋ค. Selenium์ ๋ณต์กํ ์๊ตฌ ์ฌํญ์ด๋ ๋ค๊ตญ์ด ์๊ตฌ ์ฌํญ์ด ์๋ ๋๊ท๋ชจ ๊ธฐ์ ์๊ฒ ์ฌ์ ํ ๊ฐ๋ ฅํ ์ ํ์ ๋๋ค.
3๋จ๊ณ: ์คํ ํ๊ฒฝ ์ ํ - "์ด๋์์"
ํ ์คํธ์ ํ๋ ์์ํฌ๊ฐ ์์ผ๋ฉด ์คํํ ์์น๊ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ๊ฐ ๋งคํธ๋ฆญ์ค๊ฐ ์ค์ ๋ก ์ด์๋๋ ๊ณณ์ ๋๋ค.
- ๋ก์ปฌ ์คํ: ๊ฐ๋ฐ ์ค์๋ ์์ ์ ์ปดํจํฐ์์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๋น ๋ฅด๊ณ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฒด ํธํ์ฑ ๋งคํธ๋ฆญ์ค์๋ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ด ์๋๋๋ค. ๋ชจ๋ OS ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์กฐํฉ์ ๋ก์ปฌ์ ์ค์นํ ์ ์์ต๋๋ค.
- ์์ฒด ํธ์คํ ๊ทธ๋ฆฌ๋(์: Selenium Grid): ์ฌ๊ธฐ์๋ ์๋ก ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ OS๊ฐ ์ค์น๋ ์ปดํจํฐ(์ค์ ๋๋ ๊ฐ์)์ ์์ฒด ์ธํ๋ผ๋ฅผ ์ค์ ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์์ ํ ์ ์ด ๋ฐ ๋ณด์์ ์ ๊ณตํ์ง๋ง ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋งค์ฐ ๋์ต๋๋ค. ์ ๋ฐ์ดํธ, ํจ์น ๋ฐ ํ์ฅ์ฑ์ ๋ํ ์ฑ ์์ ์ฌ์ฉ์์๊ฒ ์์ต๋๋ค.
- ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๊ทธ๋ฆฌ๋(๊ถ์ฅ): ์ด๋ ํ๋ ํ์๊ฒ ์ง๋ฐฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. BrowserStack, Sauce Labs ๋ฐ LambdaTest์ ๊ฐ์ ์๋น์ค๋ ์์ฒ ๊ฐ์ ๋ธ๋ผ์ฐ์ , OS ๋ฐ ์ค์ ๋ชจ๋ฐ์ผ ์ฅ์น ์กฐํฉ์ ๋ํ ์ฆ๊ฐ์ ์ธ ์ก์ธ์ค๋ฅผ ์จ๋๋งจ๋๋ก ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.- ๋๊ท๋ชจ ํ์ฅ์ฑ: ์๋ฐฑ ๊ฐ์ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ํผ๋๋ฐฑ์ ๋ฐ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ ๋๋ค.
- ์ ์ง ๊ด๋ฆฌ ์ ๋ก: ๊ณต๊ธ์๋ ๋ชจ๋ ์ธํ๋ผ ๊ด๋ฆฌ, ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ ๋ฐ ์ฅ์น ์กฐ๋ฌ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ค์ ์ฅ์น: ์๋ฎฌ๋ ์ดํฐ๊ฐ ๋์น ์ ์๋ ์ฅ์น๋ณ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ฐ ์ค์ํ ์ค์ iPhone, Android ์ฅ์น ๋ฐ ํ๋ธ๋ฆฟ์์ ํ ์คํธํฉ๋๋ค.
- ๋๋ฒ๊น ๋๊ตฌ: ์ด๋ฌํ ํ๋ซํผ์ ๋ชจ๋ ํ ์คํธ ์คํ์ ๋ํ ๋น๋์ค, ์ฝ์ ๋ก๊ทธ, ๋คํธ์ํฌ ๋ก๊ทธ ๋ฐ ์คํฌ๋ฆฐ์ท์ ์ ๊ณตํ์ฌ ์คํจ๋ฅผ ์ฝ๊ฒ ์ง๋จํ ์ ์์ต๋๋ค.
4๋จ๊ณ: CI/CD์ ํตํฉ - ์๋ํ ์์ง
๋ง์ง๋ง์ผ๋ก ์ค์ํ ๋จ๊ณ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์๋ํ๋ ๋ณด์ด์ง ์๋ ๋ถ๋ถ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ์๋์ผ๋ก ํ ์คํธ ์คํ์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ ์ง์ ๊ฐ๋ฅํ ์ ๋ต์ด ์๋๋๋ค. CI/CD ํ๋ซํผ(์: GitHub Actions, GitLab CI, Jenkins ๋๋ CircleCI)๊ณผ์ ํตํฉ์ ํ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ํฌํ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ ์ฝ๋๋ฅผ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์ํฉ๋๋ค.
- CI/CD ํ๋ซํผ์ ์๋์ผ๋ก ์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
- ๋น๋์ ์ผ๋ถ๋ก ํ ์คํธ ์์ ์ด ์์๋ฉ๋๋ค.
- ํ ์คํธ ์์ ์ ์ฝ๋๋ฅผ ์ฒดํฌ์์ํ๊ณ ์ข ์์ฑ์ ์ค์นํ ๋ค์ ํ ์คํธ ๋ฌ๋๋ฅผ ์คํํฉ๋๋ค.
- ํ ์คํธ ๋ฌ๋๋ ์ ํํ ์คํ ํ๊ฒฝ(์: ํด๋ผ์ฐ๋ ๊ทธ๋ฆฌ๋)์ ์ฐ๊ฒฐํ๊ณ ๋ฏธ๋ฆฌ ์ ์๋ ์ ์ฒด ๋งคํธ๋ฆญ์ค์์ ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํฉ๋๋ค.
- ๊ฒฐ๊ณผ๊ฐ CI/CD ํ๋ซํผ์ผ๋ก ๋ค์ ๋ณด๊ณ ๋ฉ๋๋ค. 1๋จ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์คํจํ๋ฉด ์ฝ๋๊ฐ ๋ณํฉ๋๊ฑฐ๋ ๋ฐฐํฌ๋๋ ๊ฒ์ ์๋์ผ๋ก ์ฐจ๋จํ ์ ์์ต๋๋ค.
๋ค์์ GitHub Actions ์ํฌํ๋ก ํ์ผ์ ๋จ๊ณ๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ๊ฐ๋ ์ ์์ ๋๋ค.
- name: Run Playwright tests on Cloud Grid
env:
# Credentials for the cloud service
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx playwright test --config=playwright.ci.config.js
๊ตฌ์ฑ ํ์ผ(`playwright.ci.config.js`)์๋ ๋งคํธ๋ฆญ์ค ์ ์, ์ฆ ํ ์คํธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฐ ์ด์ ์ฒด์ ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค.
์ค์ ์: Playwright๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ํ ์คํธ ์๋ํ
์ด๋ฅผ ๋์ฑ ๊ตฌ์ฒด์ ์ผ๋ก ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ๋ก๊ทธ์ธ ์์์ ํ ์คํธํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฒด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์ค์ ์ ๋ก๋๋ค.
ํ ์คํธ ์คํฌ๋ฆฝํธ(`login.spec.js`):
const { test, expect } = require('@playwright/test');
test('should allow a user to log in with valid credentials', async ({ page }) => {
await page.goto('https://myapp.com/login');
// Fill in the credentials
await page.locator('#username').fill('testuser');
await page.locator('#password').fill('securepassword123');
// Click the login button
await page.locator('button[type="submit"]').click();
// Assert that the user is redirected to the dashboard
await expect(page).toHaveURL('https://myapp.com/dashboard');
await expect(page.locator('h1')).toHaveText('Welcome, testuser!');
});
๋ง๋ฒ์ ๋งคํธ๋ฆญ์ค๋ฅผ ์ ์ํ๋ ๊ตฌ์ฑ ํ์ผ์์ ๋ฐ์ํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ(`playwright.config.js`):
const { defineConfig, devices } = require('@playwright/test');
module.exports = defineConfig({
testDir: './tests',
timeout: 60 * 1000, // 60 seconds
reporter: 'html',
/* Configure projects for major browsers */
projects: [
{
name: 'chromium-desktop',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox-desktop',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit-desktop',
use: { ...devices['Desktop Safari'] },
},
{
name: 'mobile-chrome',
use: { ...devices['Pixel 5'] }, // Represents Chrome on Android
},
{
name: 'mobile-safari',
use: { ...devices['iPhone 13'] }, // Represents Safari on iOS
},
],
});
`npx playwright test`๋ฅผ ์คํํ๋ฉด Playwright๋ `projects` ๋ฐฐ์ด์์ ์ ์๋ ๊ฐ ํ๋ก์ ํธ์ ๋ํด ํ ๋ฒ์ฉ ๋์ผํ `login.spec.js` ํ ์คํธ๋ฅผ 5๋ฒ ์๋์ผ๋ก ์คํํฉ๋๋ค. ์ด๊ฒ์ด ์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค์ ๋ณธ์ง์ ๋๋ค. ํด๋ผ์ฐ๋ ๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋น์ค์์ ์ ๊ณตํ๋ ๋ค์ํ OS ๋ฒ์ ๋๋ ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋ํ ๊ตฌ์ฑ์ ๋ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ฒฐ๊ณผ ๋ถ์ ๋ฐ ๋ณด๊ณ : ๋ฐ์ดํฐ์์ ์กฐ์น๋ก
ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์ ํฌ์ ์ ๋ฐ์ ๋ถ๊ณผํฉ๋๋ค. ์ฑ๊ณต์ ์ธ ๋งคํธ๋ฆญ์ค๋ ๋ช ํํ๊ณ ์คํ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ค์ ์ง์ค์ ๋์๋ณด๋: CI/CD ํ๋ซํผ๊ณผ ํด๋ผ์ฐ๋ ํ ์คํธ ๊ทธ๋ฆฌ๋๋ ๊ฐ ๊ตฌ์ฑ์ ๋ํด ๊ฐ ํ ์คํธ ์คํ์ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ค์ ์ง์ค์ ๋์๋ณด๋๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๋ น์ ์ฒดํฌ ํ์ ๊ทธ๋ฆฌ๋๊ฐ ๋ชฉํ์ ๋๋ค.
- ๋๋ฒ๊น ์ ์ํ ํ๋ถํ ์ํฐํฉํธ: ํน์ ๋ธ๋ผ์ฐ์ (์: iOS์ Safari)์์ ํ ์คํธ๊ฐ ์คํจํ๋ฉด "์คํจ" ์ํ ์ด์์ด ํ์ํฉ๋๋ค. ํ ์คํธ ํ๋ซํผ์ ํ ์คํธ ์คํ, ๋ธ๋ผ์ฐ์ ์ฝ์ ๋ก๊ทธ, ๋คํธ์ํฌ HAR ํ์ผ ๋ฐ ์คํฌ๋ฆฐ์ท์ ๋น๋์ค ๋ นํ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด ์ปจํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ์ฌํํ ํ์ ์์ด ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ๋๋ฒ๊น ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์๊ฐ์ ํ๊ท ํ ์คํธ: JavaScript ๋ฒ๊ทธ๋ ์ข ์ข ์๊ฐ์ ๊ฒฐํจ์ผ๋ก ๋ํ๋ฉ๋๋ค. ์๊ฐ์ ํ๊ท ํ ์คํธ ๋๊ตฌ(์: Applitools, Percy ๋๋ Chromatic)๋ฅผ ๋งคํธ๋ฆญ์ค์ ํตํฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ํฅ์์ ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ UI์ ํฝ์ ๋จ์ ์ค๋ ์ท์ ์ฐ๊ณ ์๋ํ์ง ์์ ์๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์กฐ ํ์ํ์ฌ ๊ธฐ๋ฅ ํ ์คํธ์์ ๋์น ์ ์๋ CSS ๋ฐ ๋ ๋๋ง ๋ฒ๊ทธ๋ฅผ ํฌ์ฐฉํฉ๋๋ค.
- ๋ณ๋ ๊ด๋ฆฌ: ํ์ฐ์ ์ผ๋ก "๋ณ๋" ํ ์คํธ, ์ฆ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๋๋ก๋ ํต๊ณผํ๊ณ ๋๋ก๋ ์คํจํ๋ ํ ์คํธ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ ์คํธ ์ค์ํธ์ ๋ํ ์ ๋ขฐ๋ฅผ ๋จ์ด๋จ๋ฆฌ๋ฏ๋ก ์ด๋ฌํ ํ ์คํธ๋ฅผ ์๋ณํ๊ณ ์์ ํ๊ธฐ ์ํ ์ ๋ต์ด ์์ด์ผ ํฉ๋๋ค. ์ต์ ํ๋ ์์ํฌ์ ํ๋ซํผ์ ์ด๋ฅผ ์ํํ๋ ๋ฐ ๋์์ด ๋๋ ์๋ ์ฌ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ณ ๊ธ ์ ๋ต ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋งคํธ๋ฆญ์ค๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ๋ ๊ณ ๊ธ ์ ๋ต์ ์ฑํํ ์ ์์ต๋๋ค.
- ๋ณ๋ ฌํ: ์ด๋ ํ ์คํธ ์ค์ํธ ์๋๋ฅผ ๋์ด๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ํ ์คํธ๋ฅผ ํ๋์ฉ ์คํํ๋ ๋์ ๋ณ๋ ฌ๋ก ์คํํฉ๋๋ค. ํด๋ผ์ฐ๋ ๊ทธ๋ฆฌ๋๋ ์ด๋ฅผ ์ํด ๊ตฌ์ถ๋์ด ์์ญ ๋๋ ์๋ฐฑ ๊ฐ์ ํ ์คํธ๋ฅผ ๋์์ ์คํํ์ฌ 1์๊ฐ ํ ์คํธ ์คํ์ ๋ช ๋ถ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
- JavaScript API ๋ฐ CSS ์ฐจ์ด ์ฒ๋ฆฌ:
- ํด๋ฆฌํ: Babel ๋ฐ core-js์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ JavaScript๋ฅผ ์ด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ๊ตฌ๋ฌธ์ผ๋ก ์๋์ผ๋ก ํธ๋์คํ์ผํ๊ณ ๋๋ฝ๋ API(์: `Promise` ๋๋ `fetch`)์ ๋ํ ํด๋ฆฌํ์ ์ ๊ณตํฉ๋๋ค.
- ๊ธฐ๋ฅ ๊ฐ์ง: ๊ธฐ๋ฅ์ ํด๋ฆฌํํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐฉ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
if ('newApi' in window) { // new API ์ฌ์ฉ } else { // ๋์ฒด ์ฌ์ฉ }. - CSS ์ ๋์ฌ ๋ฐ ๋์ฒด: Autoprefixer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ CSS ๊ท์น์ ๊ณต๊ธ์ ์ฒด ์ ๋์ฌ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ์ฌ ๊ด๋ฒ์ํ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์ค๋งํธ ํ ์คํธ ์ ํ: ๋งค์ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์ปค๋ฐ์์ ์ ์ฒด ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ณ ๊ธ ๊ธฐ์ ์๋ ์ปค๋ฐ์ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ๋ฐ๋ ๋ถ๋ถ๊ณผ ๊ด๋ จ๋ ํ ์คํธ๋ง ์คํํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
๊ฒฐ๋ก : ์ด๋ง์์ ์๋ํ๋ก
๊ธ๋ก๋ฒ ์ฐ๊ฒฐ ์๋์ ์ผ๊ด๋๊ณ ๊ณ ํ์ง์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ์ฌ์น๊ฐ ์๋๋ผ ์ฑ๊ณต์ ์ํ ๊ธฐ๋ณธ์ ์ธ ์๊ตฌ ์ฌํญ์ ๋๋ค. ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ JavaScript ๋ฌธ์ ๋ ์ฌ์ํ ๋ถํธ์ด ์๋๋๋ค. ์ด๋ ์์ต๊ณผ ๋ธ๋๋ ํํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋น์ฆ๋์ค์ ์ค์ํ ๋ฒ๊ทธ์ ๋๋ค.
์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ตฌ์ถํ๋ฉด ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํธ๊ฐ ์๋์ ์ด๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๋ณ๋ชฉ ํ์์์ ์ ๋ต์ ์์ฐ์ผ๋ก ๋ณํ๋ฉ๋๋ค. ์ด๋ ์์ ๋ง ์ญํ ์ ํ์ฌ ํ์ด ํ์ ํ๊ณ ๊ธฐ๋ฅ์ ๋ฐฐํฌํ ์ ์๋๋ก ํ์ฌ ๊ฐ๋ ฅํ๊ณ ์๋ํ๋ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ์๊ฐ ์์กดํ๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด๊ฒฐ์ฑ์ ์ง์์ ์ผ๋ก ๊ฒ์ฆํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
์ค๋ ์์ํ์ญ์์ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์ค์ํ ์ฌ์ฉ์ ์ฌ์ ์ ์ ์ํ๊ณ ์ต์ ์๋ํ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๊ณ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๊ทธ๋ฆฌ๋์ ํ์ ํ์ฉํ์ญ์์ค. ์๋ํ๋ ํธํ์ฑ ๋งคํธ๋ฆญ์ค์ ํฌ์ํจ์ผ๋ก์จ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง, ์์ ์ฑ ๋ฐ ๊ธ๋ก๋ฒ ๋๋ฌ ๋ฒ์์ ํฌ์ํ๋ ๊ฒ์ ๋๋ค.