React Sprint โŽฎ Video Player App - 1

NOWANDHEREยท2020๋…„ 11์›” 20์ผ
2

React

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

Create myYouTube with React

๐ŸŒป ์ด๋ฒˆ ์Šคํ”„๋ฆฐํŠธ๋ฅผ ๊ฐ€์žฅ ์ฆ๊ฒ๊ฒŒ ๋ชฐ์ž…ํ–ˆ๋‹ค. ํ•ญ์ƒ ๊ทธ๋Ÿฌํ•˜๋“ฏ, ์ฒ˜์Œ์—๋Š” ์ •๋ง ๋ง‰๋ง‰ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒ˜์Œ์œผ๋กœ API๋„ ์ ์šฉํ•ด๋ณด๊ณ  ๊ณ„์† ์•ˆ๋˜๋˜ ๊ฒƒ์ด ๊ฒฐ๊ตญ ๋  ๋•Œ, '์—ญ์‹œ ํ•˜๋ฉด ๋˜๋Š”๊ตฌ๋‚˜'๋ฅผ ๋˜ ํ•œ๋ฒˆ ๋Š๋ผ๊ฒŒ ํ•ด์ค€ ๊ณ ๋งˆ์šด ์Šคํ”„๋ฆฐํŠธ์˜€๋‹ค.


์ปดํฌ๋„ŒํŠธ(๊ตฌ์„ฑ ์š”์†Œ) ๋‹จ์œ„๋กœ ์ƒ๊ฐํ•˜๋ผ !


https://reactjs.org/docs/thinking-in-react.html ๊ผญ! ์ฝ์–ด๋ณด์ž.

React๋กœ ๊ตฌํ˜„๋œ Front-end ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ React ์ปดํฌ๋„ŒํŠธ(์ดํ•˜ ์ปดํฌ๋„ŒํŠธ)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์—๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณดํ†ต ํ•œ๊ฐ€์ง€ ์ผ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ตฌํ˜„ํ•˜๊ณ , YouTube Data API์™€ ์—ฐ๊ฒฐ๋˜๋„๋ก ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ€ํ˜•ํ•ด๋ณด์ž.

  • App - ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ƒ์œ„ ์ปจํ…Œ์ด๋„ˆ, DOM์— ์ง์ ‘ ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • Nav - ์ƒ๋‹จ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • Search - ๊ฒ€์ƒ‰ ์ž…๋ ฅ ํ•„๋“œ(<input>)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.
  • VideoPlayer - ์„ ํƒํ•œ ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๊ณ , ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • VideoList - ๋™์˜์ƒ ๋ชฉ๋ก์„ ๋‚˜์—ดํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • VideoListEntry - ์žฌ์ƒํ•  ๋™์˜์ƒ์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ์ด ๋น„๋””์˜ค์˜ ์ œ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด, ํ•ด๋‹น ๋น„๋””์˜ค๊ฐ€ VideoPlayer ์ปดํฌ๋„ŒํŠธ์—์„œ ์žฌ์ƒ๋œ๋‹ค.

  • ์Šคํ”„๋ฆฐํŠธ์—์„œ์˜ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค.

1. App ๋„์›Œ๋ณด๊ธฐ


๋จผ์ € React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค. index.js ํŒŒ์ผ์—์„œ App ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.

2. ๋™์  VideoList ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ


fakeData.js ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด VideoList ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค. fakeData๋ฅผ import๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ค๊ณ , ๋™์ ์œผ๋กœ VideoListEntry ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค.

  • fakeData์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๊ฐ๊ฐ์˜ ๋น„๋””์˜ค ์ •๋ณด๋ฅผ ๊ฐ์ฒด๋กœ์จ ๋‹ด๊ณ  ์žˆ๋‹ค.

  • VideoListEntry ์ปดํฌ๋„ŒํŠธ์™€ fakeData๋ฅผ importํ•˜๊ณ , VideoListEntry ์ปดํฌ๋„ŒํŠธ props ๊ฐ์ฒด ์•ˆ์— ๋น„๋””์˜ค์˜ title, description, url ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , map ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋ง ํ–ˆ๋‹ค.

  • VideoList ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ props๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„ ๊ฐ๊ฐ์˜ ๋น„๋””์˜ค ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

Unique Key Prop

Warning: Each child in a list should have a unique 'key' prop. See https://fb.me/react-warning-keys for more information.

  • ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•  ๋•Œ, ํ‚ค ๋ˆ„๋ฝ ๋ฌธ์ œ๋กœ ์ธํ•œ ์ด ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด fakeData ์•ˆ์— ํ‚ค๋กœ ์ง€์ •ํ• ๋งŒํ•œ ๊ณ ์œ ํ•œ ๊ฐ’์ด ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ videoId ๊ฐ’์„ key๋กœ ์ง€์ •ํ•˜์˜€๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ(https://ko.reactjs.org/docs/lists-and-keys.html)์— 8.Lists and Keys๋ฅผ ์‚ดํŽด๋ณด๋ฉด Key๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฆฌ์ŠคํŠธ์˜ ๋‹ค๋ฅธ ํ•ญ๋ชฉ๋“ค ์‚ฌ์ด์—์„œ ํ•ด๋‹น ํ•ญ๋ชฉ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค.

Storybook

๊ฐœ๋ฐœ ๊ณผ์ •์— ์žˆ์–ด ์‹œ๊ฐ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋ฅผ ํ™•์ธํ•˜๊ธฐ ์ข‹๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“œ๋ ค๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

3. VideoPlayer ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ


์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๊ฐ‘์ž๊ธฐ ์–ด๋ ค์› ๋‹ค. fakeData๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํ›„, ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ VideoPlayer๋กœ ์ „๋‹ฌํ•ด์•ผํ–ˆ๊ณ , ์ „๋‹ฌํ•œ ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๊ณ  ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ํ‘œ์‹œํ•  VideoPlayer๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ–ˆ๋‹ค. ์ผ๋‹จ์€, ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด App.js์—์„œ VideoPlayer ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋ฅผ ํ†ตํ•ด fakeData์˜ ์ฒซ ๋ฒˆ์งธ ๋น„๋””์˜ค ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด๋ดค๋‹ค.

  • src, title, description์„ props๋กœ ์ „๋‹ฌ ๋ฐ›์•„์„œ iframe ํƒœ๊ทธ๋กœ ์žฌ์ƒํ–ˆ๋‹ค. ์ผ๋‹จ ๋ธŒ๋ผ์šฐ์ €์— ์žฌ์ƒํ•  ๋น„๋””์˜ค ํ•˜๋‚˜๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ๋น„๋””์˜ค ๋ฆฌ์ŠคํŠธ๊นŒ์ง€ ๋ Œ๋”๋ง ํ•˜๋Š”๋ฐ๊นŒ์ง€๋Š” ์„ฑ๊ณตํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋™์ ์œผ๋กœ VideoPlayer ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด์•ผํ–ˆ๋‹ค.

4. VideoList์™€ VideoPlayer๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ


VideoListEntry์˜ ์ œ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ๋™์˜์ƒ์ด ํ”Œ๋ ˆ์ด์–ด์— ํ‘œ์‹œ๋˜๋„๋ก ํ•ด์•ผํ–ˆ๋‹ค. React ์—์„œ๋Š” ํ˜•์ œ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋กœ ์ง์ ‘ ์—‘์„ธ์Šค ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— statefulํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์˜ Lifting State Up์„ ๋ณด๊ณ  ๋˜ ๋ด๋„ ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•˜๋‹ค. React์˜ ํ•˜ํ–ฅ์‹ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์ˆ˜ JavaScript ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ดค๋‹ค.

๋˜ํ•œ 3๋ฒˆ์—์„œ ๋™์ ์ธ VideoPlayer๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ• ์ง€ ์ƒ๊ฐํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ์Šคํ”„๋ฆฐํŠธ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” App์„ class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ , App์˜ state๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ, ๋™์˜์ƒ ๋ชฉ๋ก์˜ ๋ชจ๋“  ๋™์˜์ƒ๊ณผ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ๋™์˜์ƒ์„ ๊ด€๋ฆฌํ•˜๋ผ๋Š” ๋ง์ด ํฐ ํžŒํŠธ๊ฐ€ ๋˜์—ˆ๋‹ค.

Special Props Warning

  • ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•˜๋˜ ์™€์ค‘์— ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋‚ฌ๋‹ค. JSX ์—˜๋ฆฌ๋จผํŠธ์˜ ๋Œ€๋ถ€๋ถ„์˜ props๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜์ง€๋งŒ ๋‘ ๊ฐœ์˜ ํŠน์ˆ˜ props(ref ๋ฐ key)๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค! ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํฌ๋„ŒํŠธ์—์„œ this.props.key๋ฅผ render ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผํ•˜๋ฉด ๊ทธ ๊ฐ’์€ undefined์ด๋‹ค. ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ key ๊ฐ’์— access ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ๋กœ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋„ key๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด id์— ๋˜‘๊ฐ™์€ ๊ฐ’์œผ ๋„ฃ์–ด์„œ ์ „๋‹ฌํ–ˆ๋‹ค. ์•„๋ž˜๋Š” ์ตœ์ข…์ ์œผ๋กœ 4๋ฒˆ๊นŒ์ง€ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ด๋‹ค.

  • App.jsใ…คโ†’ใ…คVideoList.js
    ใ…คใ…คใ…คใ…ค โ†˜๏ธŽ ใ…คใ…คใ…คใ…ค ใ…คใ…คใ…คใ…ค ใ…คใ…คโ†˜๏ธŽ
    ใ…คใ…คใ…คใ…คใ…คใ…คVideoPlayer.jsใ…คใ…คVideoListEntry.js

  • App.js

    • state์—๋Š” ๋ฐฐ์—ด ์ „์ฒด(data)์™€ ํ˜„์žฌ ์žฌ์ƒํ•  ๋น„๋””์˜ค ์ •๋ณด(current)๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
    • VideoPlayer์—๋Š” props.video๋กœ ํ˜„์žฌ ๋น„๋””์˜ค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
    • VideoList์—๋Š” props.clickTitle์— ์ œ๋ชฉ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ , props.videos์—๋Š” ๋ชจ๋“  ๋น„๋””์˜ค ๋ชฉ๋ก์„ ์ „๋‹ฌํ•œ๋‹ค.
    • handleChange ๋ฉ”์†Œ๋“œ๋Š” ๋น„๋””์˜ค์˜ ๊ณ ์œ ํ•œ videoKey๋ฅผ ๋ฐ›์•„ ์ „์ฒด ๋™์˜์ƒ ๋ชฉ๋ก์—์„œ ์ผ์น˜ํ•˜๋Š” ๋น„๋””์˜ค๋ฅผ ์ฐพ์•„์„œ setState๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋น„๋””์˜ค๋ฅผ render ํ•œ๋‹ค.

  • VideoPlayer.js
    • App ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ํ†ตํ•ด ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๊ณ  ํ•ด๋‹น ๋น„๋””์˜ค์˜ ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ๋‚˜ํƒ€๋‚ด์ค€๋‹ค.

  • VideoList.js
    • App ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋น„๋””์˜ค ๋ชฉ๋ก์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค.
    • VideoListEntry์—๋Š” props.video์— ๋น„๋””์˜ค ์ •๋ณด, props.id์— key, props.selectVideo์—๋Š” goToVideoPlayer ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
      • goToVideoPlayer ํ•จ์ˆ˜๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‹คํ–‰๋˜๊ฒŒ ๋˜๋Š”๋ฐ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด props.clickTitle ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ฆ‰, App.js์— ์žˆ๋Š” handleChange ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋น„๋””์˜ค์˜ ํ‚ค๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

  • VideoListEntry.js
    • VideoList ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ํ†ตํ•ด ๋น„๋””์˜ค์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€์™€ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ํ•ด๋‹น ๋น„๋””์˜ค์˜ ์ œ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด clickTitle ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
      • clickTitle ํ•จ์ˆ˜๋Š” props.selectVideo ํ•จ์ˆ˜์— ๋น„๋””์˜ค์˜ key ๊ฐ’(props.id)์„ ๋„˜๊ฒจ ํ˜ธ์ถœํ•œ๋‹ค. ์ฆ‰, VideoList.js์— ์žˆ๋Š” goToVideoPlayer ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • ๊ตฌํ˜„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์ด๋‹ค. ๋น„๋””์˜ค ๋ชฉ๋ก ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋น„๋””์˜ค๋Š” VideoPlayer ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ํฐ ํ™”๋ฉด์œผ๋กœ ๋ Œ๋”๋ง ๋˜์–ด ์žˆ๊ณ  VideoList ์ปจํ…Œ์ด๋„ˆ์—๋„ ๋น„๋””์˜ค ๋ชฉ๋ก๋“ค์ด ์ž˜ ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ๋Š” ๋ชจ์Šต์ด๋‹ค. ์ž, ์ด์ œ YouTube API๋ฅผ ์ ์šฉํ•ด๋ณด์ž.

๋ฐฐ์šฐ๋Š” ๋‹จ๊ณ„๋ผ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

profile
๐ŸŒป

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