An open API service indexing awesome lists of open source software.

https://github.com/ssi02014/youtube


https://github.com/ssi02014/youtube

Last synced: 8 months ago
JSON representation

Awesome Lists containing this project

README

          

# ๐Ÿ’ป Youtube App
### node.js์™€ react๋กœ ๋งŒ๋“  Youtube App

## ๐ŸŽฅ MainPage View
![mainPage](https://user-images.githubusercontent.com/64779472/107622385-1c921b00-6c9b-11eb-95db-585964e407d0.PNG)


## ๐Ÿ”– YouTube App์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ํ–‰๋™ ์ˆ˜์น™
1. **" npm install or yarn install "** ์„ backend ํด๋”์—์„œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (๋ฐฑ์—”๋“œ ์ข…์†์„ฑ ๋‹ค์šด๋ฐ›๊ธฐ)
2. **" npm install or yarn install "** ์„ client ํด๋”์—์„œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (ํ”„๋ก ํŠธ์—”๋“œ ์ข…์†์„ฑ ๋‹ค์šด๋ฐ›๊ธฐ)
3. backend ํด๋”์—์„œ **" npm start or yarn start "** ๋ฅผ ํ†ตํ•ด server๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ์„ธ์š”.
4. client ํด๋”์—์„œ **" npm start or yarn start "** ๋ฅผ ํ†ตํ•ด client๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ์„ธ์š”.


### โ—โ— ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ์กด์— ๋งŒ๋“  Boiler-Plater์˜ ์„œ๋ฒ„์™€ ๊ณต์œ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
- Boiler-Plater: https://github.com/ssi02014/BoilerPlate


## ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป Youtube App ๊ธฐ๋Šฅ
1. **Boiler-Plate: Login, Register, Logout**
2. **Home Page**
- ์œ ์ €๊ฐ€ ์—…๋กœ๋“œํ•œ Video๋“ค ๋‚˜์—ด
3. **Video Upload**
- ์„œ๋ฒ„์— ๋น„๋””์˜ค ์ €์žฅ
- ์„œ๋ฒ„์— ๋น„๋””์˜ค ์ธ๋„ค์ผ ์ €์žฅ
4. **Video Detail Page**
- ์—…๋กœ๋“œ ๋œ ๋น„๋””์˜ค ์‹œ์ฒญ
- ์‚ฌ์ด๋“œ์— ๋น„๋””์˜ค Section
5. **User Subscribe**
- ๊ตฌ๋… ํŽ˜์ด์ง€์—์„œ๋Š” ๊ตฌ๋…ํ•œ ํšŒ์›์˜ Video๋งŒ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ
6. **Comment**
- ๋Œ€๋Œ“๊ธ€ ๊ธฐ๋Šฅ
7. **Like, Dislike ๊ธฐ๋Šฅ**
- Video์˜ like, dislike
- comment์˜ like, dislike


## ๐Ÿ” Server ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
1. multer: ๋…ธ๋“œ ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ Dependency
2. fluet-ffmpeg: thumbnail ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
- fluet-ffmpeg๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ffmpeg๋ฅผ ์„ค์น˜ํ•ด์•ผ๋จ
- **ffmpeg ์œˆ๋„์šฐ ์„ค์น˜ ์ฐธ๊ณ ** : https://blog.naver.com/chandong83/222095346417


## ๐Ÿ“ˆ Client ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
1. react-dropzone: video uploadํ•  ๋•Œ ์‚ฌ์šฉ (VideoUploadComponent)
2. antd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ๋””์ž์ธ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
3. multer: ๋…ธ๋“œ ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


## ๐Ÿƒ Server) static ํŒŒ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ
### static ํ•œ ํŒŒ์ผ: ์ด๋ฏธ์ง€, css, javacript ํŒŒ์ผ ๋“ฑ
```javascript
{
//index.js์— ์ถ”๊ฐ€ํ•˜๊ธฐ
app.use('/uploads', express.static('uploads'));
}
```


## ๐Ÿƒ Client) Antd 4.0 ๋ถ€ํ„ฐ Icon ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ
```javascript
//3.0 ๊ธฐ์กด
import { Icon } from 'antd';

//4.0 ๋ณ€๊ฒฝ
import { PlusOutlined, LikeOutlined, DislikeOutlined } from '@ant-design/icons';

```


## ๐Ÿƒ Client) Input ํƒœ๊ทธ์—๋‹ค ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•(์ˆœ์„œ)
### 1. useState ์ •์˜
```javascript
const [videoTitle, setVideoTitle] = useState('');
const [videoDescription, setVideoDescription] = useState('');
```


### 2. ํ•จ์ˆ˜ ์ •์˜
```javascript
const onTitleChange = e => {
setVideoTitle(e.currentTarget.value);
}
const onDescriptionChange = e => {
setVideoDescription(e.currentTarget.value);
}
```


### 3. ํƒœ๊ทธ์˜ onChange ์†์„ฑ์—๋‹ค ์ •์˜ํ•œ ํ•จ์ˆ˜ ๋„ฃ๊ธฐ
```javascript

```


## ๐Ÿƒ Client) router์˜ match ๊ฐ์ฒด
### match ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜ค๋ ค๋ฉด ๊ผญ! withRouter๋ฅผ import ํ•ด์•ผํ•จ
```javascript
import { withRouter } from 'react-router-dom';

const VideoUpladComponent = () => {
return (
//์†Œ์Šค์ฝ”๋“œ
);
}

//์ฝ”๋“œ ๋งˆ์ง€๋ง‰์— withRouter์•ˆ์—๋‹ค exportํ•  ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ
export default withRouter(VideoUploadComponent);
```