๐ eslint-plugin-jsx-a11y๋ ๋ฌด์์ธ๊ฐ?
Source: Dev.to
eslintโpluginโjsxโa11y๋?
ESLint ํ๋ฌ๊ทธ์ธ์ผ๋ก, JSX ์ฝ๋๋ฅผ ์ ์ ๋ถ์ํ์ฌ ์ ๊ทผ์ฑ ๊ท์น ์งํฉ์ ์๋ณํ๊ณ ์ ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
์ ์ค์ํ๊ฐ?
์ด ํ๋ฌ๊ทธ์ธ์ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ๋ฐฐ์ ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ์ ๊ทผ์ฑ ์ค๋ฅ๋ฅผ ์๋ฐฉํฉ๋๋ค. a11y๋ฅผ ๋ฆฐํ ํ๋ฆ์ ํตํฉํจ์ผ๋ก์จ ๋ค์์ ๋ณด์ฅํฉ๋๋ค:
- ์๋ฐฉ์ ๊ฐ๋ฐ โ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๊ฐ ๋ฌธ์ ๋ฅผ ์์ ํ๋ฏ๋ก, ๋์ค์ ๊ณ ์น๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
- ์ง์์ ์ธ ๊ต์ก โ ๊ฐ์ด๋ ์ญํ ์ ํ๋ฉฐ React/JSX ์์์ ๋ํ ์ ๊ทผ์ฑ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ๋ฅด์นฉ๋๋ค.
- ์ค์ โ WCAG(์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ)์ ๊ฐ์ ์ค์ํ ์ ๊ทผ์ฑ ์ง์นจ์ ๋ฐ๋ฅด๋๋ก ์ฝ๋๋ฅผ ๋์ต๋๋ค.
๊ฐ์งํ๋ ๋ฌธ์ ์์
imgwithoutaltโalt์์ฑ์ด ์๋ ์ด๋ฏธ์ง๊ฐ ์์ ๋ ๊ฒฝ๊ณ ํฉ๋๋ค(์คํฌ๋ฆฐ ๋ฆฌ๋์ ํ์).onClickwithoutonKeyPress/onKeyDownโonClick์ ์ฌ์ฉํ๋ ์ธํฐ๋ํฐ๋ธ ์์๊ฐ ํค๋ณด๋๋ก๋ ์๋ํ๋๋ก ํ์ธํฉ๋๋ค.- ๋ผ๋ฒจ์ด ์ฐ๊ฒฐ๋์ง ์์ ํผ ์ปจํธ๋กค โ ์
๋ ฅ ์์์
<label>(htmlFor์ฌ์ฉ)์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์๋์ง ๋ณด์ฅํฉ๋๋ค. - ARIA ์์ฑ ์ค์ฉ โ
aria-์์ฑ์ ๋ฌธ๋ฒ ๋ฐ ์ฌ์ฉ์ ๊ฒ์ฆํฉ๋๋ค. - ๋ด์ฉ์ด ๋ณด์ด์ง ์๋ ๋งํฌ (
<a>) โ ๋งํฌ์ ํ ์คํธ๋ ARIA ์ค๋ช ์ด ์๋์ง ํ์ธํฉ๋๋ค.
๋ค๋ฅธ ๋๊ตฌ์์ ๋ณด์
eslint-plugin-jsx-a11y๋ ์์ค ์ฝ๋(JSX)๋ฅผ ์ ์ ๋ถ์ํ๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ํ์ด์ง์ ์ต์ข
์ ์ผ๋ก ๋ ๋๋ง๋ HTML์ ํ
์คํธํ์ง๋ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฐํ์ ์ ๊ทผ์ฑ ํ ์คํธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค:
- reactโaxe (or @axeโcore/react) โ ์ต์ข DOM์ ๊ฐ์ฌํฉ๋๋ค.
- jestโaxe โ ๋ ๋๋ง ํ ์ ๊ทผ์ฑ ๋จ์ ํ ์คํธ์ ์ฌ์ฉํฉ๋๋ค.
์์ฝ: eslint-plugin-jsx-a11y๋ React ๊ฐ๋ฐ ๊ณผ์ ์์ ์ ๊ทผ์ฑ์ ํต์ฌ ์์๋ก ๋ง๋ค๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ๋ฐฉ์ด์ ์
๋๋ค.