๋์๋ฅผ ๊ฒ์ํ๊ณ , ์์ฑํ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋ฅธ ์ ์ ์ ๊ณต์ ํ ์ ์๋ ์น์ฌ์ดํธ
๐ Deploy : https://www.rebook-project.site/
๐ Video : https://youtu.be/iQLW2u6962M
- ๋ก๊ณ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ๋ฅผ ๋ณผ ์ ์๋ '๋ฆฌ๋ทฐํญ'๊ณผ ๋ฆฌ๋ทฐ์ด๋ฅผ ๋ณผ ์ ์๋ '๋ฆฌ๋ทฐ์ดํญ'
- ๋ก๊ทธ์ธ ๋ฒํผ ๋ฐ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฐ๋๋ ํค๋, ๋ชจ๋ฌ์ฐฝ ๊ตฌํ
- react-material์ carousel ui๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐ๋ ์ด๋ฏธ์ง ์ถ๋ ฅ
- ๋์ ๋๋ ์ ์ ๊ฒ์์ด๋ฅผ ๋ฐ๊ณ onSubmit์ search reducer๋ก dispatch ๋ฐ SearchPage๋ก ์ด๋
- SearchForm์ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๊ฒ์์ด๋ฅผ ์ ๋ฌํ๋ ์ญํ ๋ง ์ํํ๋๋ก ๊ตฌํ
- onReset btn์ผ๋ก ๊ฒ์์ด๋ฅผ ๋ฐ๋ก ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด ์ ์ ํธ์ ๋๋ชจ
- useInput ์ปค์คํ ํ ์ฌ์ฉ์ ํตํด ๊ฒ์์ด state ๊ด๋ฆฌ
- ์ธํฐํํฌ ๋ฒ ์คํธ์ ๋ฌ api๋ฅผ ํตํด ๊ตญ๋ด๋์ ์ค ๋ฒ ์คํธ์ ๋ฌ top 5 ์ถ๋ ฅ
- ๋์ ํด๋ฆญ์ ํด๋น ๋์์ bookDetail page๋ก ์ด๋
- '์ข์์' ๋ฅผ ๋ง์ด ๋ฐ์ ์์ผ๋ก ๋ฆฌ๋ทฐ 6๊ฐ ์ถ๋ ฅ
- ํด๋น ๋ฆฌ๋ทฐ์ '๋๋ณด๊ธฐ' ํด๋ฆญ์ ReviewDetail Page๋ก ์ด๋
- '๋๋ณด๊ธฐ' ํด๋ฆญ์ Review Page๋ก ์ด๋
- ์นด์นด์ค oauth ๋ก๊ทธ์ธ
- react-kakao-login ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- ์นด์นด์ค ๋ก๊ทธ์ธ ํ jwt ๋ก๊ทธ์ธ ๊ตฌํ
- ๊ฐ์ ๋ ์ ์ ๊ฐ ์๋ ๊ฒฝ์ฐ /signupํ์ด์ง๋ก ์ด๋
- ์ต์ 1๊ฐ์์ 3๊ฐ genre ์ ํ ๊ฐ๋ฅ
- useCheck๋ก ์ ํํ value ๊ฐ ๋ฐฐ์ด๋ก ๋ฆฌํด
- DB์ ๋๋ค์ ์ค๋ณต ์ฒดํฌ
- ์ฌ์ฉํ ์ ์๋ ๋๋ค์์ผ ๊ฒฝ์ฐ Input disabled ์ฒ๋ฆฌ
- useInput ์ปค์คํ ํ ์ผ๋ก value ๊ฐ ๊ด๋ฆฌ
- ์นด์นด์ค ๋ก๊ทธ์ธ์์ useHistory๋ก state ๊ฐ์ ์ ์ก
- ์นด์นด์ค ๋ก๊ทธ์ธ์์ ๋์ด์จ ๊ฐ์ useLocation์ ํตํด ์ ์ฅ
- GenreSelect์ NicknameCheck๋ useRef, forwardRef๋ฅผ ํตํด ๊ฐ์ ์ ๋ฌ ํ validation
- signup API๋ก ์ ์ก
- ์๋ผ๋ ๋์ ๊ฒ์ api๋ฅผ ์ด์ฉํ์ฌ ๋์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ถ๋ ฅ
- ํด๋น ์ฑ ์ isbn์ params์ผ๋ก ์ ๋ฌํ์ฌ ํด๋น ์ฑ ์๋ํ ๋ฆฌ๋ทฐ๋ฅผ ์ต์ ์ ๋ฐ ์ธ๊ธฐ์์ผ๋ก 5๊ฐ์ฉ ์ถ๋ ฅ
- '๋๋ณด๊ธฐ' ํด๋ฆญ์ ํด๋น ๋ฆฌ๋ทฐ์ review detail page๋ก ์ด๋
- ์ ์ ์ ๋ก๊ทธ์ธ ์ํ ์ ๋ฌด๋ฅผ ํ์ธํ ๋ค, ๋ก๊ทธ์ธ ์ํ์ผ์ wirteReview Page๋ก ์ด๋
- react-quill editor ์ฌ์ฉ์ผ๋ก ์ ์ ํธ์ ๋๋ชจ
- ๋์์ ๋ํ ์์์ ํ๊ทธ๋ฅผ ์ ๋ ฅ ํ ์ ์์
- ์ํฐ ํ ํ๊ทธ ์คํ์ผ๋ง์ ํตํด UI ํฅ์
- ๋์์ ๋ํ ์์์ ๋ณ์ ์ ๋งค๊ธธ ์ ์์
- ํด๋น ๋ฆฌ๋ทฐ๋ฅผ ๊ณต๊ฐ๊ธ ๋๋ ๋น๊ณต๊ฐ๊ธ๋ก ์์ฑํ ์ ์์
โ ๋์ ๊ฒ์๊ณผ ์ ์ ๊ฒ์์ด ๊ฐ๋ฅํ ํ์ด์ง
โ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ redux๋ก ๊ด๋ฆฌ
- ๋๋ฉํ์ด์ง์ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ
- react sticky library๋ฅผ ํตํด sticky ํจ๊ณผ
- ์๋ผ๋ api๋ก๋ถํฐ ๋ฐ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ Grid item์ผ๋ก ์ถ๋ ฅ
- ํด๋น ์ฑ ์ ํด๋ฆญํ๋ฉด bookDetail page๋ก ์ด๋
- ๊ฐ์ ํ ์ ์ ์ ๋๋ค์์ผ๋ก ๊ฒ์
- ํด๋น ์ ์ ๋ฅผ ํด๋ฆญํ๋ฉด peopleDetail page๋ก ์ด๋
- ๋ด ์ ๋ณด ๋ณด์ฌ์ฃผ๊ธฐ
- ํ๋กํ ์ฌ์ง ์ ๋ก๋, ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- ํ๋กํ ์ฌ์ง ์ ์ฅ ํ filepath, ์ ํธ ์ฅ๋ฅด, ์๊ธฐ์๊ฐ์ ํจ๊ป ๋ด ์ ๋ณด ์ ๋ก๋
- ๊ณต๊ฐ๋ ๋ฆฌ๋ทฐ / ๋น๊ณต๊ฐ ๋ฆฌ๋ทฐ
- 1ํ์ด์ง์ ๋ฆฌ๋ทฐ 4๊ฐ์ฉ ์๋ก ๋ฐ์์ค๋๋ก ๊ตฌํ
- ๋ฌดํ ์คํฌ๋กค ํ์ด์ง๋ค์ด์ : 'react-intersection-observer'์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ง์ง๋ง item์ ref๋ฅผ ์ฐธ์กฐํ์ฌ page๋ฅผ 1์ฉ ์ฆ๊ฐํ์ฌ ์๋ก ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๋ ์ด์ ๊ฐ์ ธ์ค๋ ๊ฐ์ด ์์ ๋ fetchReview๋ฅผ ์ค์ง์ํด
- ์ฌ์ฉ์๊ฐ ์ข์์ ํ์ํ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
- useCheck ์ปค์คํ ํ ์ผ๋ก ์ฒดํฌ ํ์์ value๊ฐ์ด ๋ณํ๊ฐ ์๊ฒผ์ ๋๋ฅผ useEffect๋ก ํ์งํ์ฌ UnLike API๋ฅผ ํธ์ถ
- ๋ฌดํ ์คํฌ๋กค ํ์ด์ง๋ค์ด์
react-infinite-scroll-component
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์คํฌ๋กค ์ page๋ฅผ 1์ฉ ์ฆ๊ฐํ์ฌ ๋ฆฌ๋ทฐ ์ถ๋ ฅ. - ์ต์ ์ / ์ธ๊ธฐ์์ผ๋ก
isSelected
state ๋ณ๊ฒฝ ์fetchReviews
ํธ์ถ ํ์ฌ ๋ฆฌ๋ทฐ ์ถ๋ ฅ
- ๋์ image, ๋์๋ช , ๋ฆฌ๋ทฐ ๋ณ์ , ๋ฆฌ๋ทฐ ๋ด์ฉ(summary), ๋ฆฌ๋ทฐ์ด ๋๋ค์ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ ํด๋ฆฌ ์ ํด๋น ๋์์
Review Detail Page
๋ก ์ด๋
- ๋์ image, ๋์ ์ ๋ณด ์ถ๋ ฅ
- ๋์ image, ๋์ ์ ๋ชฉ ํด๋ฆญ ์ ํด๋น ๋์์
Book Detail Page
๋ก ์ด๋
- ๋ฆฌ๋ทฐ ์์ฑ์ ํ๋กํ image, ๋๋ค์, ๋ฆฌ๋ทฐ ๋ณ์ , ๋ฆฌ๋ทฐ ํ๊ทธ, ๋ฆฌ๋ทฐ ๋ด์ฉ(html ์ถ๋ ฅ), ๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ ์ข์์ ๊ธฐ๋ฅ
- ๋น๋ก๊ทธ์ธ ์ฌ์ฉ์
- '๋ก๊ทธ์ธ์ ํด์ฃผ์ธ์'๋ผ๋ ๊ฒฝ๊ณ ์ฐฝ์ ๋ณด์ฌ์ค๋๋ค
- ๋ก๊ทธ์ธ ์ฌ์ฉ์
- ๋น๋ก๊ทธ์ธ ์ฌ์ฉ์
๐ ์์ธ ์ด๋ฏธ์ง ๋ณด๊ธฐ
- ๋ฌดํ ์คํฌ๋กค ํ์ด์ง๋ค์ด์
react-infinite-scroll-component
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์คํฌ๋กค ์ page๋ฅผ 1์ฉ ์ฆ๊ฐํ์ฌ ๋ฆฌ๋ทฐ ์ถ๋ ฅ. - ์ฌ์ฉ์๊ฐ ์ ํํ ์ฅ๋ฅด ๋ฒํธ๋ก ์๋ก์ด ๋ฐฐ์ด๋ก ๋ง๋ค์ด isSelected์ ์ ์ฅ ํ ์ฅ๋ฅด ๋ฒํธ ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ state ๋ณ๊ฒฝ ์ fetchPerson ํธ์ถํ์ฌ ํด๋น ๋ฆฌ๋ทฐ์ด ์ถ๋ ฅ
- 1๊ฐ ๋ฏธ๋ง ์ ํ
- 1๊ฐ ๋ฏธ๋ง์ผ๋ก ๋ณ๊ฒฝ ์ 0๋ฒ์งธ ์์์ธ ์์ค ๋ฐ์ดํฐ ํธ์ถ
setIsSelected([0]);
- 1๊ฐ ๋ฏธ๋ง์ผ๋ก ๋ณ๊ฒฝ ์ 0๋ฒ์งธ ์์์ธ ์์ค ๋ฐ์ดํฐ ํธ์ถ
- 1๊ฐ ์ด์ 3๊ฐ ์ดํ ์ ํ
isSelected.sort();
๋ก ์ฅ๋ฅด ๋ฒํธ ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ๋ฐ์ดํฐ ์ถ๋ ฅ
- 3๊ฐ ์ด๊ณผ ์ ํ
- 4๊ฐ์งธ ์ ํํ๋ ์ฅ๋ฅด ๋ฒํธ
pop
ํ, ๊ธฐ์กด์ ์ถ๋ ฅ๋ ๋ฆฌ๋ทฐ์ด ๋ฐ์ดํฐ ์ ์งisSelected.pop();
- 4๊ฐ์งธ ์ ํํ๋ ์ฅ๋ฅด ๋ฒํธ
- 1๊ฐ ๋ฏธ๋ง ์ ํ
- ๋ฆฌ๋ทฐ์ด ํ๋กํ image, ๋๋ค์, ์ฅ๋ฅด, ์๊ธฐ์๊ฐ(summary) , ์์ฑ ๋ฆฌ๋ทฐ ์ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ์ด ํ๋กํ image ์์์ ๋ฐ๋ผ ํ๋กํ background ์์ ๋ณ๊ฒฝ
- ๋ฆฌ๋ทฐ์ด ํด๋ฆฌ ์
People Detail page
๋ก ์ด๋
- ๋ฆฌ๋ทฐ์ด profile image, ๋๋ค์, ์ฅ๋ฅด, ์๊ธฐ์๊ฐ(summary) , ์์ฑ ๋ฆฌ๋ทฐ ์ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ์ด profile image ์์์ ๋ฐ๋ผ ํ๋กํ background ์์ ๋ณ๊ฒฝ
- ํด๋น ๋ฆฌ๋ทฐ์ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ ์ถ๋ ฅ
- ๋์ image, ๋์๋ช , ๋ฆฌ๋ทฐ ๋ณ์ , ๋ฆฌ๋ทฐ ๋ด์ฉ(summary), ๋ฆฌ๋ทฐ์ด ๋๋ค์ ์ถ๋ ฅ
- ๋ฆฌ๋ทฐ ํด๋ฆญ ์
Review Detail Page
๋ก ์ด๋
https://www.rebook-project.site/
npm run dev
- Javascript(Nodejs)
- Nestjs
- JWT
- MySQL, AWS(EC2, PM2, multer-S3)
- CORS
- dotenv
- jsonwebtoken
- helmet
- winston
Frond-End | Back-End |
---|---|
์ฐจ์ ์ง | ์ฃผํ๋ฏธ |
์ด์น๋ฏผ | ์ต์ธ์ง |
๋ง์ฃผ์ | ์ด์์ |