๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ 

๊ธฐ์ˆ ๋…ธํŠธ

๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ 

1. ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1. redux

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์‚ฌ์šฉ ์ด์œ  :

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๋งŒํผ ํ•œ๋ฒˆ ๋ฐฐ์›Œ๋‘๋ฉด react๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ vue, angular์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ redux๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

> \* ๋ฆฌ์•กํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํ•˜์ง€๋งŒ redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ œ์ผ ํฐ ์ด์œ ๋Š” ๋ฆฌ๋•์Šค์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„๊ตํ•ด์„œ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ˜„์žฌ ์ถ”์„ธ :

npm trends

<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 ๋ฏธ๋“ค์›จ์–ด ๋™์ž‘ ๋กœ์ง :

![ReduxAsyncDataFlowDiagram-d97ff38a0f4da0f327163170ccc13e80](https://user-images.githubusercontent.com/77488652/204117709-bc2f5536-85cc-4ded-9ca0-3ce96a1ca5de.gif)

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 ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์„œ ํ† ์ด ํ”„๋กœ์ ํŠธ๋‚˜ ๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋‚˜ ์ž์‹ ์˜ ์•„์ด๋””์–ด๊ฐ€ ์‹œ์žฅ์˜ ๋ฐ˜์‘์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณผ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์„ธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.