My-portfolio

ksj0314ยท2024๋…„ 10์›” 15์ผ

ํ”„๋กœ์ ํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
2/6
post-thumbnail

>> ํฌํŠธํด๋ฆฌ์˜ค ๋ฐ”๋กœ๊ฐ€๊ธฐ


๐Ÿ“— ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • React๋ฅผ ์ด์šฉํ•ด ์ œ์ž‘ํ•œ ์ €๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

  • ๋ฆฌ์•กํŠธ๋ฅผ ํ•™์Šตํ•œ ํ›„ ์‘์šฉํ•ด ๋ณด๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“˜ ํ”„๋กœ์ ํŠธ ์š”์•ฝ

  • "๋‚˜"๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ ์œ„ํ•ด ์‹ธ์ด์›”๋“œ์˜ ๋ฏธ๋‹ˆํ™ˆํ”ผ๋ฅผ ๋ชจํ‹ฐ๋ธŒ๋กœ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋ฏธ๋‹ˆํ™ˆํ”ผ๋ผ๋Š” ์ฃผ์ œ์— ๋งž๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ์Šคํƒ€์ผ๋ง ํ•˜์˜€์œผ๋ฉฐ ๋ฐฉ๋ฌธ์ž์ˆ˜, ๋ฐฉ๋ช…๋ก, BGM๋“ฑ์˜ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • SPA ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์ •๋œ ๋‹จ์ผ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ํŠน์ • ์˜์—ญ๋งŒ ๋ฉ”๋‰ด์— ๋”ฐ๋ผ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

  • ์ „์ฒดํ™”๋ฉด๋ชจ๋“œ, ๋‹คํฌ๋ชจ๋“œ, ๋ชจ๋ฐ”์ผ๋ชจ๋“œ์˜ ๋ชจ๋“œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๊นƒํ—ˆ๋ธŒ ํŽ˜์ด์ง€ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋นŒ๋“œ, ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋ฐฉ๋ช…๋ก๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Firebase๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


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

1. ํŽ˜์ด์ง€(๋ฉ”๋‰ด)

1) ์ „์ฒด ํŽ˜์ด์ง€


2) About

๋ฏธ๋‹ˆํ™ˆํ”ผ๋ผ๋Š” ์ฃผ์ œ์— ๊ฑธ๋งž์€ ์ž๊ธฐ์†Œ๊ฐœ ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.

  • ๋งํ’์„ ์— ํƒ€์ดํ•‘ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ์€ ํ…์ŠคํŠธ๋ฅผ ๋„ฃ์–ด ์บ๋ฆญํ„ฐ๊ฐ€ ๋งํ•˜๋Š” ๋“ฏํ•œ ์—ฐ์ถœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • setInterval๊ณผ substring์„ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€๋˜๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


3) Career, Social

๊ฐ„๋‹จํ•œ ๊ฒฝ๋ ฅ ์‚ฌํ•ญ๊ณผ ๊นƒํ—ˆ๋ธŒ, Velog์˜ ๋งํฌ ์นด๋“œ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.


4) Project

react-bootstrap์˜ Carousel๊ณผ react-markdown์„ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ์ž…๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ๋ฅผ ์•„์ด์ฝ˜์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋ฐฐ์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ํŒ์—…์ฐฝ์œผ๋กœ ์ƒ์„ธ ํ™”๋ฉด์ด ์˜คํ”ˆ๋ฉ๋‹ˆ๋‹ค.

  • ์ขŒ์ธก์—๋Š” react-bootstrap์˜ Carousel์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    >> react-bootstrap ์‚ฌ์šฉ๋ฒ• ์ž์„ธํžˆ ๋ณด๊ธฐ
  • ์šฐ์ธก์—๋Š” ํ”„๋กœ์ ํŠธ์˜ ์„ค๋ช…๊ณผ ๋งํฌ, ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ์„ ๋‚˜ํƒ€๋‚ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • >> ReadMe ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋ฆฌ๋“œ๋ฏธ์— ์ž‘์„ฑ๋œ ๋”์šฑ ์ƒ์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊นƒํ—ˆ๋ธŒ์— ์ž‘์„ฑ๋œ ReadMe ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ 
    react-markdown์„ ์ด์šฉํ•˜์—ฌ ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ html์— ๋ Œ๋”๋งํ•˜์—ฌ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    >> react-markdown ์‚ฌ์šฉ๋ฒ• ์ž์„ธํžˆ ๋ณด๊ธฐ

5) Board

Firebase๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ ๊ฒŒ์‹œํŒ ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋“ฑ๋กํ•˜์—ฌ ๋ฐฉ๋ช…๋ก์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • npm install firebase ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด Firebase๋ฅผ ์„ค์น˜ํ•˜์—ฌ
    ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ์กฐํšŒ, ์‚ญ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ž‘์„ฑ์ผ์ž, ๋ฐฉ๋ช…๋ก์€ Firestore์— ์ €์žฅ๋˜๋ฉฐ
    ํ”„๋กœํ•„ ์‚ฌ์ง„ ํŒŒ์ผ์€ Storage์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

2. ๋ชจ๋“œ ๋ณ€๊ฒฝ

1) ๋‹คํฌ๋ชจ๋“œ

  • ์‚ฌ์šฉ์ž์˜ ๋ฒ„ํŠผ ํด๋ฆญ์„ ํ†ตํ•ด Light/Dark ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ThemeProvider์„ ์ด์šฉํ•ด ๋‹คํฌ๋ชจ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ styled-components ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2) ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ

  • ๋ฐ์Šคํฌํƒ‘ ๋ชจ๋“œ์—์„œ ๋ฉ”์ธ ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํ™•๋Œ€๋œ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ํ™•๋Œ€๋  ๋•Œ์˜ transition ํšจ๊ณผ๋ฅผ ์œ„ํ•ด ํ•ด๋‹น ์˜์—ญ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ position ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ position: fixed๋กœ ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    โ€ป top, left์˜ ์ดˆ๊ธฐ ๊ฐ’์ด ์—†์œผ๋ฉด transition์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3) ๋ฐ์Šคํฌํƒ‘(๊ฐ€๋กœ) / ๋ชจ๋ฐ”์ผ(์„ธ๋กœ) ๋ชจ๋“œ

  • ๋‹จ์ผ ํŽ˜์ด์ง€ ๊ตฌ์กฐ๋กœ ์„ ํƒํ•œ ๋ฉ”๋‰ด์— ๋”ฐ๋ผ ํŠน์ • ์˜์—ญ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์Šคํฌํƒ‘ ๋ชจ๋“œ์—์„œ๋Š” ํ•ด๋‹น ์˜์—ญ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ,
    ๋ชจ๋ฐ”์ผ ๋ชจ๋“œ์—์„œ๋Š” ํ™”๋ฉด์ด ์Šคํฌ๋กค๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ํŽ˜์ด์ง€์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๋น„์œจ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ์Šคํฌํƒ‘(๊ฐ€๋กœ) / ๋ชจ๋ฐ”์ผ(์„ธ๋กœ) ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
    โ€ป ์ดˆ๊ธฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋“œ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๊ตฌ์กฐ๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์ž‘ํ•˜์˜€์œผ๋‚˜ ๋ชจ๋ฐ”์ผ์˜ ์ž‘์€ ํ™”๋ฉด์—์„œ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์•„ ์•„์–˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“• ์‚ฌ์šฉ๊ธฐ์ˆ 

1. GitHub Pages

  • ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค์ค‘ ํ•˜๋‚˜์ธ ๊นƒํ—ˆ๋ธŒ ํŽ˜์ด์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • gh-pages ํŒจํ‚ค์ง€๋ฅผ installํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ, ๋ฐฐํฌ๋ฅผ ์ž๋™์œผ๋กœ ๋„์™€์ค๋‹ˆ๋‹ค.
    >> [React] gh-pages๋ฅผ ์ด์šฉํ•œ ์›น ํŽ˜์ด์ง€ ๋นŒ๋“œ-๋ฐฐํฌ

2. Firebase

  • ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋นŒ๋“œ, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒํ•˜๋Š” ๋“ฑ์˜ ๋ฐฑ์—”๋“œ ๋กœ์ง์€ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ •๋„๋กœ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— BaaS์ค‘ ํ•˜๋‚˜์ธ Firebase๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฉ๋ช…๋ก๊ณผ ๋ฐฉ๋ฌธ์ž ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    >> [React] Firebase๋ฅผ ์ด์šฉํ•ด ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ
    >> [React] ํŽ˜์ด์ง€ ๋ฐฉ๋ฌธ์ž ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ

3. useState

  • ๋ณ€์ˆ˜์˜ ์ €์žฅ, ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

4. useEffect

  • Lifecycle์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. useLayoutEffect

  • useEffect์™€ ๋น„์Šทํ•˜๊ฒŒ ๋ Œ๋”๋งํ›„ ์ž‘๋™ํ•˜์ง€๋งŒ paint๋˜๊ธฐ ์ „ ๋™๊ธฐ์ ์œผ๋กœ ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ•  ๋•Œ์— ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

6. requestAnimationFrame

  • useLayoutEffect๋Š” DOM์ด ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์Šคํƒ€์ผ ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • requestAnimationFrame์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋˜๊ณ  repaint๋˜๊ธฐ ์ง์ „์— ์ž‘๋™ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์— ์ ํ•ฉํ•˜์—ฌ useLayoutEffect์•ˆ์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

7.useRef

  • ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

8. forwardRef

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ์š”์†Œ์˜ ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

9. useImperativeHandle

  • ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์™€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋‘ ์กฐ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10. useContext

  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ „์—ญ์ ์ธ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

11. useMemo

  • ๋ถˆํ•„์š”ํ•œ ์žฌ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

12. Styled-Component

  • ๊ณ„์ธต์ ์ธ ๋””์ž์ธ ๊ตฌ์กฐ์™€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋””์ž์ธ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

13. ThemeProvider

  • ๋‹คํฌ ๋ชจ๋“œ, ๋ชจ๋ฐ”์ผ ๋ชจ๋“œ ๋“ฑ ์ „์ฒด์ ์ธ ๋””์ž์ธ ๋ณ€ํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

14. ReactMarkdown

  • ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

15. YTPlayer

  • react-youtube ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์œ ํŠœ๋ธŒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐ๊ฒฝ์Œ์•…์„ ์žฌ์ƒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

16. react-bootstrap

  • Bootstrap์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Carousel ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

17. ReactDOM.createPortal

  • ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ DOM๊ณ„์ธต ์™ธ๋ถ€์—์„œ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • position fixed๋œ ํŒ์—…์ฐฝ์˜ index ๋ฌธ์ œ๋กœ ์ธํ•ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

React ํ•™์Šต ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.
>> React ํ•™์Šต ์ •๋ฆฌ ๋ฐ”๋กœ๊ฐ€๊ธฐ


๐Ÿ““ ์‹œํ–‰์ฐฉ์˜ค

1. 2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ gh-pages๋กœ ๋ฐฐํฌ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์ƒˆ๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ gh-pages๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ npm run deploy ํ–ˆ๋Š”๋ฐ ์ด์ „์— ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ์ดํŠธ์— ์—…๋กœ๋“œ๋˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

>> ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ”๋กœ๊ฐ€๊ธฐ

2. ์ด๋ฏธ์ง€ ํ”„๋ฆฌ๋กœ๋”ฉ

์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ํ›„ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋ฉด ์œ„ ์˜์ƒ์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ๊ฐ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

>> ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ”๋กœ๊ฐ€๊ธฐ

3. ๋ชจ๋ฐ”์ผ์—์„œ ์Šคํฌ๋กค ์‹œ ์ฃผ์†Œ์ฐฝ, ํ•˜๋‹จ ๋ฉ”๋‰ด UI ์˜ค๋ฅ˜

๋„ค์ด๋ฒ„์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ

๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค ์กฐ์ž‘์„ ๊ฐ์ง€ํ•ด์„œ ์ฃผ์†Œ์ฐฝ/ํ•˜๋‹จ๋ฉ”๋‰ด UI๋ฅผ on/off ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์œ„ GIF๋ฅผ ํ™•์ธํ•˜๋ฉด ๋„ค์ด๋ฒ„์—์„œ๋Š” ์Šคํฌ๋กคํ• ๋•Œ UI์˜ on/off๊ฐ€ ์ž˜ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ
์šฐ์ธก์˜ ์‚ฌ์ดํŠธ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด root ์˜์—ญ์—์„œ ์Šคํฌ๋กค์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์œผ๋กœ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์Šคํฌ๋กค์ด ์ด๋ฃจ์–ด์ง€๊ธฐ์— ์›ํ•˜๋Š” ๋™์ž‘์ด ์ด๋ค„์ง€์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

>> ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ”๋กœ๊ฐ€๊ธฐ

4. ํŒ์—…์ฐฝ์˜ z-index

ํŒ์—… ํ™”๋ฉด์˜ ๋’ค๋ฅผ ์–ด๋‘ก๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด z-index์˜ ๊ฐ’์„ ์˜ฌ๋ ค์ฃผ๊ณ  background์˜์—ญ์„ ๋ถˆํˆฌ๋ช…ํ•˜๊ฒŒ ์„ค์ •ํ•˜์˜€๋Š”๋ฐ z-index๊ฐ€ ์„ค์ •๋œ ๋‹ค๋ฅธ ๋ฒ„ํŠผ์ด ๋šซ๊ณ  ์˜ฌ๋ผ์˜ค๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช… z-index์˜ ๊ฐ’์„ ํŒ์—…์ฐฝ์— ๋” ๋†’๊ฒŒ ์„ค์ •ํ–ˆ๋Š”๋ฐ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

>> ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ”๋กœ๊ฐ€๊ธฐ

5. ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ ์ธก์ •

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ ํ›„ ์‚ฌ์ด์ฆˆ๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด useEffect()๋ฅผ ์ด์šฉํ•ด setSize()๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์žฅ์€ ๋ณด์ด๋Š” ์˜ค๋ฅ˜ ์—†์ด ์ž‘๋™ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ฌธ์ œ์ ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

>> ์ˆ˜์ •๋œ ์ฝ”๋“œ ์ž์„ธํžˆ ๋ณด๊ธฐ


๐Ÿ’ก ์ €์ž‘๊ถŒ

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ๋‚ด ์ด๋ฏธ์ง€๋“ค์€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋น„์ƒ์—…์šฉ์œผ๋กœ ์ œ์ž‘, ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€๋กœ ๋ฌด๋‹จ ๋„์šฉ์„ ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€