๋์๋ฅผ ๊ฒ์ํ๊ณ , ์์ฑํ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋ฅธ ์ ์ ์ ๊ณต์ ํ ์ ์๋ ์น์ฌ์ดํธ
๐ 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์ฉ ์ฆ๊ฐํ์ฌ ๋ฆฌ๋ทฐ ์ถ๋ ฅ. - ์ต์ ์ / ์ธ๊ธฐ์์ผ๋ก 
isSelectedstate ๋ณ๊ฒฝ ์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 | 
|---|---|
| ์ฐจ์ ์ง | ์ฃผํ๋ฏธ | 
| ์ด์น๋ฏผ | ์ต์ธ์ง | 
| ๋ง์ฃผ์ | ์ด์์ | 

























