Ea-Syno.dev

  1. Work>
  2. Bazoba(๋ด์กฐ๋ฐ”)

๐Ÿ“•ย ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ


bazoba_hero

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ๊ธฐ๊ฐ„ : 23.12. ~ 24.01. 1์ฃผ
  • ์ธ์› : FE 4๋ช…
  • ํ•œ ์ค„ ์„ค๋ช… : ์—ด์‹ฌํžˆ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ํƒ€์ธ๊ณผ ๊ณต์œ ํ•˜๊ณ  ์ฐœ, ๋Œ“๊ธ€, ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ดํŠธ
  • ๋งํฌ : Github / Site / Figma

์‹œ์—ฐ ๋ฐ ์˜์ƒ

https://youtu.be/xa74497iGok

ํ”„๋กœ์ ํŠธ ๋ฐฐ๊ฒฝ

๊ฒŒ์‹œ๊ธ€์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ๋žŒ๋“ค์˜ ๊ด€์‹ฌ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ ๋“ฑ์ด ํ•œ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์€ ๋ถˆํŽธํ•จ์„ ๊ฐœ์„ ํ•˜๊ณ , ๋˜ ์ง€์†์ ์œผ๋กœ ํ”ผ๋“œ๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“  ๋ถ€๋ถ„์˜ ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๊ณ  ๋ฒ„๋ ค์ง€๋Š” ํ”„๋กœ์ ํŠธ ์—†์ด ๋ณธ์ธ์ด ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ ์ž ์ง„ํ–‰ํ•˜์˜€๋‹ค.

ํ”„๋กœ์ ํŠธ ์„ค๋ช…

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

ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ

  1. ์ฝ”๋ฉ˜ํŠธ : ์‘์› ๋ฉ”์‹œ์ง€ ๋“ฑ ์ž์œ ๋กœ์šด ๋‚ด์šฉ์˜ ๋Œ“๊ธ€ ๋“ฑ๋ก ๊ธฐ๋Šฅ
  2. ๋ฆฌ๋ทฐ : ํ”„๋กœ์ ํŠธ ๊ฒŒ์‹œ์ž / ํŒ€ ๋ฉค๋ฒ„์™€ ๋ฆฌ๋ทฐ ๊ฒŒ์‹œ์ž๋งŒ ์ œํ•œ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ
  3. ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ : ๋‚ด๊ฐ€ ๊ฒŒ์‹œํ•œ ํ”„๋กœ์ ํŠธ์— ๋Œ“๊ธ€ / ์ข‹์•„์š” / ๋ถ๋งˆํฌ ์‹œ์— ๊ฒŒ์‹œ์ž ๊ณ„์ •์— ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๊ธฐ๋Šฅ
  4. co-author : ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ ๋ฉค๋ฒ„๋ฅผ ๊ฒŒ์‹œ๋ฌผ์— ํ‘œ์‹œ
  5. ์ข‹์•„์š” / ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ : ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
  6. ์—๋””ํ„ฐ : WYSIWYG ์—๋””ํ„ฐ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  7. ์•„๋ฐ”ํƒ€ : ์‚ฌ์šฉ์ž uid ํ•ด์‹ฑ์„ ํ†ตํ•ด ๋žœ๋ค ๋””ํดํŠธ ์•„๋ฐ”ํƒ€ ์ƒ์„ฑ

๊ธฐ์ˆ  ์Šคํƒ

  • ๊ณตํ†ต ๋ฐ ๋ฐฐํฌ : Yarn Berry, Git, GitHub, Vercel
  • Core : TypeScript, React, React-Router,
  • State Management : Recoil, React Query,
  • Styling : Ant Design, Styled Components, Framer Motion,
  • BasS : Supabase
  • ETC : Toast-UI Editor, Toastify, Ramda, React Hook Form, React Icons

โœ…ย ๊ธฐ์—ฌํ•œ ๋ถ€๋ถ„


Toast-UI Editor๋ฅผ ์ด์šฉํ•œ ์—๋””ํ„ฐ ํŽ˜์ด์ง€ ์ž‘์„ฑ

  • ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ์—๋””ํ„ฐ ๊ด€๋ จ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง( ๊ธ€ ์ž‘์„ฑ, ์ˆ˜์ •, ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์ œ๋ชฉ ์ฒ˜๋ฆฌ, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ) ๋ถ„๋ฆฌ
  • WYSIWYG ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ณธ๋ฌธ ์ž‘์„ฑ ๋ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ์ œ๊ณต
  • supabase Storage, DB ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ

Supabase ์ฝ”์–ด ํ•จ์ˆ˜ ์ž‘์„ฑ

  • Supabase CRUD ์ฝ”์–ด ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… supabase_core

Mention ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • debounce ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์‹œ ๋ถˆํ•„์š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  • custom debounce์™€ react-query๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๊ตฌํ˜„

๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • react-query์˜ infiniteQuery๋ฅผ ํ†ตํ•˜์—ฌ ๊ตฌํ˜„
  • supabase query๋ฅผ ํ†ตํ•ด range๋กœ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ๊ตฌ๋ถ„ํ•˜๊ณ  page param ๊ณ„์‚ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„

Exhaustiveness Checking์œผ๋กœ ์ •ํ™•ํ•œ ํƒ€์ž… ๋ถ„๊ธฐ ์œ ์ง€

  • switch ๋ฌธ์—์„œ exhaustiveness checking์„ ์œ„ํ•ด never ์‚ฌ์šฉ

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… exhaustiveness checking

๐Ÿ› ๏ธย ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…


React Unmount ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„

  • React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ Unmount ์‹œ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‚ฌ๋ผ์ง
  • ๋”ฐ๋ผ์„œ ๋ณ„๋„ ์ƒํƒœ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋„๋ก ์กฐ์น˜
  • onAnimationEnd ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ shouldRender ์ƒํƒœ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋กœ์ง ๊ตฌํ˜„
  • ์ปค์Šคํ…€ ํ›…์„ ์ด์šฉํ•˜์—ฌ ๋กœ์ง์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… react unmount animation 1ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… react unmount animation 2