/wanted-pre-onboarding-challenge-fe-1

wanted-pre-onboarding-challenge-fe-1

Primary LanguageTypeScript

๐Ÿš€์›ํ‹ฐ๋“œ ์‚ฌ์ „๊ณผ์ œ Login๊ณผ TodoList


โŒจ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Language Library

| |

|


๋กœ๊ทธ์ธํŽ˜์ด์ง€ ('/auth')

login-assignment

/auth ๊ฒฝ๋กœ์— ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค

๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…์„ ๋ณ„๋„์˜ ๊ฒฝ๋กœ๋กœ ๋ถ„๋ฆฌํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค

  • loginmodal ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌํ™œ์šฉํ•˜์—ฌ signup๋ฒ„ํŠผ ํด๋ฆญ์‹œ์—” signup ๊ธฐ๋Šฅ์„, login ๋ฒ„ํŠผ์„ ํด๋ฆญ์‹œ login ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„.

์ตœ์†Œํ•œ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ input, ์ œ์ถœ button์„ ๊ฐ–๋„๋ก ๊ตฌ์„ฑํ•ด์ฃผ์„ธ์š”

  • ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ input ๋ฐ ์ œ์ถœ button ๊ตฌํ˜„.
  • ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

์ด๋ฉ”์ผ ์กฐ๊ฑด : ์ตœ์†Œ @, . ํฌํ•จ ๋น„๋ฐ€๋ฒˆํ˜ธ ์กฐ๊ฑด : 8์ž ์ด์ƒ ์ž…๋ ฅ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‘ ์ž…๋ ฅ๋˜์–ด ์žˆ๊ณ , ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š”

  • includes method๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ '@', '.' ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ 8์ž์ด์ƒ์‹œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ๋˜๋„๋ก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌํ˜„.

๋กœ๊ทธ์ธ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์‘๋‹ต์„ ๋ฐ›์•˜์„ ๋•Œ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์ด๋™์‹œ์ผœ์ฃผ์„ธ์š”

  • email, password post ํ›„ ์‘๋‹ต ์„ฑ๊ณต์‹œ navigate๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์ด๋™ ๊ตฌํ˜„.

์‘๋‹ต์œผ๋กœ ๋ฐ›์€ ํ† ํฐ์€ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด์ฃผ์„ธ์š”

  • ์‘๋‹ต ์„ฑ๊ณต์‹œ ๋ฐ›์€ ํ† ํฐ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ ๊ตฌํ˜„.

๋‹ค์Œ ๋ฒˆ์— ๋กœ๊ทธ์ธ ์‹œ ํ† ํฐ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ์ผœ์ฃผ์„ธ์š”

  • ํ† ํฐ์ด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” ์ƒํƒœ์—์„œ ๋กœ๊ทธ์ธ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์กฐ๊ฑด๋ฌธ ํ™œ์šฉํ•˜์—ฌ ํ† ํฐ์ด ์žˆ์„ ๊ฒฝ์šฐ์—” ๋กœ๊ทธ์ธํ™”๋ฉด์ด ์•„๋‹Œ ๋ฃจํŠธ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ฒŒ๋” ๊ตฌํ˜„.

์–ด๋–ค ๊ฒฝ์šฐ๋“  ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ์ผœ์ฃผ์„ธ์š”

  • settimeout ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ mainํŽ˜์ด์ง€์—์„œ ํ† ํฐ์ด ์—†๋Š”๊ฒฝ์šฐ์— alert ๋ฉ”์„ธ์ง€์™€ ํ•จ๊ป˜ ๋กœ๊ทธ์ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ๋” ๊ตฌํ˜„.

Todo ('/')

todo-assignment

Todo List API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Todo List CRUD ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”

๋ชฉ๋ก / ์ƒ์„ธ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”

  • ๋ชฉ๋ก๊ณผ ์ƒ์„ธํŽ˜์ด์ง€๋ฅผ main๊ณผ detail๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ ์™„๋ฃŒ.

Todo ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • list ์ปดํฌ๋„ŒํŠธ์— axios get ํ†ต์‹ ์œผ๋กœ ๋ฐ›์•„์˜จ data์˜ title์„ map method๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„์™„๋ฃŒ.

Todo ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•  ์ผ์ด ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  • add ๋ฒ„ํŠผ ํด๋ฆญ์‹œ add input value ๊ฐ’์„ axios. create๋กœ ํ†ต์‹ ํ•˜์—ฌ ์ถ”๊ฐ€.

Todo ์ˆ˜์ • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ˆ˜์ • ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ˆ˜์ • ๋‚ด์šฉ์„ ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ •๋ฒ„ํŠผ ํด๋ฆญ์‹œ detail ํŽ˜์ด์ง€ label์ด input์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ ์ˆ˜์ •๋ชจ๋“œ๋กœ ์ „ํ™˜. ์ทจ์†Œ์‹œ ๋‹ค์‹œ label๋กœ ๋ณ€ํ™˜๋˜๊ฒŒ ๊ตฌํ˜„์™„๋ฃŒ.

Todo ์‚ญ์ œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น Todo๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌ์ŠคํŠธ์˜ x๋ฒ„ํŠผ ํด๋ฆญ์‹œ axios.delete๋กœ ํ•ด๋‹น ์•„์ด๋””์— ํ•ด๋‹น ํ•˜๋Š” ๊ฐ’ ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๊ตฌํ˜„.
ํ•œ ํ™”๋ฉด ๋‚ด์—์„œ Todo List์™€ ๊ฐœ๋ณ„ Todo์˜ ์ƒ์„ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.
  • ์ฒ˜์Œ์—๋Š” detail ํŽ˜์ด์ง€๋ฅผ ์•„์˜ˆ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๊ตฌํ˜„ํ•˜์˜€์—ˆ์œผ๋‚˜ List์™€ detail์ด ๊ฐ™์ด ๋ณด์ผ์ˆ˜ ์žˆ๊ฒŒ detail์„ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋งํ•˜์—ฌ List์™€ detail์„ ํ•œ๋ฒˆ์— ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒํ•จ.

์ƒˆ๋กœ๊ณ ์นจ์„ ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์—์„œ axios ํ†ต์‹ ์œผ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ state์— ๋‹ด์•˜์œผ๋ฏ€๋กœ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ์—๋„ ํ˜„์žฌ ์ƒํƒœ ์œ ์ง€.

๊ฐœ๋ณ„ Todo๋ฅผ ์กฐํšŒ ์ˆœ์„œ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ํ†ตํ•˜์—ฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.

  • detail์— id ๊ฐ’์œผ๋กœ url์„ ๋ถ€์—ฌํ•˜์—ฌ navigate(-1) ์‹คํ–‰์‹œ์— ์กฐํšŒ ์ˆœ์„œ์— ๋”ฐ๋ผ ์กฐํšŒ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌํ˜„ ์™„๋ฃŒ.
ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ•ฉ์„ฑ์„ ๊ฐ–์ถ”๋„๋ก ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”

์ˆ˜์ •๋˜๋Š” Todo์˜ ๋‚ด์šฉ์ด ๋ชฉ๋ก์—์„œ๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

  • todoList์™€ todoDetail์„ ํ•œ๊ฐœ์˜ state๋กœ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜ typescript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ List๋Š” data type์ด object Detail์€ object ํ˜•ํƒœ์—ฌ์„œ state ํ•œ๊ฐœ๋งŒ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€.
    List์—์„œ ํด๋ฆญํ•œ id๊ฐ’๊ณผ detail ํŽ˜์ด์ง€์˜ id๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ detail์—์„œ ์ž‘์„ฑ๋œ ๊ฐ’์ด List์— ์ ์šฉ๋˜๊ฒŒ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„.

1์ฃผ์ฐจ Refactoring

  • ์ „์ฒด์ ์ธ ํ•จ์ˆ˜, ๋ณ€์ˆ˜ ๋„ค์ด๋ฐ ๋ถ€๋ถ„ ๋ถ€ํ„ฐ ์ ‘๊ทผํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

  • custom hooks์„ ์‚ฌ์šฉํ•˜์—ฌ useInputs ์ปดํฌ๋„ŒํŠธ๋กœ login๊ณผ todo ํŽ˜์ด์ง€์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • axios๋„ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„ base_url์„ ๊ฐ™์ด ์„ค์ •์ฃผ์–ด ๋ถ„๋ฆฌํ•˜์˜€๊ณ  ์ถ”ํ›„ custom hook์œผ๋กœ ๋ถ„๋ฆฌํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.