๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์์ ์ํํ ์น ๊ฒฝํ์ ๋ณด์ฅํ๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ฐ๋ฐ์ ์ด์ ์ ๋ง์ถ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ : ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ฐ๋ฐ ๋ง์คํฐํ๊ธฐ
์ค๋๋ ๊ณผ ๊ฐ์ด ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์์ ์ฌ์ฉ์๋ค์ ๋งค์ฐ ๋ค์ํ ๊ธฐ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ธํฐ๋ท์ ์ ์ํฉ๋๋ค. ์ด๋ ๊ฒ ๋ค์ํ ํ๊ฒฝ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋๊ณ ๊ธฐ๋ฅ์ ์ธ ์น ๊ฒฝํ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ด ํ์ํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ํํ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐ ์์ด ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ฐ๋ฐ์ ์ค์ํ ์ญํ ์ ๋ํด ์์ธํ ์์๋ด ๋๋ค.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ด๋ ๋ฌด์์ธ๊ฐ?
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ ์น์ฌ์ดํธ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ํ ์น ๋ธ๋ผ์ฐ์ , ์ด์์ฒด์ , ๊ธฐ๊ธฐ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ๊ฒ์ฆํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ธก๋ฉด์ ํ ์คํธํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค:
- ๊ธฐ๋ฅ์ฑ: ๋ชจ๋ ๊ธฐ๋ฅ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI): ๋์์ธ์ด ์ผ๊ด๋๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ์ง ๊ฒ์ฆํฉ๋๋ค.
- ์ฑ๋ฅ: ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ๋ก๋ฉ ์๊ฐ๊ณผ ๋ฐ์์ฑ์ ์ธก์ ํฉ๋๋ค.
- ํธํ์ฑ: ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฒ์ ๋ฐ ์ด์์ฒด์ ์์ ํธํ์ฑ์ ํ์ธํฉ๋๋ค.
- ์ ๊ทผ์ฑ: WCAG ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ์ฌ ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ ํ์์ฑ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๊ฐ HTML, CSS, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๋ ๋ฐฉ์์ ์ฐจ์ด์์ ๋น๋กฏ๋ฉ๋๋ค. ์ด๋ฌํ ์ฐจ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋๋ง ๋ฐ ๋์์ ๋ถ์ผ์น๋ฅผ ์ด๋ํ์ฌ ํํธํ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ํธ์์ฉ, ๋์ ์ฝํ ์ธ , ๋ณต์กํ ๊ธฐ๋ฅ์ฑ์ ๊ตฌ๋ํ๋ ํ๋ ์น ๊ฐ๋ฐ์ ์ด์์ ๋๋ค. ๋ฐ๋ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ๋ถ๋๋ฝ๊ณ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๋นํธํ์ฑ์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ํ๋ ์ ์์ต๋๋ค:
- ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ: ์ค๋ฅ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋ ๊ฒ์ ๋ฐฉํดํ์ฌ ๊ธฐ๋ฅ ๊ณ ์ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๋ ๋๋ง ๋ฌธ์ : ์ผ๊ด์ฑ ์๋ ๋ ๋๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ด์์๊ณผ ์ธ๊ด์ ์๊ณกํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ๋ฌธ์ : ๋นํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋๋ฆฐ ๋ก๋ฉ ์๊ฐ๊ณผ ๋ถ์งํ ์ฑ๋ฅ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ๋ณด์ ์ทจ์ฝ์ : ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ์ฉ๋ ์ ์๋ ๋ณด์ ์ทจ์ฝ์ ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์๊ฐํด ๋ด ์๋ค. ๋ง์ฝ ์ผํ ์นดํธ ๊ธฐ๋ฅ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ๊ตฌํ ๋ฒ์ ์ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ์ ํธํ๋์ง ์๋๋ค๋ฉด, ์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ง์ญ์ ์ฌ์ฉ์๋ค์ ๊ตฌ๋งค๋ฅผ ์๋ฃํ ์ ์๊ฒ ๋์ด ์์ต ์์ค๊ณผ ๋ถ์ ์ ์ธ ๋ธ๋๋ ์ด๋ฏธ์ง๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ฐ๋ฐํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ํ๋ ๋ธ๋ผ์ฐ์ , ์ด์์ฒด์ , ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ์ ์ ๋ฆฌํ ์ฒด๊ณ์ ์ธ ํ์ ๋๋ค. ์ด๋ ํ ์คํ ์ ์ํ ๋ก๋๋งต ์ญํ ์ ํ๋ฉฐ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ์ ์ฌ์ ์ธ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ์์ฑ ๋จ๊ณ:
- ๋์ ๋ธ๋ผ์ฐ์ ๋ฐ ์ด์์ฒด์ ์๋ณ: ์น์ฌ์ดํธ ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ํ๊ฒ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ๋ฅผ ํ์ ํฉ๋๋ค. ์ง๋ฆฌ์ ์ง์ญ๊ณผ ์ฌ์ฉ์ ์ธ๊ตฌ ํต๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ํ ์คํธ ์ฐ์ ์์๋ฅผ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์๋น ๋ถ๋ถ์ด ์์์์ ์๋ค๋ฉด, ๋ฐ์ด๋ ๋ธ๋ผ์ฐ์ ๋ UC ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ด ํด๋น ์ง์ญ์์ ์ธ๊ธฐ ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ํฌํจํด์ผ ํ ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ๊ฒฐ์ : ์ง์ํด์ผ ํ ํน์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ์ ๊ฒฐ์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๊ณผ ํด๋น ๊ธฐ๋ฅ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๊ณ ๋ คํฉ๋๋ค. Can I use...์ ๊ฐ์ ์น์ฌ์ดํธ๋ ํน์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ํ์ธํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ์๋ฃ์ ๋๋ค.
- ๋งคํธ๋ฆญ์ค ํ ์์ฑ: ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ๋ฅผ ํ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ์ ์ด๋ก ํ๋ ํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| ๋ธ๋ผ์ฐ์ | ์ด์ ์ฒด์ | ์ง์๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ | ๋น๊ณ | |------------------|------------------|----------------------------|---------------------------------------------| | Chrome (์ต์ ) | Windows 10 | ES6+ | ์์ ์ง์ | | Firefox (์ต์ ) | macOS Catalina | ES6+ | ์์ ์ง์ | | Safari 14 | iOS 14 | ES6 | ํน์ ES6 ๊ธฐ๋ฅ์ ํด๋ฆฌํ ํ์ | | Internet Explorer 11| Windows 7 | ES5 | ๊ด๋ฒ์ํ ํด๋ฆฌํ ํ์ |
- ์ง์ ์์ค ์ ์: ๊ฐ ๋ธ๋ผ์ฐ์ ๋ฐ ์ด์์ฒด์ ์ ๋ํ ๋ช ํํ ์ง์ ์์ค์ ์ค์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค:
- ์์ ์ง์: ๋ชจ๋ ๊ธฐ๋ฅ์ด ์์๋๋ก ์๋ํฉ๋๋ค.
- ๋ถ๋ถ ์ง์: ์ผ๋ถ ๊ธฐ๋ฅ์ ํด๋ฆฌํ์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ ์ ์์ต๋๋ค.
- ๋ฏธ์ง์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๊ฑฐ๋ ์ ํ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
- ๋งคํธ๋ฆญ์ค ์ ์ง ๋ฐ ์ ๋ฐ์ดํธ: ์๋ก์ด ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ด ์ถ์๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ ๊ธฐ์ ์ผ๋ก ๋งคํธ๋ฆญ์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ ๋ฐ์ดํธ๋ ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ๋ฅผ ์ฌํ๊ฐํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ ๊ฐ์ง ๋ฐ ํด๋ฆฌํ
ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ๋ง๋ค์๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ๋นํธํ์ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ๋ต์ ๊ตฌํํด์ผ ํฉ๋๋ค. ๋ ๊ฐ์ง ํต์ฌ ๊ธฐ์ ์ ๊ธฐ๋ฅ ๊ฐ์ง์ ํด๋ฆฌํ์ ๋๋ค.
๊ธฐ๋ฅ ๊ฐ์ง
๊ธฐ๋ฅ ๊ฐ์ง๋ ํน์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ๋์ฒด ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ์ฐ์ํ๊ฒ ์ ํ(gracefully degrade)์ํฌ ์ ์์ต๋๋ค. `typeof` ์ฐ์ฐ์๋ ๊ธฐ๋ฅ ๊ฐ์ง๋ฅผ ์ํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
if (typeof window.addEventListener === 'function') {
// ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ addEventListener ์ฌ์ฉ
element.addEventListener('click', handleClick);
} else if (typeof element.attachEvent === 'function') {
// ๊ตฌํ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ์์๋ attachEvent ์ฌ์ฉ
element.attachEvent('onclick', handleClick);
} else {
// ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ๋ฐฉ์ ์ ๊ณต
element.onclick = handleClick;
}
ํด๋ฆฌํ(Polyfills)
ํด๋ฆฌํ(shim์ด๋ผ๊ณ ๋ ํจ)์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํด๋น ๊ธฐ๋ฅ์ ์ญํ ์ ์ ๊ณตํ๋ ์ฝ๋ ์กฐ๊ฐ์ ๋๋ค. ํด๋ฆฌํ์ ์ฌ์ฉํ๋ฉด ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ํฌ์ํ์ง ์๊ณ ๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, `Array.forEach` ๋ฉ์๋๋ ๊ตฌํ ๋ฒ์ ์ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ์์ ์ง์๋์ง ์์ต๋๋ค. ํด๋ฆฌํ์ ์ฌ์ฉํ์ฌ ํด๋น ๋ธ๋ผ์ฐ์ ์ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(callback, thisArg) {
if (this == null) {
throw new TypeError('this is null or not defined');
}
var T, k;
var O = Object(this);
var len = O.length >>> 0;
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
if (arguments.length > 1) {
T = thisArg;
}
k = 0;
while (k < len) {
if (k in O) {
callback.call(T, O[k], k, O);
}
k++;
}
};
}
์๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ๋ค์ด ๋ค์ํ ๊ธฐ๋ฅ์ ๋ํ ํด๋ฆฌํ์ ์ ๊ณตํฉ๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- core-js: ๊ด๋ฒ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ํฌ๊ด์ ์ธ ํด๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- polyfill.io: ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ํด๋ฆฌํ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ์ํ ํ ์คํ ์ ๋ต
ํจ๊ณผ์ ์ธ ํ ์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ ํ ์คํ ๊ณผ ์๋ํ ํ ์คํ ์ ์กฐํฉํ๋ ๊ฒ์ด ์ข ์ข ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์๋ ํ ์คํ
์๋ ํ ์คํ ์ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋์ผ๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ํ ํ ์คํธ๋ก๋ ๊ฐ์งํ์ง ๋ชปํ ์ ์๋ ์๊ฐ์ ๋ถ์ผ์น, ๊ธฐ๋ฅ์ ๋ฌธ์ , ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
์๋ ํ ์คํ ์ ์ฃผ์ ๊ณ ๋ ค ์ฌํญ:
- ๊ฐ์ ๋จธ์ : ๊ฐ์ ๋จธ์ ์ด๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ ์คํ ํ๋ซํผ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ด์์ฒด์ ์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ(์: Chrome DevTools, Firefox Developer Tools)๋ฅผ ํ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ, ๋คํธ์ํฌ ์์ฒญ, ๋ ๋๋ง ๋ฌธ์ ๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
- ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ํ ์คํ : ๋ค์ํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ํ ์คํธํ์ฌ ๋ฐ์์ฑ๊ณผ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์๋ฎฌ๋ ์ดํฐ๋ ์ค์ ๊ธฐ๊ธฐ ํ ์คํ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
์๋ํ ํ ์คํ
์๋ํ ํ ์คํ ์ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์คํํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ๊ฒ์ฆํ๋ ๊ฒ์ ๋๋ค. ์๋ํ ํ ์คํธ๋ ํ ์คํธ ์๊ฐ์ ํฌ๊ฒ ์ค์ด๊ณ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ํ ์ธ๊ธฐ ์๋ ์๋ํ ํ ์คํ ํ๋ ์์ํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Selenium: ๋ธ๋ผ์ฐ์ ์ํธ์์ฉ ์๋ํ๋ฅผ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ ๋๋ค.
- Cypress: ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ค๊ณ๋ ์ต์ ์๋ํฌ์๋ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- Playwright: Microsoft์์ ๊ฐ๋ฐํ ์ ๋ขฐ์ฑ ์๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ์๋ํฌ์๋ ํ ์คํ ์ ์ํ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ์ ๋๋ค.
- Jest: ๋จ์ ํ ์คํ ๋ฐ ํตํฉ ํ ์คํ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- Mocha: ๋ค์ํ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ฐํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค.
BrowserStack์ด๋ Sauce Labs์ ๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ํ๋ซํผ์ ์ฌ์ฉํ์ฌ ๊ด๋ฒ์ํ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์์ ํ ์คํ ์ ์๋ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ฌํ ํ๋ซํผ์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฐ ๊ธฐ๊ธฐ ํ์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ์ฌ ์์ฒด ํ ์คํธ ์ธํ๋ผ๋ฅผ ์ ์งํ ํ์๊ฐ ์๊ฒ ํด์ค๋๋ค.
์ง์์ ํตํฉ ๋ฐ ์ง์์ ์ ๋ฌ(CI/CD)
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ๋ ๊ฒ์ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ์ด ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋๋ก ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์๋ก์ด ์ฝ๋๊ฐ ์ปค๋ฐ๋๊ฑฐ๋ ๋ฐฐํฌ๋ ๋๋ง๋ค ํ ์คํธ๊ฐ ์๋์ผ๋ก ์คํ๋๋๋ก ์๋ํํ์ญ์์ค.
Jenkins, GitLab CI, CircleCI์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค. CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ์ฌ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์์ ์๋ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ฐํ์ ๋ณด๊ณ ํ๋๋ก ํ์ญ์์ค.
์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ
์ ๊ทผ์ฑ์ ์น ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค. ์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ(WCAG)์ ๋ฐ๋ผ ์ ๊ทผ์ฑ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋์ญ์์ค.
์ฃผ์ ์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ:
- ์๋งจํฑ HTML: ์๋งจํฑ HTML ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํฉ๋๋ค.
- ARIA ์์ฑ: ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ๋์ ์ฝํ ์ธ ์ ์ํธ์์ฉ ์์์ ์ ๊ทผ์ฑ์ ํฅ์์ํต๋๋ค.
- ํค๋ณด๋ ๋ด๋น๊ฒ์ด์ : ๋ชจ๋ ์ํธ์์ฉ ์์๊ฐ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์คํฌ๋ฆฐ ๋ฆฌ๋ ํธํ์ฑ: ์คํฌ๋ฆฐ ๋ฆฌ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ฌ ์๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ(i18n)์ ํ์งํ(l10n)๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค์ํ ์ธ์ด, ๋ ์ง ํ์, ์ซ์ ํ์, ํตํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์ฃผ์ i18n ๋ฐ l10n ๊ณ ๋ ค ์ฌํญ:
- ์ ๋์ฝ๋ ์ง์: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค.
- ํ์งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: i18next๋ Globalize์ ๊ฐ์ ํ์งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ์ ๊ด๋ฆฌํ๊ณ ๋ค์ํ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ํ์ํํฉ๋๋ค.
- ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(RTL) ์ง์: ์๋์ด์ ํ๋ธ๋ฆฌ์ด์ ๊ฐ์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค.
- ๋ ์ง ๋ฐ ์ซ์ ํ์ํ: ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ ์ง์ ์ซ์๋ฅผ ํ์ํํฉ๋๋ค.
์ฑ๋ฅ ์ต์ ํ
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ก๋ฉ ์๊ฐ๊ณผ ๋ฐ์์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ต์ ํํ์ญ์์ค.
์ฃผ์ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ:
- ์ฝ๋ ์ถ์ ๋ฐ ์์ถ: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ถ์ํ๊ณ ์์ถํฉ๋๋ค.
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading): ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ํ์ํ ๋๋ง ๋ก๋ํฉ๋๋ค.
- ์บ์ฑ: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์บ์ํ์ฌ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค.
- ๋ธ๋กํน ์คํฌ๋ฆฝํธ ํผํ๊ธฐ: ๋น๋๊ธฐ ๋ก๋ฉ์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ํ์ด์ง ๋ ๋๋ง์ ๋ง์ง ์๋๋ก ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ค์์ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก ์์ฝ์ ๋๋ค:
- ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๊ฐ๋ฐ: ๋์ ๋ธ๋ผ์ฐ์ , ์ด์์ฒด์ , ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ์ ์๋ณํฉ๋๋ค.
- ๊ธฐ๋ฅ ๊ฐ์ง ๋ฐ ํด๋ฆฌํ ์ฌ์ฉ: ์๋ฐ์คํฌ๋ฆฝํธ ๋นํธํ์ฑ์ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ํฌ๊ด์ ์ธ ํ ์คํ ๊ตฌํ: ์๋ ๋ฐ ์๋ํ ํ ์คํ ์ ๊ฒฐํฉํฉ๋๋ค.
- CI/CD์ ํ ์คํ ํตํฉ: ๊ฐ๋ฐ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ํ ์คํ ์ ์๋ํํฉ๋๋ค.
- ์ ๊ทผ์ฑ ๊ณ ๋ ค: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๊ตญ์ ํ ์ง์: ๋ค์ํ ์ธ์ด์ ๋ก์ผ์ผ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: ๋ก๋ฉ ์๊ฐ๊ณผ ๋ฐ์์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ์ต์ ์ ๋ณด ์ ์ง: ์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ฆฐํ ๋๊ตฌ ์ฌ์ฉ: ESLint์ ๊ฐ์ ๋ฆฐํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์คํ์ผ์ ๊ฐ์ ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค.
- ๋ชจ๋์ ์ฝ๋ ์์ฑ: ์ ์ง๋ณด์์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
๋๊ตฌ ๋ฐ ์๋ฃ
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ๋์์ด ๋๋ ์๋ง์ ๋๊ตฌ์ ์๋ฃ๊ฐ ์์ต๋๋ค:
- BrowserStack: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ํ๋ซํผ์ ๋๋ค.
- Sauce Labs: ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ ์คํ ํ๋ซํผ์ ๋๋ค.
- CrossBrowserTesting.com: ์ค์๊ฐ, ์๊ฐ์ , ์๋ํ ํ ์คํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ ์คํ ํ๋ซํผ์ ๋๋ค.
- Selenium: ์คํ์์ค ์๋ํ ํ๋ ์์ํฌ์ ๋๋ค.
- Cypress: ์ต์ ์๋ํฌ์๋ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- Playwright: Microsoft์์ ๊ฐ๋ฐํ ์ ๋ขฐ์ฑ ์๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ์๋ํฌ์๋ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- Can I use...: ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์น์ฌ์ดํธ์ ๋๋ค.
- MDN Web Docs: ์น ๊ฐ๋ฐ ๋ฌธ์๋ฅผ ์ํ ํฌ๊ด์ ์ธ ์๋ฃ์ ๋๋ค.
- core-js: ํฌ๊ด์ ์ธ ํด๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- polyfill.io: ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ํด๋ฆฌํ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋๋ค.
- ESLint: ์๋ฐ์คํฌ๋ฆฝํธ ๋ฆฐํ ๋๊ตฌ์ ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ์ ์ค์ ์ ๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํ ์ ํ๋ ์น ๊ฐ๋ฐ์์ ูุงๅฏๆ็ผบํ ๋ถ๋ถ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ฐ๋ฐํ๊ณ , ๊ธฐ๋ฅ ๊ฐ์ง์ ํด๋ฆฌํ์ ๊ตฌํํ๋ฉฐ, ํฌ๊ด์ ์ธ ํ ์คํ ์ ๋ต์ ์ฌ์ฉํจ์ผ๋ก์จ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์์ ์ฌ์ฉ์์๊ฒ ์ผ๊ด๋๊ณ ๊ธฐ๋ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ๊ณ ๋งค๋ ฅ์ ์ธ ์น ๊ฒฝํ์ ์ ๊ณตํ์ญ์์ค.
์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ, ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค, ํ ์คํ ๋๊ตฌ์ ๋ํ ์ ๋ณด๋ฅผ ์ง์์ ์ผ๋ก ์ต๋ํจ์ผ๋ก์จ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋์ ๋๋น์ํค๊ณ ์๋ ๊ฐ ํธํ์ฑ๊ณผ ์ ๊ทผ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์น์ ๋์์์ด ์งํํ๋ ํ๊ฒฝ์ด๋ฉฐ, ์ง์์ ์ธ ํ์ต์ด ์ฑ๊ณต์ ํ์์ ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค.