๐ ์ฌ์ด ์์
๊ด๋ฆฌ๋ก ์ด๋ฆฌ๋ ์ ํํ ๋์ ๊ฒฐ์ค ๐
๊ณผ์ธ์ ์ถ๊ฒฐ ์ฒดํฌ๋ถํฐ ์์
๋น ๊ด๋ฆฌ๊น์ง ํ๋ฒ์ ํด๋ฆญ์ผ๋ก ์ฝ๊ฒ ๊ด๋ฆฌํ๋ ์๋น์ค
์๋น
|
ํ ์ฐ
|
์ฑ๊ฒฝ
|
ํฌ์
|
์ง์
|
๊ถ์๋น ๐ Web FE ๐ |
๊ถํ์ธ ๐ Web FE ๐ |
๋ฅ์ฑ๊ฒฝ ๐ Web FE ๐ |
๋ฐํฌ์ ๐ฅ Web FE ๐ฅ |
์์ง์ ๐ Web FE ๐ |
์ญํ | ์ข ๋ฅ |
---|---|
Library | |
Programming Language | |
Styling | |
State Management | |
Formatting | |
Version Control | |
Data Fetching |
ํ์ ๊ณผ๋ชฉ ๋ฑ๋ก
ํ์ฐจ, ๋ ์ง, ์๊ฐ ์ฌ๋ผ์ด๋ ๊ตฌํ
์ ๊ธฐ ์์ผ ์ ํ
(์ฒซ ์์
์ผ ๊ฒฝ์ฐ ๋ํดํธ ๊ฐ์ ํ์ฌ ๋ ์ง์ด๋ฉฐ, ํ์ฌ ์ ํํ ์์ผ์ ํด๋นํ์ง ์๋ ๋ ์ง๋ฅผ ์ฒซ ์์
์ผ๋ก ์ ํํ ๊ฒฝ์ฐ, ์ ์ฅ ๋ถ๊ฐ ๋ฐ ์ ํ๋ ์์ผ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ํด๋น ์์ผ์ด ์๋ ๋ ์ง ๋ฒํผ ๋นํ์ฑํ)
์์
์ผ์ ์์ธ ์ผ์ด์ค ์ฒ๋ฆฌ
-> ์กฐ๊ฑด๋ฌธ์ ํตํด ์๊ฐ ๋ฐ ์ข
๋ฃ ์๊ฐ์ ๋ชจ๋ ์
๋ ฅํ์ง ์์์ ๋ ์์
์ผ์ ์ถ๊ฐ ๋ฒํผ ๋นํ์ฑํ
->์๊ฐ๋ง ์
๋ ฅํ๊ณ ์์ผ์ ์
๋ ฅํ์ง ์์ ๊ฒฝ์ฐ์๋ ์์
์ผ์ ์ถ๊ฐ ๋ฒํผ ๋นํ์ฑํ
->์์ผ์ ์ ํํ ๋, ์์, ์ข
๋ฃ ์๊ฐ์ ์
๋ ฅํ์ง ์์ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฒํผ ๋นํ์ฑํ
->์ฒซ ์์
์ผ์ ํด๋นํ๋ ์์ผ์ด ์ ํํ ์์
์ผ์ ์์ผ์ ํด๋นํ์ง ์๋ ๊ฒฝ์ฐ ์ ์ฅ ๋ฒํผ ๋นํ์ฑํ
->์ฒซ ์์
์ผ์ ํด๋นํ๋ ์์ผ์ด ์ ํํ ์์
์ผ์ ์์ผ์ ํด๋นํ๋ ๊ฒฝ์ฐ ์ ์ฅ ๋ฒํผ์ ํ์ฑํ
useState
๋ฅผ ์ฌ์ฉํด ๊ฐ ์
๋ ฅํผ์ focus
๋์๋ ์ง ๊ด๋ฆฌ
์
๋ ฅ๋ฐ์ ๊ฐ recoil
๋ก ๊ด๋ฆฌ
swiper
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ฌ๋ผ์ด๋ ๊ตฌํ
<StyledSwiper
direction="vertical"
slidesPerView={7}
spaceBetween={15}
freeMode={true}
freeModeSticky={true}
freeModeMomentumRatio={0.25}
freeModeMinimumVelocity={0.1}
loop={true}
loopAdditionalSlides={5}
slideToClickedSlide={true}
centeredSlides={true}
onSlideChange = {handleSlideChange}
>
{slides}
</StyledSwiper>
loop = {true}
์์ฑ๊ฐ์ ํตํ ์คํฌ๋กค์ ์ด์ด์ง๋๋ก ๊ตฌํ
swiper.realIndex
๋ฅผ ํตํด ์ ์ ๊ฐ ์ ํํ ์ธ๋ฑ์ค์ ์ฌ๋ผ์ด๋ ์ถ์
๋ ์ง ์ฌ๋ผ์ด๋์ ๊ฒฝ์ฐ, ํ์ฌ ๋ฌ์ ๊ธฐ์ค์ผ๋ก ์ด์ , ํ์ฌ, ๋ค์ ๋ฌ์ ๋ชจ๋ ๋ ์ง๋ฅผ ๋ด๋ ๊ฐ์ฒด ๋ฐฐ์ด์ ์์ฑํ์ฌ ๊ฐ ๊ฐ์ฒด๊ฐ ํ๋์ ์ฌ๋ผ์ด๋๊ฐ ๋๋๋ก ๊ตฌํ
์์
๊ด๋ฆฌ ( ์ถ๊ฒฐ ๋ฐ ์
๊ธ ๊ด๋ฆฌ)
์ถ๊ฒฐ ์ฒดํฌ ํ ์๋ฆผ ๋ณด๋ด๊ธฐ
์
๊ธ ์๋ฆผ ๋ณด๋ด๊ณ ์
๊ธ ๋ฑ๋ก
์ฐ์ฅํ์ง ์์ ์์
์ด ์๋ ๊ฒฝ์ฐ ๋ฐฐ๋ ๋์ฐ๊ธฐ
children, props
๋ฅผ ์ด์ฉํ ๊ณตํต ์ปดํฌ๋ํธ ๊ตฌํ
์์
๋ด์ญ ๋๋ ์
๊ธ ๋ด์ญ์ธ์ง์ ๋ํ ํ์ฌ ํ์ด์ง ์ ๋ณด recoil
๋ก ๋ถ๋ฌ์ค๊ธฐ
ํ ํ์ด์ง์์ ์์
์งํ ์ค์ธ ํ์ ์ถ์ ์ฒดํฌ
์์
๊ด๋ฆฌ ํ์ด์ง์์ ์ถ๊ฒฐ ์ฒดํฌ ๋ฐ ์์
๋์น ์ถ๊ฒฐ ํ์ด์ง์์ ์ถ๊ฒฐ ์ฒดํฌ
์ถ๊ฒฐ ์์ ์ ์ด์ ์ถ๊ฑ ์ฌํญ ๋ฒํผ ๋นํ์ฑํ
์ถ๊ฒฐ ์ฒดํฌ ํ ์คํธ ๋ชจ๋ฌ, ์ถ๊ฒฐ ์ฒดํฌ ์ ํ์ ํ์ธ ๋ชจ๋ฌ ๋์ฐ๊ธฐ
์ต์ข
์ถ๊ฒฐ ์ฒดํฌ ํ์ธ ์ ์ฒดํฌ๋๋ ์ ๋๋ฉ์ด์
๊ตฌํ
์ต์ข
์ถ๊ฒฐ ์ฒดํฌ ์ดํ ์ถ๊ฒฐ ์๋ฆผ ์ ์ก ํ ์คํธ ๋ชจ๋ฌ
ํธ์ฌ ์๋ฆผ์ ์๋๊ฐ ํ์ฉํ์ง ์์์ ์,
๊ฒฝ๊ณ ๋ชจ๋ฌ
์ถ๊ฒฐ ์๋ฆผ
-> ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ์ (์ถ์, ๊ฒฐ์, ์ทจ์, ์ถ์์ฒดํฌ ๋์น ์ดํ์ ์ถ์, ๊ฒฐ์, ์ทจ์ ์ ํ ๋ฑ) switch-case
๋ฌธ๊ณผ ์ผํญ ์ฐ์ฐ์
์ฌ์ฉ
์บ๋ฆฐ๋๋ทฐ date-fns
์ผ๋ก ๊ตฌํ
์ค๋ ๋ ์ง๋ถ๋ถ ๋ฉ์ผ ์ปฌ๋ฌ์ ๋ฐฐ๊ฒฝ์ผ๋ก ๋ค๋ฅธ ๋ ์ง์ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ
get
ํด์จ ๋ฐ์ดํฐ์ ๋ง๋ ๋ ์ง์ ์๊ฐ ์์๋๋ก ์ฌ๋ ์ด๋ฆ ๋ฐ ์์ ์๊ฐ ๋ถ๋ฌ์ ์บ๋ฆฐ๋์ ๋์์ฃผ๊ธฐ
์ค์ผ์ค ์์ ์บ๋ฆฐ๋, ์์ ์ด ๋ถ๊ฐ๋ฅํ๊ณ ์กฐํ๋ง ๊ฐ๋ฅํ ์บ๋ฆฐ๋, ์์๋ก ์ ์ฅํ ์์
์๊ฐ๊ณผ ํจ๊ป ๊ฐ์ง๊ณ ์๋ ์ค์ผ์ค์ ํ ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์บ๋ฆฐ๋๋ก ๋๋๊ธฐ
๊ฐ ์บ๋ฆฐ๋์์ ์ํ๋ ๋ ์ง๋ฅผ ํด๋ฆญํ ์, ํด๋น ๋ ์ง์ ์๋ ์ค์ผ์ค์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋ ๋ชจ๋ฌ ๊ตฌํ
๊ฐ ๋ ์ง์ 4๊ฐ ์ด์์ ์ค์ผ์ค์ด ์์ ๊ฒฝ์ฐ, 2๊ฐ๊น์ง๋ง ๋ณด์ฌ์ฃผ๊ณ ๋๋ณด๊ธฐ์ ๊ด๋ จ๋ ์์ด์ฝ ๋์์ฃผ๊ธฐ
์์ ์ด ๊ฐ๋ฅํ ์บ๋ฆฐ๋์์ ์ํ๋ ๋ ์ง๋ฅผ ํด๋ฆญํ๋ฉด ํ ์คํธ ๋ชจ๋ฌ์์ ํธ์ง๋ฒํผ์ ๋๋ฅผ ์์ ํธ์ง ๋ชจ๋๋ก ์ ํ
ํธ์ง ๋ชจ๋ ๋ชจ๋ฌ์์ ํธ์งํ๊ธฐ ์ํ๋ ์ค์ผ์ค์ ํด๋ฆญํ์ฌ ํธ์ง ํ์ด์ง๋ก ์ด๋
ํธ์ง ํ์ด์ง์์ ์ฌ๋ผ์ด๋๋ฅผ ์ด์ฉํด ์ํ๋ ์ค์ผ์ค๋ก ์์ ํ๊ณ , ์ ์ฅ์ ๋๋ฅด๋ฉด ๋ฐ๋ก ์บ๋ฆฐ๋๋ก ํ์ธํ๋๋ก ๊ตฌํ
date-fns
๋ฅผ ์ฌ์ฉํ ์ ์ฒด์ ๋ ์ด์์ ๊ตฌํ
while
๋ฌธ์ ์ด์ฉํด ํ ๋ฌ์ ๋ ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ๊ตฌํ
๊ณตํต ์ปดํฌ๋ํธ
๋ฅผ ์ด์ฉํ์ฌ, ํ ์คํธ ๋ชจ๋ฌ, ์์ ๋ทฐ ์ฌ๋ผ์ด๋ ๋ฑ ๊ตฌํ
react-query
์ get-
patch`๋ฅผ ์ฌ์ฉํ data ๊ด๋ฆฌ
PWA ํ๊ฒฝ์์ ์ผ๋ฐ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋์ผํ๊ฒ ํธ์ ์๋ฆผ์ ๋ฐ์ ์ ์๋๋ก ์ค์
์ ์๋ ์ฌ์ฉ์๊ฐ ์ถ๊ฒฐ ์ฒดํฌ ๋๋ ์
๊ธ ์๋ฆผ์ ๋ณด๋ผ ๊ฒฝ์ฐ, ํ๋ถ๋ชจ ์ฌ์ฉ์์๊ฒ ํธ์ฌ ์๋ฆผ์ด ๊ฐ๋๋ก ๊ตฌํ
ํ์ด์ด๋ฒ ์ด์ค ํ๋ก์ ํธ ์์ฑ ํ ๋ฐ์ ํ sdk๋ฅผ ์ด์ฉํด FCM์ ์ฐ๊ฒฐํ์ฌ ํธ์ ์๋ฆผ ๊ตฌํ
FCM์ผ๋ก๋ถํฐ ์ ์ ์ deviceToken
์ ๋ฐ๊ณ , ์ด๋ฅผ ์๋ฒ์๊ฒ postํ์ฌ ๊ธฐ๊ธฐ ๋ฑ๋ก
๋ฑ๋ก๋ ๊ธฐ๊ธฐ๋ก ์๋ฆผ์ด ๊ฐ ์ ์๋๋ก ๊ตฌํ
.
PWA ํ๊ฒฝ์์ ์ผ๋ฐ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋์ผํ๊ฒ ํธ์ ์๋ฆผ์ ๋ฐ์ ์ ์์ต๋๋ค.
|-- ๐ .github
|-- ๐ .husky
|-- ๐ node_modules
|-- ๐ public
|-- ๐ src
|-- ๐ api
|-- ๐ atom
|-- ๐ assets
|-- ๐ icon
|-- ๐ image
|-- ๐ assets.d.ts
|-- ๐ index.ts
|-- ๐ core
|-- ๐ components
|-- ๐ common
|-- ๐ hooks
|-- ๐ mocks
|-- ๐ pages
|-- ๐ style
|-- globalStyle.ts
|-- style.d.ts
|-- theme.ts
|-- ๐ utils
|-- ๐ type
|-- App.tsx
|-- main.tsx
|-- Router.tsx
|-- vite-env.d.ts
|-- .eslintrc.cjs
|-- .gitignore
|-- .prettierrc
|-- index.html
|-- package.json
|-- README.md
|-- tsconfig.json
|-- tsconfig.node.json
|-- vite.config.ts
|-- yarn.lock