๐ ๏ธ ํ๋ก์ ํธ์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ์
๐ ๏ธ ํ๋ก์ ํธ์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ์
1. ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. redux
์๋ฐ์คํฌ๋ฆฝํธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฌ์ฉ ์ด์ :
์๋ฐ์คํฌ๋ฆฝํธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๋งํผ ํ๋ฒ ๋ฐฐ์๋๋ฉด react๊ฐ ์๋์ฌ๋ vue, angular์ ๊ฐ์ ํ๋ ์์ํฌ์์๋ redux๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
> \* ๋ฆฌ์กํธ๋ ํ๋ ์์ํฌ๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ์ง๋ง redux๋ฅผ ์ฌ์ฉํ๋ ์ ์ผ ํฐ ์ด์ ๋ ๋ฆฌ๋์ค์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๊ตํด์ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ฌ ์ถ์ธ :
<img width="1317" alt="Screen Shot 2022-11-27 at 10 21 15 AM" src="https://user-images.githubusercontent.com/77488652/204115069-a2f24585-6e14-4b56-9bc1-cda80f03e92d.png">
๋ฆฌ๋์ค๊ฐ ์๋์ ์ผ๋ก ๋ค์ด๋ก๋ ์์ด ๋ง๋ค. ๊ทธ๋งํผ ๋ง์ ํ๋ก์ ํธ์ ์ฌ์ฉ๋๋ ๋งํผ ํ์์ ์ผ๋ก ์์์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
1-1. redux-thunk
redux์ ๋น๋๊ธฐ ์์ ์ ํ๊ธฐ ์ํด ํ์ํ redux ๋ฏธ๋ค์จ์ด ์ค ํ๋์ด๋ค.
redux๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ก์ ๊ฐ์ฒด๋ง ๋์คํจ์น ๊ฐ๋ฅํ ๋ฐ๋ฉด์ `redux-thunk`๋ ์์ ์์ ์ฒ๋ผ ๋น๋๊ธฐ ํจ์์ ์ก์ ์ ๋์คํจ์น ํ ์ ์๋ค. (๋น๋๊ธฐ ํธ์ถ์ด๋ ๋งํผ api ํธ์ถ์ ๋ง์ด ์ฐ์ธ๋ค.)
redux-thunk ๋ฏธ๋ค์จ์ด ๋์ ๋ก์ง :

1. API ํจ์ ๋๊ธฐ 2. API ํจ์ ํธ์ถ (๋์คํจ์น) 3. API ํจ์ ๊ฐ ๋ฆฌํด 4. ๋ฆฌํด ๊ฐ ๋์คํจ์น 5. ๋ฆฌ๋์์์ ์ํ ์ ๋ฐ์ดํธ
3. recoil
redux๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๋ฐ๋ฉด `recoil`์ react ์ ์ฉ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ฌ์ฉ ์ด์
1. react๋ ํ์ด์ค๋ถ์ด ๋ง๋ค์๊ณ recoil๋ ํ์ด์ค๋ถ์ด ๋ง๋ค์๊ธฐ์ react hook์ ์คํ์ผ์ ๊ฐ์ง๊ณ ์์ด ์น๊ทผํ๋ค. 2. ๊ตฌ์กฐ๊ฐ ๋ณต์กํ redux์ ๋ค๋ฅด๊ฒ `recoil`์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ๋ค. 3. ๋ด์ฅ๋ `selector`๋ก ์ธํด ๋ฏธ๋ค์จ์ด์ ์ฌ์ฉ ์์ด ๋น๋๊ธฐ ๋ก์ง ์ฌ์ฉ์ ๊ฐ๋จํ ํ ์ ์์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ ํ์๊ฐ ์๋ค.
์ฆ ๋ฆฌ์กํธ์ ๋ฌธ๋ฒ๊ณผ ์ ์ฌํ๊ณ ๊ทธ ๊ตฌ์กฐ๊ฐ ๋จ์ํด ์ฌ์ฉํ๊ธฐ ์ฌ์ ์ฌ์ฉํ๋ค.
์ถ์ธ
๋น๊ต์ ์ต๊ทผ์ ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ ์ฌ์ฉ์๊ฐ ๋ง์ redux์ ๋ฌ๋ฆฌ ๋งค์ฐ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋ฌ๋์ปค๋ธ๊ฐ ๋ฎ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์กํธ ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ ๋ฆฌ์กํธ ์ฌ์ฉ์๋ค๋ ์์ฃผ ์ฌ์ฉํ๋ ์ถ์ธ๋ค.
2. CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. styled-components
์ฌ์ฉ ์ด์ :
CSS in JS, ์ฆ JS์์ CSS๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฒ. ์ปดํฌ๋ํธ ํ์ผ ์์ HTML, CSS, JS ๋ชจ๋ ๋ด์ ์ ์์ด ํ์ผ๋ณ๋ก ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํ๋ค.
1. ์ปดํฌ๋ํธ์ props๋ฅผ ์ฐธ์กฐํ ์ ์์ด props์ ๊ฐ์ ๋ฐ๋ผ ์คํ์ผ์ ๋ค๋ฅด๊ฒ ์ฝ๋ฉํ ์ ์๋ค.
2. ํ์ด์ง์์ ๋ ๋๋ง๋๋ ์์์ ๋ง์ถฐ ์๋์ผ๋ก ํด๋น ์คํ์ผ๋ง ์ฝ์ ํ๋ค. ์ฆ ๊ทธ๋๊ทธ๋ ํ์ํ ์คํ์ผ๋ง ๋ก๋ํ๋ ๊ฒ์ด๋ค.
3. styled-component๋ ์ค์ค๋ก className์ ์์ฑํ๊ธฐ ๋๋ฌธ์ className์ ์ค๋ณต์ด๋ ์คํ๋ก ์ธํ ๋ฒ๊ทธ๋ฅผ ์ค์ฌ์ค๋ค.
CSS in JS ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ emotion, styled-jsx ๋ฑ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋๋ฐ ํนํ styled-components๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋จผ์ ์ ํ๊ณ ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ง์ด ์ฌ์ฉํด ๋ดค๊ธฐ์ ์ต์ํด์ ธ์ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋์๋ค.
ํ์ฌ ์ถ์ธ :
<img width="1331" alt="Screen Shot 2022-11-27 at 1 35 31 PM" src="https://user-images.githubusercontent.com/77488652/204119397-37f1d267-6cd4-4f44-aa70-5d9713e427e4.png">
ํ์กดํ๋ CSS in JS ๊ด๋ จ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํ์ง๋ง emotion, styled-jsx์์ ์ฐจ์ด๊ฐ ํฌ์ง ์์ ์ต์ํ ๊ฒ์ ์ฌ์ฉํ๊ฑฐ๋ ํ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
2. framer-motion
์ฌ์ฉ ์ด์
css ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํด๋น ์ฌ์ดํธ์์ ์ ๋๋ฉ์ด์ ์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๊ณ ๊ทธ ์ฝ๋๋ค์ ์ ๊ณตํ๊ธฐ์ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋๋ค.
css ์ ๋๋ฉ์ด์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฝค ์๋๋ฐ ๊ทธ์ค์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
1. ๋ค์ํ ์ ๋๋ฉ์ด์ ์ ๊ณต 2. ๋จ์ํ ํคํ๋ ์ ๋ฌธ๋ฒ 3. ๋ ์ด์์ ์ ๋๋ฉ์ด์ 4. exit ์ ๋๋ฉ์ด์ 5. ..๊ทธ์ธ ์ ๋๋ฉ์ด์ ๊ด๋ จ ๊ธฐ๋ฅ๋ค
ํ์ฌ ์ถ์ธ
<img width="1312" alt="Screen Shot 2022-11-27 at 1 53 06 PM" src="https://user-images.githubusercontent.com/77488652/204119831-c8b0fce7-74cd-44f2-8d8f-1c721b2f7bb1.png">
๋ด๊ฐ ์๊ณ ์๋ css ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์์ ๊ฐ์ฅ ์ฌ์ฉ๋์ด ๋ง๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ์๋์ ์ผ๋ก ๊ธฐ๋ฅ์ด ๋ง์์ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ธ ๊ฒ ๊ฐ๋ค.
3. Firebase
์ฌ์ฉ ์ด์ :
์น์๋ฒ ์๋น์ค๋ ๋ํ์ ์ผ๋ก AWS์ Firebase๊ฐ ์๋๋ฐ ์ Firebase๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋๊ฐ? ์ ๋ฌด๋ฃ ์ฌ์ฉ๋์ด ์๋๋ฐ ์ด ์ฌ์ฉ๋์ ๋๊ธฐ์ง ์์ผ๋ฉด ๋ฌด๋ฃ์ฌ์ ์๋น์ค๋ฅผ ๋ฐ์นญํ ๋ ์๋ฒ ๋น์ฉ์ด ๋ค์ง ์๋๋ค. ํน์ ์ถํ์ ์ฌ์ฉ์๊ฐ ๋ง์์ง๋ฉด ๊ทธ ๋ ์๊ธ์ ๋ด๊ฑฐ๋ ๋ฐ๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ฉด ๋ผ์ ์๋น์ค ์คํจ์ ๋ฆฌ์คํฌ๊ฐ ๋งค์ฐ ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค AWS์ ๋นํด ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ์ฌํํ๊ณ ๊ฐ๋จํ๋ค.
์ ์ผ ์ค์ํ ์ด์ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ธ ๋๋ก์จ๋ ์ต์ด ๋น์ฉ์์ด ๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๊ธฐ์ ์ฌ์ฉํ๋ค.
์ฌ์ฉ ์ถ์ธ :
firebase ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ ธ์ ํ ์ด ํ๋ก์ ํธ๋ ๊ฐ๋จํ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋๋ ์์ ์ ์์ด๋์ด๊ฐ ์์ฅ์ ๋ฐ์์ด ์๋์ง ํ์ธํด ๋ณผ ๋ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ธ ๊ฒ ๊ฐ๋ค.