React

[TIL/React] 2023/06/09

loading spinner ๊ตฌํ˜„ํ•˜๊ธฐ ๐ŸŸฃ loading spinner๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์•ž์„œ, action์ด ๋ฌด์—‡์ธ์ง€ console์— ์ฐ์–ด๋ดค๋‹ค. action์€ ๊ธฐ๋ณธ์ ์œผ๋กœ '๊ฐ์ฒด'์ด๋‹ค. action ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ 'requestStatus๋ผ๋Š” key์™€ fulfilled๋ผ๋Š”

2023๋…„ 6์›” 9์ผ2min read

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

Amazon VPC Architecture ์ดํ•ดํ•˜๊ธฐ

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐํšํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์—์„œ ๋ฌด์—‡์„ ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ฏผํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‹ค์‹œ ๋Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.ํ•œ๋•Œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๋ชจ๋“  ์„ค๊ณ„์˜ ์ถœ๋ฐœ์ ์ด๋ผ๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ์ €๊ฐ€ ๋ฌด์—‡์„ ๋ณด๊ณ , ์–ด๋–ค ํ๋ฆ„์—์„œ ๋จธ๋ฌด๋ฅด๊ณ  ์ดํƒˆํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ดํ•ด ์—†์ด ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ

'์›์‚ฌ์ดํŠธ'

ํ”„๋ก ํŠธ์—”๋“œ ๊ด€์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ดํ•ดํ•˜๊ธฐ

์˜ค๋žœ๋งŒ์— ๋ฐฉ๋ฒ•๋ก ์— ๊ด€ํ•œ ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ์ƒํ™ฉ์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค. SSAFY์—์„œ๋Š” ํ•˜๋ฃจ์— ์—„์ฒญ๋‚œ ์–‘์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋“ค์„ ๊ณผ์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ, '๊ตฌํ˜„๋ ฅ'์ด ๋งค์šฐ ๋–จ์–ด์ง„๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํžˆ ์–ด๋ ค์šด ๋ฌธ์ œ๋ผ๋ฉด '์•„์‰ฌ์›€'์ด๋ผ๋Š” ๊ฐ์ •์กฐ์ฐจ ๋А๋ผ์ง€

Subnet

VPC ์„ค๊ณ„์˜ ์‹œ์ž‘: IP์™€ Subnet

๋ฐ˜๋ณต๋˜๋Š” ๋ฃจํ‹ด ์†์—์„œ ์–ป์€ ์•ˆ์ •๊ฐ์„ ๋ฐœํŒ ์‚ผ์•„, ์ด์ œ๋Š” ๊ธฐ์ˆ ์  ์ŠคํŽ™ํŠธ๋Ÿผ์„ ๋„“ํžˆ๊ธฐ ์œ„ํ•œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ์ฐฉ์ˆ˜ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•œ ํฌํŠธํด๋ฆฌ์˜ค ๊ตฌ์ถ•์„ ๋„˜์–ด, ์‹ค์ œ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ ๊ตฌํ˜„๊ณผ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ ์ ์šฉ ๋“ฑ ์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ์—ญ๋Ÿ‰์„ ํ•œ ๋‹จ๊ณ„