Frontend ๐Ÿ“š/React

[React] TMDB API๋ฅผ ํ™œ์šฉํ•œ ๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ์ฝ”๋”ฉ - 2. ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •

leejaejae 2024. 12. 6. 14:04

์ด ๊ธ€์—์„œ๋Š” ๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์„ค์ •๊ณผ ์ดˆ๊ธฐ ํŒŒ์ผ ๊ตฌ์กฐ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค. 

1. React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

๋จผ์ €, React ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด React ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

npx create-react-app netflix-clone
  • npx create-react-app ๋ช…๋ น์–ด๋Š” React ๊ณต์‹ ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • netflix-clone์€ ํ”„๋กœ์ ํŠธ ํด๋” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค:

cd netflix-clone

์˜์กด์„ฑ ์„ค์น˜ ํ™•์ธ

React ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์ด ํ•จ๊ป˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. package.json ํŒŒ์ผ์„ ์—ด์–ด ๋‹ค์Œ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

  • react
  • react-dom
  • react-scripts

ํ™•์ธ ํ›„, ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ด ๊ธฐ๋ณธ ํ™”๋ฉด์ด ์ž˜ ๋œจ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค:

npm start

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์— ์ ‘์†ํ•˜๋ฉด ๊ธฐ๋ณธ React ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. 

 

2. ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํด๋” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋” ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค:

src/
โ”œโ”€โ”€ api/            # API ํ˜ธ์ถœ ๊ด€๋ จ ํ•จ์ˆ˜
โ”œโ”€โ”€ assets/         # ์ด๋ฏธ์ง€, ์•„์ด์ฝ˜, ํฐํŠธ ๋“ฑ ์ •์  ํŒŒ์ผ
โ”œโ”€โ”€ components/     # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ pages/          # ๊ฐ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ styles/         # CSS ํŒŒ์ผ
โ”œโ”€โ”€ utils/          # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”œโ”€โ”€ App.js          # ๋ฉ”์ธ ์•ฑ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ index.js        # ReactDOM ๋ Œ๋”๋ง

ํด๋” ์ƒ์„ฑ

์œ„ ๊ตฌ์กฐ์— ๋งž์ถฐ ํด๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

mkdir src/api src/assets src/components src/pages src/styles src/utils

 

 

3. ๋ผ์šฐํ„ฐ ์„ค์น˜ ๋ฐ ์„ค์ •

๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€(์˜ˆ: ํ™ˆ, ์ธ๊ธฐ ์˜ํ™”, ๊ฒ€์ƒ‰ ๋“ฑ)๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ, React Router๋ฅผ ์‚ฌ์šฉํ•ด ๋ผ์šฐํŒ…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

React Router ์„ค์น˜

npm install react-router-dom

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๊ธฐ๋ณธ์ ์ธ ๋ผ์šฐํŒ… ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

src/index.js ์ˆ˜์ •

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom";
import App from "./App";

ReactDOM.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById("root")
);

src/App.js ์ˆ˜์ •

import React from "react";
import { Routes, Route } from "react-router-dom";

const HomePage = () => <div>Home Page</div>;
const PopularPage = () => <div>Popular Page</div>;
const SearchPage = () => <div>Search Page</div>;

function App() {
  return (
    <Routes>
      <Route path="/" element={<HomePage />} />
      <Route path="/popular" element={<PopularPage />} />
      <Route path="/search" element={<SearchPage />} />
    </Routes>
  );
}

export default App;

์ด์ œ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000/, http://localhost:3000/popular, http://localhost:3000/search์— ์ ‘์†ํ•˜๋ฉด ๊ฐ ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4. CSS ์ดˆ๊ธฐํ™” ๋ฐ ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ

๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ํ”„๋กœ์ ํŠธ๋Š” ์ง๊ด€์ ์ด๊ณ  ๊น”๋”ํ•œ UI๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด CSS ์ดˆ๊ธฐํ™”๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

CSS ์ดˆ๊ธฐํ™” ์ถ”๊ฐ€

src/styles/reset.css ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

/* reset.css */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  font-family: Arial, sans-serif;
  background-color: #000;
  color: #fff;
}

src/index.js์—์„œ ์Šคํƒ€์ผ ์ ์šฉ

import "./styles/reset.css";

์ด์ œ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์ด ์ดˆ๊ธฐํ™”๋˜์–ด UI๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

 

5. TMDB API ํ‚ค ์ค€๋น„

์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด TMDB API๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. TMDB API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ค€๋น„ํ•˜์„ธ์š”.

TMDB API ํ‚ค ๋ฐœ๊ธ‰

  1. TMDB ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋กœ๊ทธ์ธ ํ›„ API ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๊ณ„์ • ์„ค์ • > API > API ํ‚ค ๊ด€๋ฆฌ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ