๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project/Project

MySurpin ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

by joooing 2021. 3. 28.
๋ฐ˜์‘ํ˜•

My Surpin ๐Ÿ„๐Ÿป‍โ™€๏ธ๐Ÿ„๐Ÿผ‍โ™‚๏ธ


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

 

My Surpin์ด ๋ฌด์Šจ ๋ง์ด์•ผ..?

๐Ÿ„‍โ™‚๏ธ ๋‹น์‹ ๋งŒ์˜ ๋ถ๋งˆํฌ ๋ชจ์Œ์ง‘์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๐Ÿ„‍โ™€๏ธ

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

 

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

 

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

 

๋ถ๋งˆํฌ๋“ค์„ ํด๋”๋ณ„๋กœ ๊ด€๋ฆฌ์ค‘์ธ ํฌ๋กฌ ์ƒ๋‹จ๋ฐ”

 

My Surpin =My + Surfing + Pin

My Surpin์€ My + Surfing + Pin ์ด ํ•ฉ์ณ์ง„ ๋‹จ์–ด์ด๋‹ค. 'Surpin'์€ ์›น ์„œํ•‘์˜ Surfing๐Ÿ„‍โ™‚๏ธ๊ณผ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ณ ์ •ํ•˜๋Š” ์šฉ๋„์˜ Pin๐Ÿ“Œ์ด ํ•ฉ์ณ์ง„ ํ•ฉ์„ฑ์–ด์ด๋‹ค. ์›น์„œํ•‘์„ ํ•˜๋‹ค๊ฐ€ ๋ง˜์— ๋“œ๋Š” ์žฅ์†Œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•€์„ ๊ฝ‚์•„๋‘๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ์„œํ•‘์„ ์ทจ๋ฏธ๋กœ ํ•˜์‹œ๋Š” ํŒ€์›๋ถ„์ด ๊ณ„์…”์„œ ๊ทธ ํŒ€์›๋ถ„์ด ์›น ์„œํ•‘์ด๋ผ๋Š” ๋‹จ์–ด์™€ ์—ฐ๊ด€ ์ง€์–ด๋ณด๋Š”๊ฒŒ ์–ด๋–ป๊ฒ ๋‹ค๋Š” ์˜๊ฒฌ์„ ์ฃผ์…จ๋‹ค. ๋‹ค๋ฅธ ํŒ€์›๋ถ„์ด ๊ทธ์— ๋”ํ•ด ํ•€๊ณผ ํ•ฉ์ณ ์„œํ•€์ด๋ผ๋Š” ์ด๋ฆ„์„ ์ œ์•ˆํ•˜์…จ๋Š”๋ฐ, ๋ชจ๋‘์˜ ๋ง˜์— ๋”ฑ ๋“œ๋Š” ์ด๋ฆ„์ด๋ผ ๋ฐ”๋กœ ๊ฒฐ์ •๋˜์—ˆ๋‹ค. 

 

Surpin ?!


์„œํ•€์€ ํ•œ ๋งˆ๋””๋กœ ๊ฐ์ž์˜ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ฐ˜์˜๋œ ์›น์‚ฌ์ดํŠธ URL ๋ชจ์Œ์ง‘์ด๋‹ค. ์œ„์˜ ๋ถ๋งˆํฌ ํด๋” ๋Œ€์‹  ์ด๋ ‡๊ฒŒ URL ๋ชฉ๋ก๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ณต์œ ๋„ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์„œํ•€์„ ๊ตฌ๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค ๐Ÿ‘๐Ÿป ๋” ์ด์ƒ ๋ธŒ๋ผ์šฐ์ € ์ƒ๋‹จ์— ๊พธ๊นƒ๊พธ๊นƒํ•˜๊ฒŒ ๋ถ๋งˆํฌ๋“ค์„ ๋ณด๊ด€ํ•˜์ง€ ๋ง์ž,,!

 

(์™ผ) ์„œํ•€๋“ค์ด ์ญ‰ ๋Š˜์–ด์ ธ์žˆ๋Š” ๋ชจ์Šต / (์˜ค) ์„œํ•€ ํด๋ฆญ์‹œ ๋ณด์ด๋Š” url ๊ด€๋ฆฌ ๋ชจ๋‹ฌ์ฐฝ

 

My Surpin์€ ์–ด๋–ค ๊ธฐ์ˆ ๋กœ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ..?! ๐Ÿง


์ „๋ฐ˜์ ์œผ๋กœ๋Š” ์œ„์™€ ๊ฐ™์€ ์Šคํƒ์„ ์‚ฌ์šฉํ•ด ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฐ ์Šคํƒ์„ ์‚ฌ์šฉํ•œ ์ด์œ ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

React

  • ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ (ํŠนํžˆ..๋ชจ๋‹ฌ์ฐฝ)
  • Classํ˜•์— ๋น„ํ•ด Life Cycle ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›€
  • ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์ปดํฌ๋„ŒํŠธ ๋ผ๋Š” ์—ญํ• , ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์ชผ๊ฐœ์–ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

Redux

  • ์ƒํƒœ์˜ ์ค‘์•™ํ™”๋กœ ์ „์ฒด ์ƒํƒœ ๊ด€๋ฆฌ ์šฉ์ด
  • props๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‚ด๋ ค์ฃผ์ง€ ์•Š์•„๋„ ์–ด๋””์„œ๋‚˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ํ›„์—๋„ ๋™์ผ ์‹œ์ ๋ถ€ํ„ฐ ์žฌ์ง„ํ–‰ ๊ฐ€๋Šฅ (Redux Persist)

Sass

  • ์ƒ์œ„ Selector์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ํด๋ž˜์Šค๋ช…์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด ์ ๋Š” ๋“ฑ์˜ ์ฝ”๋“œ ์ค‘๋ณต ๋ฐฉ์ง€ ๊ฐ€๋Šฅ
  • ๋ณ€์ˆ˜์‚ฌ์šฉ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
  • ๋†’์€ ๊ฐ€๋…์„ฑ

 

My Surpin ๋ณธ๊ฒฉ ๊ตฌ๊ฒฝํ•˜๊ธฐ  ๐ŸŒŠ


1. ๋ฉ”์ธํŽ˜์ด์ง€

๋ฉ”์ธํŽ˜์ด์ง€๋Š” ์„œํ•‘์˜ ์ด๋ฏธ์ง€์— ๊ฑธ๋งž๊ฒŒ ๋™์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ๋ฆฌ์•กํŠธ์˜ useRef()๋กœ ์ปดํฌ๋„ŒํŠธ DOM์˜ ์œ„์น˜์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•จ์œผ๋กœ์„œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ํ•ด๋‹นํ•˜๋Š” Section ์œ„์น˜๋กœ ์ด๋™ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ฐจํŠธ ๋ถ€๋ถ„์€ ํŠน์ • ์œ„์น˜์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ด์œผ๋กœ์จ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ƒ์Šนํ•˜๋Š” ๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค. Navbar ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์–ธ์ œ๋“ ์ง€ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ณ ์ •์ ์ธ ๊ฒ€์ƒ‰์ฐฝ์„ ์ถ”๊ฐ€ํ•ด ํŽธ์˜์„ฑ์„ ๋†’์˜€๋‹ค.

 

 

 

2. ์ œ๋ชฉ, ์„ค๋ช…, ํƒœ๊ทธ, URL ๋ชฉ๋ก, ์ธ๋„ค์ผ ๋“ฑ์„ ์ง€์ •ํ•ด ๋‚˜๋งŒ์˜ ์„œํ•€ ๋งŒ๋“ค๊ธฐ

2-1. ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ

Node.js์˜ Javsscript์šฉ AWS SDK๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. ์ •์ ํŒŒ์ผ์ธ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๋ฅผ <input>ํƒœ๊ทธ๋กœ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์•„, S3 ๋ฒ„ํ‚ท์œผ๋กœ ์ „๋‹ฌํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ „๋‹ฌ ํ›„ ์‘๋‹ต์œผ๋กœ ๋ฐ›์•„์˜จ S3 url์„ ์„œ๋ฒ„์— ๋‹ค์‹œ ์ „๋‹ฌํ•ด DB์— ์ €์žฅ์‹œํ‚ค๊ณ , ์ดํ›„์—๋Š” DB์— ์ €์žฅ๋œ url์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์™€ ์ธ๋„ค์ผ์„ ๋ณด์—ฌ์ฃผ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

2-1. URL๋งŒ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ํŽ˜์ด์ง€์˜ Title์ด ์ด๋ฆ„์œผ๋กœ ์ž…๋ ฅ๋จ

URL ์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น URL html์˜ <title> ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์šฐ์„  ์„œ๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ๋ถ€๋ถ„์— axios๋กœ ํ•ด๋‹น url์˜ html์„ ๊ธ์–ด์˜จ ํ›„ title ๋ถ€๋ถ„๋งŒ ๋งค์นญ์‹œํ‚ค๋Š” ์ •๊ทœ์‹์„ ์ ์šฉํ•ด๋‘์—ˆ๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ url ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด title์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ–ˆ๋‹ค. 

 

 

2-2. Drag & drop์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ url ๋ชฉ๋ก ์ˆœ์„œ ์กฐ์ • ๊ฐ€๋Šฅ

beautiful dnd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด url ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ๋“œ๋ž˜๊ทธ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ๊ฐ„ํŽธ์„ฑ์„ ๋†’์˜€๋‹ค. ์ถ”๊ฐ€๋กœ, ๊ฐ url์€ ํด๋ฆญํ•˜๊ฒŒ๋˜๋ฉด ํ•ด๋‹น ์›น์‚ฌ์ดํŠธ๋กœ ์ด๋™์‹œ์ผœ์ค€๋‹ค. ๋‹ค์‹œ ์„œํ•€์ฐฝ์œผ๋กœ ๋Œ์•„์˜ค๊ธฐ ํŽธํ•˜๋„๋ก ์ƒˆ์ฐฝ์„ ์—ด์–ด ๋„์›Œ์ฃผ๋„๋ก ํ–ˆ๋‹ค.

 

 

 

3. ํƒœ๊ทธ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œํ•€ ๊ฒ€์ƒ‰

์ด ๋ถ€๋ถ„๋„ useRef()๋ฅผ ์ด์šฉํ•ด, ํŽ˜์ด์ง€์˜ ๊ฐ€์žฅ ์•„๋ž˜ ๋ถ€๋ถ„์— ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ฌ๋ผ๊ณ  ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋„๋ก ํ–ˆ๋‹ค. ๋ฌดํ•œ์Šคํฌ๋กค ํ˜•ํƒœ๋ผ ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜์—ˆ์Œ์—๋„ ์š”์ฒญ์ด ๊ฐ€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์ด ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์™€ ํ•œ๋ฒˆ์— ๋กœ๋”ฉ์‹œํ‚ค๋Š” ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์š”์ฒญ ๊ฐ€๋Šฅ ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

 

 

4. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ์„œํ•€ ํผ์˜ค๊ธฐ

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ์„œํ•€์„ ๊ตฌ๊ฒฝํ•˜๋‹ค๊ฐ€ ๋ง˜์— ๋“œ๋Š” ์„œํ•€์„ ๋ฐœ๊ฒฌํ•˜๋ฉด, ํผ์˜ฌ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ๋ชฉ์ ์— ๋งž๊ฒŒ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ํผ์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š”, DB์—์„œ ์„œํ•€id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋”ฐ๋กœ ์นด์šดํŠธํ•˜๊ณ  ์žˆ๋Š” ์›๋ณธ ์„œํ•€์˜ ์ธ๊ธฐ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ , ํƒœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ์ด ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ๊ธฐ์žˆ๋Š” ์„œํ•€ ๋ถ€๋ถ„์˜ ์ƒ๋‹จ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

 

5. ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ํ•œ๋ฒˆ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์œ 

๋‚˜๋งŒ ์•Œ๊ธฐ ์•„๊นŒ์šด ์„œํ•€์€ ๊ฐ„๋‹จํ•œ ํด๋ฆญํ•œ๋ฒˆ์œผ๋กœ ์นœ๊ตฌ์—๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. select() ๋ฉ”์„œ๋“œ ์™€ execCommand๋ฅผ ์ด์šฉํ•ด ๊ฐ€์ƒ์˜ input ํƒœ๊ทธ์— ๋‹ด์•„๋‘” ๊ฐ’์„ ๋ณต์‚ฌํ•ด์˜ค๋„๋ก ํ–ˆ๋‹ค.

 

 

6. ํ˜„์žฌ ํŠธ๋ Œ๋“œ, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์„œํ•€๋“ค ํ™•์ธ ๊ฐ€๋Šฅ

ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ๊ฒ€์ƒ‰์–ด๋ฅผ ๋งˆ์ด์„œํ•€์˜ trend now ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„๋Š” Chart.js(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋กœ ๊ธฐ๋ณธ์ ์ธ ์ฐจํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ , gradient ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด canvas API๋ฅผ ์ด์šฉํ–ˆ๋‹ค. ๊ฒ€์ƒ‰ ๋žญํ‚น์ด ๋œจ๋Š” ๋ถ€๋ถ„์€ '์„œํ•‘'์ด๋ผ๋Š” ์ปจ์…‰์— ๋งž๊ฒŒ ํŒŒ๋„๊ฐ€ ์น˜๋Š” ๋Š๋‚Œ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ CSS์˜ keyframe์„ ํ™œ์šฉํ–ˆ๋‹ค.

 

 

 

 

Flow Chart


DB ์Šคํ‚ค๋งˆ


API ๊ฐœ์š”


 

์ž˜ํ•œ ์ , ๊ฐœ์„ ํ•ด์•ผํ•  ์  


๋‹ค๊ฐ™์ด ์ •ํ•ด๋‘” ํŒ€ ๊ทœ์น™

 

 

์ž˜ํ•œ ์  

 

1. ๋„์ „ ์ •์‹ , ์ƒˆ๋กœ์šด๊ฒƒ์— ๋Œ€ํ•ด ๊ฒ๋จน๊ธฐ๋ณด๋‹ค ์‹œ๋„๋ถ€ํ„ฐ ํ•˜๋Š” ํƒœ๋„
2. ๋งค์ผ ์•„์นจ์—๋Š” ํšŒ์˜์‹œ๊ฐ„, ์ €๋…์—๋Š” ํšŒ๊ณ ์‹œ๊ฐ„์„ ๊ฐ€์ง„ ๊ฒƒ
3. ํŒ€์›๋“ค์ด (ํ•˜๋ฃจ์ข…์ผ..) zoom์œผ๋กœ ์ง€์†์ ์œผ๋กœ ์†Œํ†ตํ•œ ๊ฒƒ
4. ์–ด๋ ค์šด ์ ์ด ์ƒ๊ธฐ๋ฉด ๋ฐ”๋กœ ๊ณต์œ ํ•˜๋Š” ๋ถ„์œ„๊ธฐ
5. ์œ ์—ฐํ•œ ๊ทœ์น™ ์ ์šฉ

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

 

๊ฐœ์„ ํ•  ์ 

 

1. ๊ฐ์ž ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์‹œ๊ฐ„ ๋ถ€์กฑ
2. commit ๊ทœ์น™, PR, ์ด์Šˆ์นด๋“œ ํ…œํ”Œ๋ฆฟ์„ ์ ์  ์ง€ํ‚ค์ง€ ์•Š์€ ๊ฒƒ
3. branch ๊ด€๋ฆฌ๋ฅผ ์ข€ ๋” ์„ธ๋ถ„ํ™”ํ•  ํ•„์š”์„ฑ
4. ํƒœ์Šคํฌ ๋ถ„๋ฐฐ ๋ฐฉ์‹๊ฐ์ž ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์‹œ๊ฐ„ ๋ถ€์กฑ
5. ์ฒด๋ ฅ๊ด€๋ฆฌ! ์‹œ๊ฐ„๊ด€๋ฆฌ! ํ•„์š”
6. ๋””์ž์ธ์ด๋‚˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์— ๋Œ€ํ•ด ์ข€ ๋” ๊นŠ์€ ๊ณ ๋ฏผ์ด ํ•„์š”

๊ฐœ์ธ์ ์œผ๋กœ ์•„์‰ฌ์›€์„ ๋Š๋ผ๊ฑฐ๋‚˜ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๋•Œ๋Š” ๊ฐœ์„ ํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌํ•ญ๋“ค์ด๋‹ค. ์ผ๋‹จ ์‹œ๊ฐ„์ด ์ด‰๋ฐ•ํ•˜๋‹ค๊ณ  ๋Š๊ปด์ง€๋‹ค๋ณด๋‹ˆ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•  ์‹œ๊ฐ„์ด ๋งŽ์ด ๋ถ€์กฑํ•ด์„œ ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ์ž ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ merge ํ•˜๋Š” ์‹์ด ๋˜์—ˆ๋‹ค. ์˜คํžˆ๋ ค ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ๋ถ€๋ถ„๋„ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ๋„ ํ–ˆ์–ด์„œ ์ด๋ถ€๋ถ„์€ ๊ผญ ๊ฐœ์„ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ๊ตฌํ˜„๋„ ๋ฌผ๋ก  ์ค‘์š”ํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ณด๊ธฐ ์‰ฌ์šด ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. 

 

๋Š๋‚€์  โœ๐Ÿป


ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ƒ๊ฐ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋˜ Github๊ณผ React Hooks, Redux ๋•Œ๋ฌธ์— ๊ณ ์ƒ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ์ข€ ์นœํ•ด์ง„ ๋Š๋‚Œ์ด๋‹ค. ํŠนํžˆ React๋‚˜ Redux ๋Š” ์จ๋ณด๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ณ , ์–ด๋–ค ์ ์—์„œ ํŽธํ•˜๊ตฌ๋‚˜ ํ•˜๋Š” ์ •๋„๋กœ ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ง์ ‘ ์ด์šฉํ•ด์„œ ๋ญ”๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋‹ˆ๊นŒ ์ด์ œ์„œ์•ผ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์–ธ์ œ ์จ์•ผํ•˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์™œ ์“ฐ๋Š”์ง€, ์žฅ์ ์ด ๋ญ”์ง€ ๋ชธ์†Œ ๊นจ๋‹ซ๊ฒŒ ๋  ์ˆ˜ ์žˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์—ญ์‹œ ์‚ฝ์งˆ์„ ํ•ด์•ผ ๋งŽ์ด ๋ฐฐ์šด๋‹ค..! ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ์„œ๋น„์Šค๋ฅผ ์ข€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ? ํ•˜๋Š” ๊ณ ๋ฏผ๋„ ๋‚˜๋ฆ„๋Œ€๋กœ ํ–ˆ๋Š”๋ฐ, ๋„ˆ๋ฌด ์‚ฌ์†Œํ•ด์„œ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ์ •๋„์˜ ํŽ˜์ด์ง€ ์ „ํ™˜, ์Šค๋ฌด์Šคํ•œ ์Šคํฌ๋กค.. ๋“ฑ ํŽธ๋ฆฌํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„  ์ƒ๊ฐ๋ณด๋‹ค๋„ ํ›จ์”ฌ ๋” ๋งŽ์€ ์ •์„ฑ์ด ํ•„์š”ํ•˜๊ณ , ๊ทธ๋Ÿฐ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น์‚ฌ์ดํŠธ์—๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋…ธ๋ ฅ์ด ๋‹ด๊ฒจ์ ธ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๊นจ๋‹ฌ์•˜๋‹ค.

 

์ด ์™ธ์—๋„ ๋‘๋ฒˆ์งธ ๋ฐฐํฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ  ํ™•์ธํ•ด๋ณด๋Š”๋ฐ, ๋‚ด ํ™˜๊ฒฝ์ด๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด์„œ ๋‹ค๋ฅธ ์ดˆ๊ธฐ ํ™˜๊ฒฝ์—์„œ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ๋‹ค์ง๋„ ํ–ˆ๊ณ , ๋‚ด๊ฐ€ ๋Œ€์ถฉ ๋„˜์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ ํŒ€์›๋“คํ•œํ…Œ ํ”ผํ•ด๋ฅผ ๋ผ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— merge๋ฅผ ํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธ์„ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  ์•„์‰ฌ์šด ์ ๋„ ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๊ทธ๋ณด๋‹ค๋„ ๋„ˆ๋ฌด ๋งŽ์€๊ฒƒ๋“ค์„ ๋ฐฐ์› ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐœํŒ์‚ผ์•„ ํ•œ๋‹ฌ ํ”„๋กœ์ ํŠธ ๋•Œ๋Š” ํ›จ์”ฌ ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ๊ฒ ๋‹ค.

 

ํŒ€์›๋“ค๊ณผ 2์ฃผ ๋™์•ˆ ์—ด์‹ฌํžˆ ๋‹ฌ๋ ค์„œ ์‹ ์ฒด์ ์œผ๋กœ๋Š” ๊ต‰์žฅํžˆ ์ง€์นœ ์ƒํƒœ์ง€๋งŒ, ์—ฌ์ „ํžˆ ์ฝ”๋”ฉํ•˜๋Š”๊ฑด ์žฌ๋ฐŒ๊ณ , ์•Œ์•„๊ฐ€๊ณ  ๋ฐฐ์›Œ๊ฐˆ์ˆ˜๋ก ๋„์ „ํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์€ ๋” ๋งŽ์•„์ ธ์„œ ํ•˜๋ฃจ๋งŒ ํ‘น ์ž๊ณ  ์–ผ๋ฅธ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ ์‹ถ๋‹ค..! ๐Ÿ™Œ๐Ÿป

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€