๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค

[ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค] 3์ฃผ์ฐจ - ๊ณผ์ œ4

by rindev 2021. 8. 11.

โœ์•Œ๊ฒŒ๋œ ๊ฒƒ๊ณผ ๋Š๋‚€์ 

 

๐Ÿ”ฅ๊ทธ๋ž˜์„œ ํ•ด๋ณด๋Š” ์ •๋ฆฌ

1. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—๋„ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค

์ƒ๊ฐํ•ด๋ณด๋ฉด ์ž๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ ํ•  ๋•Œ๋„ ์„ค๊ณ„๊ฐ€ ๊ฑฐ์˜ ๊ฐœ๋ฐœ์ด๋ž‘ ๋งž๋จน๊ฒŒ ๊ฑธ๋ ธ์—ˆ๋Š”๋ฐ ํฌ๊ฒŒ ๋‹ค๋ฅผ๋ฆฌ๊ฐ€ ์—†๊ฒ ์ง€..!

์˜ˆ๋ฅผ๋“ค๋ฉด ์ €๋ฒˆ ๊ณผ์ œ ๋ฆฌ๋ทฐ์ธ๋ฐ, ์‚ฌ์šฉ์ž ๋“ฑ๊ธ‰์ด ์žˆ์–ด์„œ ๊ฐ ๋“ฑ๊ธ‰๋ณ„๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์‹œํŒ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—

์œ„์™€ ๊ฐ™์ด access(์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€)๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ ์–ด์ฃผ์ง€ ์•Š๊ณ 

ํ•ด๋‹น ์œ ์ €์˜ ๊ถŒํ•œ level๋งŒ ์ „๋‹ฌํ•œ ํ›„ ๊ทธ์— ๋”ฐ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค!

 

 

2. CSS์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด CSS์—์„œ 

// ๋‚ด์šฉ ์ƒ๋žต
              if (summary.length > 200) {
                return summary.substring(0, 200) + '...';
// ๋‚ด์šฉ ์ƒ๋žต

๊ณผ๊ฑฐ์˜ ๋‚˜๋Š” ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค..๐Ÿ˜‚ (์Šฌํ”ˆ ์˜ˆ๊ฐ์€ ๋น—๊ฒจ๊ฐ€์ง€ ์•Š์Œใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹)

 

// ๋‚ด์šฉ ์ƒ๋žต
summary.length !== 0 ? summary : SUMMARY_NOT_EXIST

ellipsis์™€ ๊ด€๊ณ„์—†์ง€๋งŒ ๊ณ ์น˜๊ณ  ์‹ถ์œผ๋‹ˆ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.

 /* css */
  
  .movie__summary {
    max-width: 80%;
    margin-bottom: 0.7rem;
    /* ๊ธ€์ž์ˆ˜ ์ œํ•œ ๊ด€๋ จ */
    overflow: hidden;
    text-overflow: ellipsis; /* ... ์„ ํ‘œ์‹œํ•จ */
    display: -webkit-box; /* ์œ ์—ฐํ•œ ๋†’์ด ์ฆ๊ฐ€๋ฅผ ์œ„ํ•ด ํ”Œ๋ ‰์Šค ๋ฐ•์Šค ํ˜•ํƒœ๋กœ ์ „ํ™˜*/
    -webkit-box-orient: vertical; /* ํ”Œ๋ ‰์Šค ๋ฐ•์Šค์˜ ๋ฐฉํ–ฅ ์„ค์ • */
    word-wrap: break-word; /* ์ž˜๋ผ๋ฒ„๋ฆด ๊ธ€์ž๋ฅผ ๋‹จ์–ด ๋‹จ์œ„๋กœ */
    -webkit-line-clamp: 4; /* ๋ณด์—ฌ์ค„ ์ค„์˜ ๊ฐฏ์ˆ˜ */
    line-height: 1.7rem; /* ํ•œ ์ค„์˜ ๋†’์ด */
    height: calc(1.7rem * 4); /* ์ด ๋†’์ด = ์ค„์˜ ๊ฐฏ์ˆ˜ x ์ค„ ๋†’์ด */
  }

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์ค„ ๊ธ€์ž ์ œํ•œ์— ๊ผญ ํ•„์š”ํ•œ๊ฑด width, height์ด๋‹ค! 

scss๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด /* ๊ธ€์ž์ˆ˜ ์ œํ•œ ๊ด€๋ จ */ ์ฃผ์„ ๋ฐ‘๋ถ€๋ถ„์„ @mixin์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

 

 

3. ์ปดํฌ๋„ŒํŠธ ๋‚ด ๋ณ€์ˆ˜ ์œ„์น˜

์ด๊ฑด ์ฒซ๋ฒˆ์งธ ๊ณผ์ œ ํ•  ๋•Œ ๋Š๋‚€์ ๊ณผ๋„ ์—ฐ๊ฒฐ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์ฝ”๋“œ ๋ง‰ ์งœ์ง€ ๋ง๊ธฐ, ๋ณด๊ธฐ ์ข‹์€ ์ฝ”๋“œ ์งœ๊ธฐ, ์™œ ๊ทธ๋ ‡๊ฒŒ ์งฐ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋ฉด ์ด์œ ๋ฅผ ๋งํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ƒ๊ฐํ•˜๊ธฐ

์ด๊ฑด ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด์„œ๋„ ๋‚ด ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด์„œ๋„ ๊ผญ!

 

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ๋„ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด์„œ ์ˆœ์„œ๋ฅผ ์ง€์ผœ์„œ ์ ์–ด์ฃผ๋ฉด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

1. import ์ˆœ์„œ๋„ ๊ฒฝ๋กœ ๋˜๋Š” ์—ฐ๊ด€์— ๋”ฐ๋ผ ๋ฌถ์–ด์ฃผ๊ธฐ, ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ค„๋ฐ”๊ฟˆ ๋“ฑ์œผ๋กœ ๊ฐ€๋…์„ฑ ํ™•๋ณดํ•˜๊ธฐ
2. propType
3. ์ปดํฌ๋„ŒํŠธ ์ •์˜
4. Styled Component
5. ๊ฐ„๋‹จํ•œ ์ƒ์ˆ˜ ์„ค์ •
6. ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜
1. import๋„ '์ด ํŒŒ์ผ์—์„œ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ํ•„์š”ํ•˜๊ตฌ๋‚˜' ํ•˜๊ณ  ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  - node modules
  - utils
  - ๋ฉ€๋ฆฌ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ
  - ๊ทผ์ฒ˜์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ
  - style ๊ด€๋ จ
2. ts๋ฅผ ์•ˆ ์“ฐ๋ฉด ์ ์–ด์ฃผ๋ฉด ์ข‹๋‹ค.
  - ํƒ€์ž… ์˜ค๋ฅ˜ ๋ฐฉ์ง€
  - ์–ด๋–ค ํ˜•์‹์˜ ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ํ•œ ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅ (์—†์œผ๋ฉด ์ฝ”๋“œ ๋‹ค ์ฝ์–ด๋ด์•ผ ํ•จ)
3. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•œ ๋ˆˆ์— ๋“ค์–ด์˜ค๋„๋ก ์ž‘์„ฑํ•ด์ฃผ๊ธฐ.
4. ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ styled component๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹ค์Œ์— ์ •์˜ํ•˜๊ธฐ.
5. ๊ฐ„๋‹จํ•œ ์ƒ์ˆ˜, ๊ฐ„๋‹จํ•œ data ๋“ฑ, ํ˜น์‹œ data๊ฐ€ ๊ฐ์ฒด์— ๋„ˆ๋ฌด ๊ธธ๋ฉด ์™ธ๋ถ€ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ!
6. ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” utils์„ฑ ํ•จ์ˆ˜๋Š” ๋ฐ–์œผ๋กœ ๋นผ์ฃผ๊ธฐ.

 

 

4. ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง, ์‚ผํ•ญ์—ฐ์‚ฐ์ž ๊ทธ๋งŒ ์‚ฌ๋ž‘ํ•˜์ž

์•„์ง๋„ if๋ฌธ์„ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์ข‹์•„ํ•˜๋Š” ๋‚˜์ง€๋งŒ(๐Ÿ˜ญ) ์ด์ œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž์™€ and์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ๋ž‘ํ•˜๋„๋ก ๋…ธ๋ ฅํ•ด๋ด์•ผ๊ฒ ๋‹ค.

ํ•˜์ง€๋งŒ! ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋„ ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋‹ค! ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋ฉด ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ!

false ์ผ ๋•Œ null์„ ๋‚ด๋ณด๋‚ด๋ฉด &&์กฐ๊ฑด์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ, ํ˜น์€ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์ด ์ •๋ง ํ•„์š”ํ•œ์ง€ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ.

 

 

5. lodash์˜ uniqBy

๐Ÿ’กLodash๋ž€?
js ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. array, collection, date, number, object ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ํŠนํžˆ ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ์ฒด๋“ค์˜ ๊ฐ’์„ ํ•ธ๋“ค๋ง ํ•  ๋•Œ ์œ ์šฉํ•œ๋ฐ, ์ค‘๋ณต์ œ๊ฑฐ๋‚˜ ํŠน์ • ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๊ธฐ ๋“ฑ์ด ๋งŽ์ด ์“ฐ์ธ๋‹ค๊ณ  ํ•œ๋‹ค. 

๊ทธ ์ค‘ uniqBy๋Š” ํŠน์ • ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์“ฐ์ธ๋‹ค.

uniqBy(๋ฐ์ดํ„ฐ, ๊ธฐ์ค€ ๊ฐ’)

์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š” items๋ฅผ 'id'๊ฐ’์œผ๋กœ ํ™•์ธํ•ด์„œ ์ค‘๋ณต์ด ์žˆ์œผ๋ฉด ์ œ์™ธํ•˜๊ณ  ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค.

 

 

6. ๋ฆฌ๋•์Šค ํˆดํ‚ท

๋ฆฌ๋•์Šค ํˆดํ‚ท(Redux Toolkit)์€ ๋ฆฌ๋•์Šค์˜ ๊ณต์‹ ๊ฐœ๋ฐœ ๋„๊ตฌ์ด๋‹ค. https://redux-toolkit.js.org/

๋ฆฌ๋•์Šค๊ฐ€ ์ข‹๊ธฐ๋Š” ํ•œ๋ฐ ์ฝ”๋“œ์˜ ์–‘์ด mobx์— ๋น„ํ•ด ๋งŽ๊ณ  ๋ณต์žกํ•œ ๋‹จ์ ์ด ์ƒ๊ฒจ์„œ ํˆดํ‚ท์ด ๋‚˜์™”๋‹ค๊ณ  ํ•œ๋‹ค. (๋ฆฌ๋•์Šค ์•Œ๋ชป์ด๋ผ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ํ˜ผ๋ž€์ด ์ƒ๊ฒผ๋‹ค...)

ํˆดํ‚ท์˜ ์žฅ์ 

- ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด action type์ด๋‚˜ action creator๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

- ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.

- immer๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด mutable ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

- redux-thunk๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ๋น„๋™๊ธฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ์ž˜ ๋œ๋‹ค

 

์–ผ๋ฅธ ๋ฆฌ๋•์Šค ์ธ๊ฐ• ๋“ฃ๊ณ  ์™€์•ผ๊ฒ ๋‹ค....๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ

 

 

7. Redux DevTools

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ํฌ๋กฌํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ. (๋งํฌ๋Š” ์—ฌ๊ธฐ!)

์ด๋ ‡๊ฒŒ ์–ด๋–ค ๊ฐ’๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ•œ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ๋‹ค!! console.log๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ฐ์–ด๋ณด์ง€ ์•Š์•„๋„.. ๋œ๋‹ค..!๐Ÿ‘

 

 

8. ์žŠ์ง€๋ง์ž ํ”„๋ก ํŠธ์—”๋“œ ํด๋ฆฐ์ฝ”๋“œ

๐Ÿ™‹‍โ™€๏ธ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!
ํด๋ฆฐ์ฝ”๋“œ == ์›ํ•˜๋Š” ๋กœ์ง์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ
 != ์งง์€ ์ฝ”๋“œ

ํ† ์Šค์˜ ์ง„์œ ๋ฆผ๋‹˜์˜ ํด๋ฆฐ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•! ๋‹ค๋ฅธ ์˜์ƒ๋„ ๋ช‡ ๊ฐœ ๋ดค์—ˆ๋Š”๋ฐ ๋ณผ ๋•Œ ๋งˆ๋‹ค ๋ง์”€์„ ๋„ˆ๋ฌด ์ž˜ํ•˜์…”์„œ ๊ฐํƒ„ํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฆฌ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ์ˆ˜์—…์‹œ๊ฐ„์— ๋ง์”€ํ•ด์ฃผ์‹  ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ์ •๋ฆฌํ•˜์ž๋ฉด....

 

โ—พ ๋ณ€์ˆ˜ 

a. ์˜๋ฏธ์žˆ๊ณ  ๋ฐœ์Œํ•˜๊ธฐ ์‰ฌ์šด ๋ณ€์ˆ˜๋ช… ์‚ฌ์šฉํ•˜๊ธฐ

b. ๋™์ผํ•œ ์œ ํ˜•์˜ ๋ณ€์ˆ˜์— ๋™์ผํ•œ ์–ดํœ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ 

 

โ—พ ํ•จ์ˆ˜

a. ํ•จ์ˆ˜ ์ธ์ž๋Š” 2๊ฐœ ์ดํ•˜๊ฐ€ ์ข‹์Œ

b. es6์˜ ๋น„๊ตฌ์กฐํ™” ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

    - ๊ทธ ํ•จ์ˆ˜์˜ ์‹œ๊ทธ๋‹ˆ์ณ(์ธ์ž์˜ ํƒ€์ž…, ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์˜ ํƒ€์ž… ๋“ฑ)๋ฅผ ๋ณผ ๋•Œ ์–ด๋–ค ์†์„ฑ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Œ

    - ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜ ๊ฐ์ฒด์˜ ์ง€์ •๋œ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์„ ๋ณต์ œํ•˜๋ฉฐ, ์ด๋Š” ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•จ

    - Linter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ธ์ž์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•ด์ฃผ๊ฑฐ๋‚˜ ๋น„๊ตฌ์กฐํ™” ์—†์ด ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์—†๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ

// good
function createMenu({ title, body, buttonText, cancellable }) {
  // ...
}

createMenu({
  title: 'Foo',
  body: 'Bar',
  buttonText: 'Baz',
  cancellable: true
});

// bad
function createMenu(title, body, buttonText, cancellable) {
  // ...
}

c. ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ํ–‰๋™๋งŒ ํ•ด์•ผ ํ•จ (๋งค์šฐ๋งค์šฐ๋งค์šฐ ์ค‘์š”)

    - ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ–‰๋™์„ ํ•˜๋ฉด ์ž‘์„ฑํ•˜๊ธฐ๋„, ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋„, ์ดํ•ดํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค.

//good
function emailClients(clients) { // ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜
  clients
    .filter(isClientActive)
    .forEach(email);
}

function isClientActive(client) { // ํ™œ์„ฑํ™” ๋œ ๊ณ ๊ฐ์„ ์ฐพ๋Š” ํ•จ์ˆ˜
  const clientRecord = database.lookup(client);
  return clientRecord.isActive();
}


//bad
function emailClients(clients) { // ํ•จ์ˆ˜ ์ด๋ฆ„์—๋Š” email์„ ๋ณด๋‚ธ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ..?
  clients.forEach(client => {  
    const clientRecord = database.lookup(client);
    if (clientRecord.isActive()) { // ๊ณ ๊ฐ์ค‘์—์„œ ํ™œ์„ฑํ™” ๋œ ๊ณ ๊ฐ์„ ์ฐพ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๊ณ ?
      email(client);		// ์ด๋ฉ”์ผ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค?!
    }
  });
}

d. ํ•จ์ˆ˜๋Š” ๋‹จ์ผ ํ–‰๋™์„ ์ถ”์ƒํ™” ํ•ด์•ผ ํ•จ

    - ์ถ”์ƒํ™” : ํ•ต์‹ฌ๋งŒ ๋‚จ๊ธฐ๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ์ค‘์š”ํ•œ ๋””ํ…Œ์ผ์€ ์ˆจ๊ธฐ๊ธฐ

    - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ์˜๊ฑฐํ•ด์„œ ํ•จ์ˆ˜๋Š” ๊ผญ ํ•˜๋‚˜์˜ ์ผ๋งŒ ํ•ด์•ผ ํ•จ!
    - ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ๋ณด๋”๋ผ๋„ ์–ด๋–ค ์ผ์„ ํ•˜๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•จ

e. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ธฐ

//good
function createFile(name) {
  fs.create(name);
}

function createTempFile(name) {
  createFile(`./temp/${name}`);
}

//bad
function createFile(name, temp) { // temp๋กœ ๊ฐˆ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜์ž
  if (temp) {
    fs.create(`./temp/${name}`); 
  } else {
    fs.create(name);
  }
}

f. ์ „์—ญํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ธฐ

    - ํ•œ๋•Œ ์œ ํ–‰ํ–ˆ๋˜ ์Šคํƒ€์ผ์ด์ง€๋งŒ, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„ํ—˜!

g. ์ฃผ์„ ์—†์ด ์ฝ”๋“œ๋กœ ๋งํ•ด๋ผ!

    - ๋‚˜ ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ธฐ์œ„ํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•œ ๋’ค ๊นƒ์„ ๋Š๊ณ  ํ•œ์ค„ํ•œ์ค„ ์ฃผ์„์„ ๋‹ฌ๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š”๊ฑด ๋ฌผ๋ก  ๊ฐ€๋Šฅ! (ํ™˜์˜!)

    - ํ•˜์ง€๋งŒ ์ œ์ถœ(๋ฐฐํฌ?)ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—๋Š” ์ฃผ์„ ์—†์–ด๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ ๊ฒฝ์จ์„œ ์ž‘์„ฑํ•˜๊ธฐ

 

 

๐Ÿš€๊ณผ์ œ ํ›„๊ธฐ

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

๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋ฐ”๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์ดˆ์ง€์‹์„ ํ‚ค์›Œ์•ผ๊ฒ ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ์•„ ๊ทธ๊ฑฐ๋ฅผ ์ด๋ ‡๊ฒŒํ•ด์„œ ์ €์ชฝ์—์„œ... ๊ฐ€ ์•„๋‹ˆ๊ณ . ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋””์—์„œ ์–ด๋””๋กœ ์–ด๋–ป๊ฒŒ ๋„˜๊ธฐ๋Š”์ง€! ํ™•์‹คํ•˜๊ฒŒ! ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก! ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค. ๋‚ด๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋งํ•ด๋„ ์ฐฐ๋–ก๊ฐ™์ด ํ•ด์„ํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์ฃผ์‹  ์ด๋ฒˆ ์ง๋‹˜๋“ค์—๊ฒŒ ๊ฐ์‚ฌ์ธ์‚ฌ๋ฅผ ์˜ฌ๋ฆฌ๋ฉฐ ์ด๋ฒˆ ํ›„๊ธฐ๋Š” ๋งˆ๋ฌด๋ฆฌ....... ์—ด์‹ฌํžˆํ•˜์ž! 

 

 

๐Ÿ‘€์ฐธ๊ณ  (๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!)

๋”๋ณด๊ธฐ

https://junistory.blogspot.com/2017/06/css-ellipsis.html

 

CSS์—์„œ ellipsis('...')๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Web๊ฐœ๋ฐœ, ์›น๋””์ž์ธ, ์›น๊ธฐํš, IT์ •๋ณด, ์—ฌํ–‰์ •๋ณด, ๋ง›์ง‘์ •๋ณด๋“ฑ์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๋Š” ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

junistory.blogspot.com

https://webdir.tistory.com/483

 

CSS๋กœ ๊ธ€์ž ์ž๋ฅด๊ธฐ - ํ•œ ์ค„, ์—ฌ๋Ÿฌ ์ค„

๊ณ ์ •๋œ ๋„ˆ๋น„๋งŒ์„ ์ œ๊ณตํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์—์„œ๋Š” ์„œ๋ฒ„๋‹จ์—์„œ ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ๊ธ€์ž์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€๋Š ํ•˜๋ฉฐ ๋””์ž์ธํ•˜๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ์œ ๋™์ ์ธ ๋„ˆ๋น„๋ฅผ ๊ฐ€์ง€๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์Šคํฌ๋ฆฝํŠธ์ชฝ์— ์ ‘๊ทผํ•  ์ˆ˜

webdir.tistory.com

https://webisfree.com/2020-09-17/lodash-uniqby()-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 

 

lodash uniqBy() ๋ฉ”์†Œ๋“œ ์•Œ์•„๋ณด๊ธฐ

lodash ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜์ธ uniqBy() ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

webisfree.com

https://blog.rhostem.com/posts/2020-03-04-redux-toolkits

 

Redux Toolkit์„ ํ™œ์šฉํ•œ React ์ƒํƒœ ๊ด€๋ฆฌ

ํ”„๋ก ํŠธ์—”๋“œ ์›น ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

blog.rhostem.com

https://medium.com/@caffeinick/es6-syntax-destructuring-assignment-9f37cb5817cf

 

ES6 Syntax — Destructuring Assignment

์ด ๊ธ€์€ MDN web docs์˜ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ์„œ๋ฅผ ํ•™์Šต๋ชฉ์ ์œผ๋กœ ์ฒจ์‚ญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

medium.com

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters

 

Rest parameters - JavaScript | MDN

The rest parameter syntax allows a function to accept an indefinite number of arguments as an array, providing a way to represent variadic functions in JavaScript.

developer.mozilla.org

 

๋Œ“๊ธ€