[TIL/React] 2023/06/09
loading spinner ๊ตฌํํ๊ธฐ ๐ฃ loading spinner๋ฅผ ๊ตฌํํ๊ธฐ์ ์์, action์ด ๋ฌด์์ธ์ง console์ ์ฐ์ด๋ดค๋ค. action์ ๊ธฐ๋ณธ์ ์ผ๋ก '๊ฐ์ฒด'์ด๋ค. action ๊ฐ์ฒด ๋ด๋ถ์์ 'requestStatus๋ผ๋ key์ fulfilled๋ผ๋
loading spinner ๊ตฌํํ๊ธฐ ๐ฃ


loading spinner๋ฅผ ๊ตฌํํ๊ธฐ์ ์์, action์ด ๋ฌด์์ธ์ง console์ ์ฐ์ด๋ดค๋ค. action์ ๊ธฐ๋ณธ์ ์ผ๋ก '๊ฐ์ฒด'์ด๋ค. action ๊ฐ์ฒด ๋ด๋ถ์์ 'requestStatus๋ผ๋ key์ fulfilled๋ผ๋ value'๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ๋ฅผ ํ์ธํ ์ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด requestStatus๋ฅผ ํ์ฉํด์ 'pending'์ผ ๋์๋ loading spinner๋ฅผ ๋ณด์ฌ์ฃผ์ง ์๊ณ , 'fulfilled'์ผ ๋์๋ UI ๋จ์์ ๋ํ๋๋๋ก ์ค์ ํ ์ ์์ง ์์๊น?


slice ํ์ผ์์ ์ด๊ธฐ๊ฐ์ ํํ๋ฅผ ๋ณ๊ฒฝํ๊ณ , pending์ ๋ํ case๋ฅผ ์ถ๊ฐํ๋ค. ์ปดํฌ๋ํธ์์๋ useEffect๋ฅผ ํตํด ํ๋ฉด์ด ๋ ๋๋ง๋์๋ง์ thunk ํจ์๋ฅผ ํธ์ถํ๋๋ก ์ค์ ํ๋ค.
ํ๋ฉด์ ๋์ฐ๋ ์๊ฐ useEffect๋ฅผ ํตํด thunk ํจ์๊ฐ ํธ์ถ๋๊ณ , pending์ ๋ํ case๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋๋ฐ, ์ด๋ requestStatus๊ฐ pending์ด๋ฉด ์ด๊ธฐ๊ฐ loading์ true๋ก ๋ณํํ๋ค. ์ปดํฌ๋ํธ์์๋ loading์ด true์ด๋ฉด '๋ก๋ฉ์ค'์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋ํ๋๋๋ก ์ค์ ํ๋ค.
๋ณ๊ฑฐ ์๋ ๊ณผ์ ์ด์๋๋ฐ ๊ฝค ์ค๋ ๊ฑธ๋ ธ๋ค. ์ด๊ธฐ๊ฐ์ ํํ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ๋ฉด์ fulfilled์ผ ๋ state.push๋ฅผ state.todo.push๋ก ๋ณ๊ฒฝํ์ด์ผ ํ๋๋ฐ ์ด ๋ถ๋ถ์ ๋์ณค๋ค. fulfilled์ผ ๋๋ loading์ ๋ํ ์ค์ ์ ํ์ง ์์๊ธฐ์, ๊ณ์ํด์ ๋ก๋ฉ ํ๋ฉด์ด ๋์ค๊ฒ ๋๋ค. ์ ์บก์ณ๋ณธ์ ์ฝ์์ ๋ณด๋ฉด loading data๊ฐ true๋ก ์ ๋ณํ๋์์์ ํ์ธํ ์ ์๋ค.



spinner๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ ์ปดํฌ๋ํธ์ด๊ธฐ์ src์ commons ํ์ผ ๋ด๋ถ์ ์ปดํฌ๋ํธ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ค. keyframes๋ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค. if ๋ฌธ ๋ด์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ์ ์ฉํ๋ฉด, ์์ ๊ฐ์ด loading spinner๊ฐ ๋์ํ๊ฒ ๋๋ค.
Add Todo Area & Delete Btn ๐ฃ

์ถ๊ฐ๋ Todo๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ญ์ ๋ํ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค. ๊ฐ์ฅ ๋จผ์ useSelector๋ฅผ ํตํด todo์ ๋ํ ์ํ๋ฅผ ๊ฐ์ ธ์๋ค. ํด๋น todo๋ value์ id๋ผ๋ key๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด์ ์งํฉ(=๋ฐฐ์ด)์ด๋ค. ๋ฐ๋ผ์ todo์ isDone ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ 'todo๊ฐ์ฒด.value.isDone'์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
~~์ ์ ๊ทผ์ ํตํด '์๋ฃ๋์ง ์์ ํญ๋ชฉ'์ noCompleteArray๋ผ๋ ๋ณ์์ ํ ๋นํ๋ค. todo์นด๋์์์ elem์ ๊ฒฐ๊ตญ todo๋ฅผ ์๋ฏธํ๋ค. ๋์ผํ ๋งค์ปค๋์ฆ์ผ๋ก title์ ๋ ๋๋งํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ์์์ todo์๋ ํด๋น data๊ฐ ๋ด๊ธฐ๋๋ฐ, noCompleteArray๋ ๋ฐ์๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. Add Click์์ inputValue๋ฅผ ์ด๊ธฐํํ ๋ isDone๊ณผ id์ ๋ํ ๋ด์ฉ์ ๋ฐ์ํด์ฃผ์ง ์์์ ๋ฐ์ํ ๋ฌธ์ ์๋ค.~~

์๋๋ค id๋ add๋ฅผ clickํ ๋ ๋ณด๋ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๋ค์ ํ์ด์ง ๊ตฌ๋ถ ๋จผ์ ๐ฃ
์ํ๊ธฐ๊ฐ ์ด์๋ก ์ ์ ์ค๋จํ์๋ค. ๋ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ์์ํ๋ค.

Delete button์ ๋ง์ง๋ง์ผ๋ก ๊ตฌํํ ๊ฒ ๊ฐ์๋ฐ, ์ฌ์ค์ ์์ธ ํ์ด์ง์์ ์ญ์ ์์ ์ ํ๋๋ก ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์๋ค.

๋ฉ์ธ ํ์ด์ง์์ title์ ํด๋ฆญํด์ ์์ธ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ํ๋ ค๋ฉด, title์ ๋ํด onClick event๊ฐ ํ์ํ๊ณ ํด๋น event๋ navigate์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ main๊ณผ detail๋ก ๊ตฌ๋ถํด์ ์ฃผ์๋ฅผ ๋ถ์ฌํ๊ณ ์ ํ๋ค.

๊ฐ์ฅ ๋จผ์ input field์ todo field, ๋ ์ปดํฌ๋ํธ๋ฅผ main์ผ๋ก ๋ฌถ์ด์คฌ๋ค.
ํ์ผ์ด ์ ์ ์๋ ์ด์ ๋ก ์๋ํ์ง ์๋๋ค. ์ญ์ ํ๊ณ ๋ค์ ์์ํ๋ค.
More to read
Amazon VPC Architecture ์ดํดํ๊ธฐ
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ฉฐ, ๊ฐ๋ฐ์์ ๋ฌด์์ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ฏผํด์ผ ํ๋์ง ๋ค์ ๋์๋ณด๊ฒ ๋์์ต๋๋ค.ํ๋๋ ํ๋ก ํธ์๋๊ฐ ๋ชจ๋ ์ค๊ณ์ ์ถ๋ฐ์ ์ด๋ผ๊ณ ๋ฏฟ์์ต๋๋ค. ์ ์ ๊ฐ ๋ฌด์์ ๋ณด๊ณ , ์ด๋ค ํ๋ฆ์์ ๋จธ๋ฌด๋ฅด๊ณ ์ดํํ๋์ง์ ๋ํ ์ดํด ์์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๊ธฐ
'์์ฌ์ดํธ'ํ๋ก ํธ์๋ ๊ด์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
์ค๋๋ง์ ๋ฐฉ๋ฒ๋ก ์ ๊ดํ ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ์ต๊ทผ ์ํฉ์ ์ด๋ ์ต๋๋ค. SSAFY์์๋ ํ๋ฃจ์ ์์ฒญ๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ๊ณผ์ ๋ก ์ํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์, '๊ตฌํ๋ ฅ'์ด ๋งค์ฐ ๋จ์ด์ง๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์์ ํ ์ด๋ ค์ด ๋ฌธ์ ๋ผ๋ฉด '์์ฌ์'์ด๋ผ๋ ๊ฐ์ ์กฐ์ฐจ ๋๋ผ์ง
SubnetVPC ์ค๊ณ์ ์์: IP์ Subnet
๋ฐ๋ณต๋๋ ๋ฃจํด ์์์ ์ป์ ์์ ๊ฐ์ ๋ฐํ ์ผ์, ์ด์ ๋ ๊ธฐ์ ์ ์คํํธ๋ผ์ ๋ํ๊ธฐ ์ํ ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฐฉ์ํ๊ณ ์ ํฉ๋๋ค.์ด๋ฒ ํ๋ก์ ํธ์ ๋ชฉํ๋ ๋จ์ํ ํฌํธํด๋ฆฌ์ค ๊ตฌ์ถ์ ๋์ด, ์ค์ ์๋น์ค ์์ค์ ๋ธ๋ก๊ทธ ์์คํ ๊ตฌํ๊ณผ ๋ค๊ตญ์ด ์ฒ๋ฆฌ ์ ์ฉ ๋ฑ ์ค๋ฌด์ ๊ฐ๊น์ด ์ญ๋์ ํ ๋จ๊ณ