์ฝ๋์คํ ์ด์ธ ๋ฅผ ์๋ฃํ๊ณ 20์ผ๋์ ๊ธฐ์ ๋ฉด์ ์คํฐ๋ ์ฑ๋ฆฐ์ง๋ฅผ ์ฐธ์ฌํ๋ค!
์ด๊ฑธ ๋งค์ผํ ์ ์์๊น? ํ๋๋ฐ ๋ ํ๋ค๋ณด๋ ๊ธ๋ฐฉ 20์ผ์ด ๋ค๊ฐ๋ค๋...
๋งค์ผ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ์ด ์ฌ๋ผ์ค๋ฉด ๋ต๋ณ ์ ๋ ์ฐ์ต์ ํ๋ฉด์ ๊ฐ๋ ๋ ๋ค์ ๊ณต๋ถํ๋ ์๊ฐ์ ๊ฐ์ง ์ ์์ด์ ์ข์๋ค. ๊ทธ๋ฐ๋ฐ ์ญ์ ๊ธฐ์ ์ ๋ง๋ก ์ค๋ช ํ๋ ค๋ ๋ ์ด๋ ค์ด๊ฒ.. ^^ ๋ ์ธ์ ๊ธฐ์ ์๋ ์ ์์ง..?
20์ผ ์ฑ๋ฆฐ์ง์์ ๋ฐ์๋ ์ง๋ฌธ๊ณผ ๋ด๊ฐ ์ ์ ๋ต๋ณ๋ค์ ๋ธ๋ก๊น ํด๋ณธ๋ค.
1. ๋ฐฐ์ด, ๊ฐ์ฒด๋ฅผ const๋ก ์ ์ธํ๋๋ฐ ์์, ์์ฑ์ ์ถ๊ฐ๊ฐ๋ฅํ ์ด์
const ํค์๋๋ ์ฌ์ ์ธ๊ณผ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง const๋ก ์ ์ธํ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์, ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฌํ ๋น์ ๊ฐ๋ ์ด ์๋๋๋ค. ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ ์์ฒด๊ฐ ํ ๋น๋๋ ๊ฒ์ด ์๋๋ผ ์ฃผ์๊ฐ์ด ํ ๋น๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐฐ์ด,๊ฐ์ฒด์ ๊ฐ ์์ฒด๊ฐ ์๋ ์ฃผ์๊ฐ์ ๊ฐ๋ฆฌํต๋๋ค. ๋ฐ๋ผ์ ์ฃผ์๊ฐ์ ํตํด ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ฒด, ๋ฐฐ์ด์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
2. http ๋ฉ์์ง ๊ตฌ์กฐ
์ฐ์ HTTP๋ HTML ๋ฌธ์๋ฅผ ๊ตํํ๊ธฐ์ํด ๋ง๋ค์ด์ง ํต์ ๊ท์ฝ์ ๋ปํ๋ฉฐ, ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ HTTP ๋ฉ์์ง๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
HTTP ๋ฉ์์ง ํ์ ์ ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ์. ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๋ ์์ฒญ(Request)์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ต์ ์ฃผ๋ ์๋ต(Response)๊ฐ ์์ต๋๋ค. ์์ฒญ๊ณผ ์๋ต์ ์ ์ฌํ๊ฒ ํฌ๊ฒ 3๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ์ด ๋์ด์์ต๋๋ค.
๋จผ์ request๋ startline, headers, body๋ก ๊ตฌ์ฑ์ด ๋์ด์์ต๋๋ค. ์ฒซ๋ฒ์งธ๋ก ์คํํธ๋ผ์ธ์ ์คํ๋์ด์ผํ๋ ์์ฒญ์ธ get, post, put, delete๋ฑ์ด ๋ด๊น๋๋ค. ๋๋ฒ์งธ๋ก ํค๋์๋ request์ ๋ํ ์ถ๊ฐ์ ๋ณด๊ฐ key:valueํํ๋ก ๊ตฌ์ฑ๋์ด์๋๋ฐ, ์๋ฅผ๋ค์ด ์ปจํ ํธ ํ์ ์ด๋ผ๋์ง authorization ์ ๋ณด๊ฐ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐ๋์๋ ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ค๋๋ค. ๋ณดํต post๋ put์์ฒญ์ ๊ฒฝ์ฐ body๋ฅผ ๋ด์์ฃผ๊ณ get, delete ์์ฒญ์ ๋ฐ๋ ๋ถ๋ถ์ด ํ์ํ์ง ์์ต๋๋ค.
์์ฒญ ๋ฉ์์ง๊ตฌ์กฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ต ๋ํ ์ธ ๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ์ด ๋์ด์๋๋ฐ์, status line, headers, body๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ฒซ๋ฒ์งธ๋ก ์ํ์ค์ ์ํ์ฝ๋, ์ํํ ์คํธ๊ฐ ๋ด๊น๋๋ค. ๋๋ฒ์งธ๋ก ํค๋๋ request header์ ๋์ผํ๊ฒ ์๋ต์ ๋ํ ์ถ๊ฐ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐ๋ ๋ํ request body์ ๋์ผํ๊ฒ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ฃผ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ๋ฐ๋์ ๋ด๊ฒจ์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋ฉ๋๋ค.
3. useRef๊ฐ ํ์ํ ์ํฉ ์
useRef๋ DOM ์์๋ฅผ ์ ๊ทผ, ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ react hooks ์ ๋๋ค. ๋ํ์ ์ผ๋ก inputํ๊ทธ์ ์๋์ผ๋ก ํฌ์ปค์ค๋ฅผ ์ค๋์ฒ๋ผ ref๋ก ์ง์ ํ DOM ์์๋ฅผ ์ง์ ์ ๊ทผํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์์ querySelector๋ก ํน์ DOM ์์๋ฅผ ์ ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ๋ํ, ๋ณ์๋ฅผ ๊ด๋ฆฌํ ๋๋ useRef๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ref๋ก ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ๊ฐ์ด ์ ๋ฐ์ดํธ๊ฐ ๋๋๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋์ง ์๊ณ ์ ์ง๋๊ธฐ๋๋ฌธ์ ์คํฌ๋กค ์์น๋ผ๋์ง ํ๋ฉด์์น๋ฅผ ํ์ ํ ๋ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์์ต๋๋ค.
4. Cookie maxage, expires ์ต์
์ฟ ํค์ max-age์ expires์์ฑ์ผ๋ก ์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ ์ฟ ํค๋ permanenet cookie๋ผ๊ณ ํ๊ณ ์ค์ ๋ ์๊ฐ๋งํผ ์ ํจํฉ๋๋ค. ๋ ์์ฑ์ด ์ค์ ๋์ด์์ง ์์ผ๋ฉด ํด๋น ์ฟ ํค๋ ์ธ์ ์ด ์ข ๋ฃ๋ ๋, ์ฆ ์ ์ ๊ฐ ๋ธ๋ผ์ฐ์ ์ ํญ์ด๋ ์๋์ฐ ์ฐฝ์ ๋ซ์ ๋ ๋ง๋ฃ๋๋ ์ธ์ ์ฟ ํค๊ฐ ๋ฉ๋๋ค.
5. styled components ์ฅ์
์ฐ์ ์ปดํฌ๋ํธ ๋จ์๋ก ์คํ์ผ๋ง์ ํ๊ธฐ ๋งค์ฐ ํธํฉ๋๋ค. css in js ๊ฐ ์๋๋ผ๋ฉด ์คํ์ผ๋ง์ ํด์ผ๋๋ ํ๊ทธ์๋ ์ง์ ํด๋์ค์ด๋ฆ์ด๋ ์์ด๋์ด๋ฆ์ ๋ค ๋ฌ๊ณ ๋ ์ดํ์ ์คํ์ผ๋ง์ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ํ์ง๋ง, styled components ๋ฅผ ์ด์ฉํ๋ฉด js ์ปดํฌ๋ํธ ์ด๋ฆ์ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์์ด ํด๋์ค๋ ์์ด๋ ์ด๋ฆ์ ์ฃผ์ง ์๊ณ ๋ ์ฝ๊ฒ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ํ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ก ๋๊ฒจ์ฃผ๋ props์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๋ฒํผ์ด๋ Input๊ฐ์ ๊ณตํต ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ๋ด๋ ค๋ฐ์ props๋ฅผ ์ง์ ํด๋๋ฉด ํ๋์ ์ปดํฌ๋ํธ๋ง ๋ง๋ค์ด๋๋ฉด ์ํ๋ ์์ฑ(์๊น, ํฌ๊ธฐ ๋ฑ)์ผ๋ก ๋ค์ํ ์คํ์ผ๋ง ํ ์ ์์ด ํธ๋ฆฌํ์ต๋๋ค.
6. IPํ๋กํ ์ฝ์ ํ๊ณ
์ฐ์ ์ธํฐ๋ท ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ฐ์ดํฐ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ท์น์ด๋ผ๊ณ ํ ์ ์๋๋ฐ์. IP์ฃผ์์ ํจํท์ด๋ผ๋ ํต์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค. ํจํท์ pack + bucket์ด ํฉ์ณ์ง ๋จ์ด๋ก ํจํค์ง, ํ๋ฐฐ๋ฐ์ค๊ฐ์ ์ญํ ์ ํ๋๋ฐ์, ํ๋ฐฐ๋ฐ์ค์ฒ๋ผ ๋ณด๋ด๋ ์ฌ๋๊ณผ ๋ฐ๋ ์ฌ๋ ์ฃผ์์๊ฐ์ด ์ถ๋ฐ์ง IP์ ๋์ฐฉ์ง IP ์ ๋ณด๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ IP ํ๋กํ ์ฝ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
๊ทธ ํ๊ณ๋ก๋ ๋น์ฐ๊ฒฐ์ฑ, ๋น์ ๋ขฐ์ฑ์ด ์์ต๋๋ค. ๋น์ฐ๊ฒฐ์ฑ์ ํด๋ผ์ด์ธํธ์ธก์์๋ ์๋ฒ์ ์ํฉ์ ์ ๋ฐฉ๋ฒ์ด ์๊ธฐ๋๋ฌธ์ ํจํท์ ๋ฐ์ ์๋๊ฐ ์๊ฑฐ๋ ์๋น์ค๊ฐ ๋ถ๋ฅ์ํ์ฌ๋ ํจํท์ด ๊ทธ๋ฅ ์ ์ก๋๋ค๋ ๊ฒ์ ๋๋ค. ๋น์ ๋ขฐ์ฑ์ ํจํท์ด ์ ์ก์ด ์๋๋ค๊ฐ ์ค๊ฐ์ ์์ด์ ธ๋ ํด๋ผ์ด์ธํธ ์ธก์์๋ ์ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ๊ณผ, ํด๋ผ์ด์ธํธ๊ฐ ํจํท์ ๋๋์ด ๋ณด๋ผ ๊ฒฝ์ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด๋ ์์๋๋ก ์๋ฒ์ ๋์ฐฉํ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ์๋ค๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
7. ์์ํจ์ ๋ถ๋ณ์ฑ, side effect
์์ํจ์๋ ๊ฐ์ ์ ๋ ฅ์ ๋ฐ์์๋, ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ปํฉ๋๋ค. ๋์์ ์ฌ์ด๋์ดํํธ ์ฆ, ๋ถ์ํจ๊ณผ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ถ์ํจ๊ณผ๋ ์๋ ํจ์์ ๋ชฉ์ ๊ณผ๋ ๋ค๋ฅธ ํจ๊ณผ, ๋ถ์์ฉ์ ๋ปํ๋๋ฐ์, ํจ์ ๋ด์์ ์ธ๋ถ์ ๋ณ์์ ์ ๊ทผํ์ฌ ์ธ๋ถ ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ถ์ํจ๊ณผ๊ฐ ์๋ค๊ณ ํ ์ ์์ต๋๋ค. ์ธ๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ๋ถ๋ถ์ด ๋ถ๋ณ์ฑ์ด๋ ํฐ ๊ด๋ จ์ด ์๋๋ฐ์. ๋ถ๋ณ์ฑ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ ์ค์ ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ๋ปํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ํจ์๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ์ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํจ์์ ์ธ์๋ก ์ฐธ์กฐ ์๋ฃํ๊ฐ์ ๋ฐฐ์ด, ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ spread ์ฐ์ฐ์, map, filter, slice ๋ฑ ์๋ก์ด ์ฐธ์กฐํ์ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ํตํด ์๋์ ์ผ๋ก ๋ถ๋ณ์ฑ์ ์งํฌ ์ ์์ต๋๋ค.
8. ์ฌ๊ท๋ฅผ ํ์ฉํ๊ธฐ ์ข์ ์ํฉ
๋ฌธ์ ๊ฐ ์์๋ ๋น์ทํ ๊ตฌ์กฐ์ด์ง๋ง ๋ ์์ ๋จ์๋ก ๋๋์ด์ง๋ ๊ฒฝ์ฐ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ํฉํฉ๋๋ค. ๋ฐฐ์ด์ ํฉ์ ๊ตฌํ๋ค๊ณ ํ ๋ ๋จผ์ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์๋ก ์ชผ๊ฐ๊ณ , ๋ฌธ์ ๊ฐ ๋์ด์ ์ชผ๊ฐ์ง์ง ์์๋ ๊ฐ์ฅ ์์ ๋จ์์ ๋ฌธ์ ๋ฅผ ๋จผ์ ํด๊ฒฐํ ๋ค์ ์ ์ฒด ๋ฌธ์ ๋ฅผ ํ ์ ์์ต๋๋ค.
๋ํ ๋ฐ๋ณต๋ฌธ์ด ๋ง์ ๊ฒฝ์ฐ ์ค์ฒฉ ํ์๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๊ธฐ ์ข์ต๋๋ค. ์์๋ก ๊ฐ์ฒด๊ฐ ์์ ๋ ๊ฐ์ฒด๋ ๊ทธ ์์ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด์ ๋ด์ ์ ์๊ธฐ๋๋ฌธ์ ๋ช๊ฐ๊ฐ ์ค์ฒฉ๋์ด์๋์ง ์์ธกํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ์๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์ด๋ด๋ ์ฌ๊ท๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฅ ๊น์ ๊ณณ์์๋ ๊ฐ์ฒด๊น์ง ํ์ธํ ์ ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
9. li์์๊ฐ ul์์์ ์์์ด์ด์ผํ๋ ์ด์
<li> ์์๋ ๋ชฉ๋ก์ ๊ฐ ์์ดํ ์ ๋ํ๋ด๊ธฐ ์ํ ์์์ด๊ธฐ๋๋ฌธ์ ๋ชฉ๋ก์ ๋ด๋ unordered list, <ul>์์์ ์์ ์์๋ก ํ์ฉํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค. ๋ชฉ๋ก์ ๋ํ๋ด๊ธฐ์ํด <div> <span>์ผ๋ก ํํํด๋ ํ๋ฉด์์๋ ์ ํ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง๋ง, ์ํฉ์๋ง๊ฒ ์๋ฉํฑํ html์์๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ค๋ฅธ ๊ฐ๋ฐ์ ๋ฐ ๊ฒ์์์ง์ ์ปจํ ์ธ ์ ์๋ฏธ๋ฅผ ๋ ์ ์ค๋ช ํ ์ ์์ต๋๋ค.
10. ๋ฆฌ์กํธ state์ props ์ค๋ช
React์ state๋ ์ปดํฌ๋ํธ ์์์ ๋ณํ ์ ์๋ ๊ฐ์ ๋ค๋ฃจ๋ ๊ฐ๋ ์ด๊ณ ์ํ๋ฅผ ๋ค๋ฃจ๋ useState hook์ ์ฌ์ฉํด ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋กญ๊ฒ ํธ์ถ๋๊ณ ๋ฆฌ๋ ๋๋ง๋๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ํ๋ ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ๋ฆฌ์กํธ์ ๋์์น์ ๋ฐ๋ผ ์ง์ ์ ์ผ๋ก ๋ณ์์ ํ ๋นํ์ฌ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋, useState๋ก ์ ์ธํ ์ํ๋ณ๊ฒฝ ํจ์๋ฅผ ํตํด ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
props๋ ์ปดํฌ๋ํธ์ ์์ฑ(property)๋ฅผ ์๋ฏธํ๋ฉฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ ํํํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ฆฌ์กํธ์ ๋จ๋ฐฉํฅ, ํํฅ์ ๋ฐ์ดํฐํ๋ฆ ์์น์๋ฐ๋ผ props๋ ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ํจ๋ถ๋ก ๋ณ๊ฒฝ๋๋ฉด ์๋๊ธฐ๋๋ฌธ์ ์ฝ๊ธฐ์ ์ฉ ๊ฐ์ฒด์ ๋๋ค.
11. UI, UX์ ๊ฐ๋ ๊ณผ ๋ ๊ฐ๋ ์ ๊ด๊ณ
UI ์ ์ ์ธํฐํ์ด์ค๋ ์ฌ๋๋ค์ด ์ ํ/์๋น์ค๋ฅผ ์ฌ์ฉํ ๋ ๋ง์ฃผํ๋ ์๊ฐ์ ์ธ ์์๋ก ๋ณดํต ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฉด์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ฉด UX๋ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ผ๋ก ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋๋ผ๋ ์ด์ฒด์ ๊ฒฝํ์ ๋๋ค. ์ฌ๋ฏธ์ ์ผ๋ก ๋ณด๊ธฐ์ข์ UI๊ฐ ๋ฐ๋์ ์ข์ UX๋ฅผ ๋ณด์ฅํ์ง ์์ง๋ง, UX๊ฐ ์ ์ ์ ์ข ํฉ์ ์ธ ๋ง์กฑ๋์ ๊ด๋ จ์ด ๊น์๋งํผ ํญ์ ์ฌ์ฉ์์ ์ฅ์์ UX๋ฅผ ๊ณ ๋ คํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
12. semantic html์ ํ์์ฑ? ์์๋ฅผ ๋ค์ด ์ค๋ช
์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์
html์ด ์๋ฉํฑํ๊ฒ ์์ฑ๋๋ฉด div span์ผ๋ก๋ง ์์ฑ๋์์๋๋ณด๋ค ํ๊ทธ์ ์ญํ ์ ์ฝ๊ฒ ์ ์ถํ ์ ์์ด ์ฝํ ์ธ ๋ฅผ ๋ ๋ช ํํ๊ฒ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํฅ์๋์ด ๊ฐ๋ฐ์๊ฐ ์ํต์ด ์ฉ์ดํด์ง๋๋ค.
๊ฒ์์์ง ์ต์ ํ
์น ๋ธ๋ผ์ฐ์ ๊ฐ html์ฝ๋๋ง์ผ๋ก ์น์ฌ์ดํธ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ ์ฌ์์ ธ ๊ฒ์์์ง ์ต์ ํ์ ์ ๋ฆฌํฉ๋๋ค.
์น์ ๊ทผ์ฑ ํฅ์
๋ง์ง๋ง์ผ๋ก semantic ์์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก์จ ํ๋ฉด์ ๊ตฌ์กฐ์๋ํ ์ ๋ณด๋ ์ ๋ฌํ ์ ์์ด ๋ธ๋ผ์ฐ์ /์คํฌ๋ฆฐ๋ฆฌ๋๊ฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ํด์ํ ์ ์์ด์ ธ ์ฝํ ์ธ ๋ฅผ ๋ ์ ํํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
13. useEffect dependency array
useEffect๋ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฝ๋ฐฑํจ์, ๋๋ฒ์งธ ์ธ์๋ก dependency array๋ฅผ ๋ฐ๋๋ฐ์, ๊ธฐ๋ณธ์ ์ผ๋ก dependency array๋ฅผ ๋๊ฒจ์ฃผ์ง ์์ผ๋ฉด ๋งค ๋ ๋๋ง์ ์คํ๋ฉ๋๋ค. dependency array๋ฅผ ํตํด์ useEffect๋ฅผ ์กฐ๊ฑด๋ถ๋ก callback ํจ์๋ฅผ ์คํ์ํฌ ์ ์์ต๋๋ค. ๋ง์ฝ ์์กด์ฑ๋ฐฐ์ด์ ๋น์ํ๋ก ๋๋ฉด ๋งจ ์ฒ์ ๋ ๋๋ง์์๋ง useEffect๊ฐ ์คํ๋๊ณ , ํน์ ๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ ๋๋ง์ด ๋ฉ๋๋ค.
14. ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
์์๋ณต์ฌ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํ๊ณ ๊น์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ์ค์ ๊ฐ์ ๋ณต์ฌํฉ๋๋ค.
let obj1 = {name: snoopy, age: 1}, let obj2 = obj1 ๋ฅผ ์๋ก obj2์ obj1 ๊ฐ์ฒด๋ฅผ ์ฌํ ๋นํ ๊ฒฝ์ฐ์ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐธ์กฐ๊ฐ์ ๊ฐ๋ฆฌํค๊ธฐ๋๋ฌธ์ ์์ ๋ณต์ฌ๊ฐ ์ด๋ค์ง๋ฉฐ, obj2.age = 5๋ก ๋ฐ๊พธ๋ฉด obj1์ age๋ณ์๊ฐ๋ 5๋ก ๋ฐ๋๊ฒ ๋ฉ๋๋ค.
๊น์๋ณต์ฌ๋ ๋ ๋ค๋ฅธ ์์๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ ๋ปํ๋ฉฐ ์๋ก์ด ๊ฐ์ด ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ์๋๊ฐ๊ณผ ๋ณต์ฌ๋ ๊ฐ์ด ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ๊น์ ๋ณต์ฌํ๋ ค๋ฉด lodash๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
15. ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์์ฑ
๋ฆฌ์กํธ์์๋ ์ํ๋ฅผ useState hook์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ, ๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ํน์ง์ ๊ฐ์ง๊ธฐ๋๋ฌธ์ ๋ถ๋ชจ์ปดํฌ๋ํธ์์ ์์์ปดํฌ๋ํธ๋ก props๋ฅผ ์ฌ์ฉํ์ฌ state๋ฅผ ์ ๋ฌํฉ๋๋ค. ํ์ง๋ง ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ค์ง ํ์์ปดํฌ๋ํธ์์๋ง ํ์ํ props๋ฅผ state๊ฐ ์ ์ธ๋ ์์ ์ปดํฌ๋ํธ์์ ํด๋น ์์ ์ปดํฌ๋ํธ๊น์ง ๋ชจ๋ ์ ๋ฌํด์ฃผ์ด์ผ์ง๋ง ํ์ ์ปดํฌ๋ํธ์์ ๊ทธ props๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋๋ฌธ์ props drilling ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๋ฅผ ์ ์ญ๊ฐ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ด props drilling์์ด๋ ์ด๋ค ์ปดํฌ๋ํธ์์๋ ํด๋น ์ํ๋ฅผ ์ ๊ทผํ ์ ์์ต๋๋ค.
16. innerHTML, textContent ์ฐจ์ด
innerHTML์ element์ ์์ฑ์ผ๋ก ํด๋น html๋ฅผ ํ๊ทธ๊น์ง ๋ชจ๋ ์ฝ์ด์ค๊ณ ์ค์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด์ textContent๋ node์ ์์ฑ์ผ๋ก ํด๋น ๋ ธ๋๊ฐ ๊ฐ๊ณ ์๋ ํ ์คํธ๊ฐ์ ๊ทธ๋๋ก ์ฝ๊ฑฐ๋ ์ค์ ํ ์ ์์ต๋๋ค.
์ค์ง text๋ง ์กฐ์ํ ๊ฒฝ์ฐ์๋ textContent๊ฐ, ํ๊ทธ๊น์ง DOM์ ์กฐ์ํ๊ณ ์ถ์ผ๋ฉด innerHTML์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
17. ๋ฆฌ๋์ค ์ฃผ์๊ฐ๋
Redux์ ์ฃผ์๊ฐ๋ ์๋ Action, Dispatch, Reducer, Store๊ฐ ์์ต๋๋ค.
Action์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ค ์ก์ ์ ์ทจํด์ผ๋๋์ง ์ ์ํด๋์ ๊ฐ์ฒด์ ๋๋ค.
Dispatch๋ Reducer๋ก Action์ ์ ๋ฌํด์ฃผ๋ ํจ์๋ก, Dispatch์ ์ ๋ฌ์ธ์๋ก Action ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
Reducer๋ ํจ์๋ก, Dispatchํํ ์ ๋ฌ๋ฐ์ Action๊ฐ์ฒด์ ๊ฐ์ ํ์ธํด์ ๊ฐ์๋ฐ๋ผ store์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ์์ํจ์ ์ ๋๋ค.
Store๋ redux์ ์ํ๊ฐ ๋ชจ๋ ์ ์ฅ๋์ด์๋ ์ ์ญ ์ํ ์ ์ฅ์์ ๋๋ค. ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํ๋ฉด์ด ๋ค์ ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค.
18. ์ค์ฝํ์ ๋ํด์ ์ค๋ช
์ค์ฝํ๋ ๋ชจ๋ ์๋ณ์(๋ณ์ ์ด๋ฆ, ํจ์ ์ด๋ฆ, ํด๋์ค ์ด๋ฆ)๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค. ์๋ณ์๋ ์์ ์ด ์ ์ธ๋ ์์น์๋ฐ๋ผ ์์ ์ด ์ ํจํ ๋ฒ์, ์ฆ, ๋ค๋ฅธ ์ฝ๋๊ฐ ์๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋ฒ์๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. ์ค์ฝํ๋ ํฌ๊ฒ ์ ์ญ ์ค์ฝํ์ ์ง์ญ ์ค์ฝํ๋ก ๋๋๊ณ ์ค์ฝํ๋ ๊ณ์ธต์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ฒด์ธ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ ํ์ ์ค์ฝํ๋ ์์ ์ค์ฝํ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ ๊ทธ ๋ฐ๋๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
19. Same-Origin Policy์ CORS์ ๋ํด ์ค๋ช
Same-Origin-Policy๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฃผ์๊ฐ ๊ฐ์ ์ถ์ฒ๋ผ๋ฆฌ๋ง ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๋ณด์ ์ ์ฑ ์ ๋๋ค. ํ์ง๋ง ํ์ค์ ์ผ๋ก ๊ฐ๋ฐ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฃผ์๋ฅผ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ง๊ณ ์ธ๋ถ api๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ์. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด CORS ์ ๋๋ค. Cross Origin Resource Sharing์ ์ฝ์๋ก, ์ถ์ฒ๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์ ajax ์์ฒญ๋ ์๋ฒ์์ ๋ฐ์ดํฐ ์ ๊ทผ์ ํ์ฉํ๋ ์ ์ฑ ์ ๋๋ค.
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
npm install -g ์๋ฌ EACCES (1) | 2023.01.05 |
---|---|
๋ฆฌ์กํธ App.js useEffect ๋น๋๊ธฐ ํธ์ถ์์ ์ด์ ํด๊ฒฐ Suspense lazy (0) | 2022.11.30 |
๋ฆฌ์กํธ react-hook-form input ๋น์ด์์ ๋ button disabled ์ ์ฉ (0) | 2022.10.31 |
VSCode ํน์ ๊ธ์ ์ ๋ณ๊ฒฝ (0) | 2022.10.12 |
๋ฆฌ์กํธ | ๋ฉ๋ด ํญ์ useParams ๋ผ์ฐํ ์ผ๋ก ๊ด๋ฆฌ (0) | 2022.10.11 |