API ํธ์ถ๊ณผ Local Storage๋ฅผ ํ์ฉํ ์ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ
์ด๋ฒ ๋จ๊ณ์์๋ TMDB API๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ํธ์ถ๊ณผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค. ์๋๋ API ํธ์ถ๊ณผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ๊ด๋ จ ์ฝ๋์ ์ฃผ์ ๋ด์ฉ์ ๋๋ค.
1. TMDB API ์ค์
- TMDB(The Movie Database)๋ ์ํ ๋ฐ์ดํฐ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ํ๋ก์ ํธ์์๋ TMDB API๋ฅผ ์ฌ์ฉํด ์ธ๊ธฐ ์ํ, ํน์ ์ํ ์ ๋ณด, ์ํ ๊ฒ์ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
API ์ค์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
import axios from "axios";
// TMDB API ๊ธฐ๋ณธ ์ค์
const BASE_URL = "<https://api.themoviedb.org/3>";
const API_KEY = process.env.REACT_APP_TMDB_API_KEY; // ํ๊ฒฝ ๋ณ์์์ API ํค ์ฝ๊ธฐ
const BEARER_TOKEN = process.env.REACT_APP_TMDB_BEARER_TOKEN;
// Axios ์ธ์คํด์ค ์์ฑ
const api = axios.create({
baseURL: BASE_URL,
params: {
api_key: API_KEY,
language: "en-US", // ๊ธฐ๋ณธ ์ธ์ด ์ค์
},
headers: {
accept: "application/json",
Authorization: `Bearer ${BEARER_TOKEN}`, // Authorization ํค๋ ์ถ๊ฐ
},
});
- BASE_URL: TMDB API์ ๊ธฐ๋ณธ URL.
- API_KEY์ BEARER_TOKEN: ํ๊ฒฝ ๋ณ์์์ ๋ณด์ ํค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- Axios ์ธ์คํด์ค: ๋งค๋ฒ API ํธ์ถ ์ ๊ธฐ๋ณธ URL๊ณผ ๊ณตํต ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ์ง ์๋๋ก ๋์์ค๋๋ค.
2. TMDB API ํ์ฉ
TMDB API๋ฅผ ์ฌ์ฉํด ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์๋๋ ์ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ๋๋ค:
- ์ธ๊ธฐ ์ํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
// ์ธ๊ธฐ ์ํ ๊ฐ์ ธ์ค๊ธฐ
export const getPopularMovies = async (page = 1) => {
try {
const response = await api.get("/movie/popular", {
params: { page },
});
return response.data;
} catch (error) {
console.error("Error fetching popular movies:", error);
throw error;
}
};
- ์ํ ๊ฒ์
// ์ํ ๊ฒ์
export const searchMovies = async (query, page = 1) => {
try {
const response = await api.get("/search/movie", {
params: { query, page },
});
return response.data;
} catch (error) {
console.error("Error searching movies:", error);
throw error;
}
};
- ํน์ ์ํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
// ํน์ ์ํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
export const getMovieDetails = async (movieId) => {
try {
const response = await api.get(`/movie/${movieId}`);
return response.data;
} catch (error) {
console.error("Error fetching movie details:", error);
throw error;
}
};
3. ๋ก์ปฌ ์คํ ๋ฆฌ์ง(Local Storage) ํ์ฉ
์ฌ์ฉ์์ ์ ํธ ์ํ ๋ชฉ๋ก, ์ต๊ทผ ๊ฒ์์ด ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํด ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ์ต๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจํด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ฉฐ, ์ง์์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐ์ดํฐ ์ ์ฅ
// Local Storage ์ ์ฅ
export const saveToLocalStorage = (key, value) => {
localStorage.setItem(key, JSON.stringify(value));
};
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
// Local Storage์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
export const getFromLocalStorage = (key) => {
const value = localStorage.getItem(key);
return value ? JSON.parse(value) : null;
};
- ๋ฐ์ดํฐ ์ญ์
// Local Storage์์ ๋ฐ์ดํฐ ์ญ์
export const removeFromLocalStorage = (key) => {
localStorage.removeItem(key);
};
4. ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ ๋ชฉ๋ก ์ ์ฅ์ด ํจ์๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์ ์ฅํ์ง ์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค.
// ์ฆ๊ฒจ์ฐพ๊ธฐํ ์ํ ๋ชฉ๋ก ์ ์ฅ
export const saveFavoriteMovies = (movie) => {
let favoriteMovies = getFromLocalStorage("favoriteMovies") || [];
// ์ค๋ณต ๋ฐฉ์ง
if (!favoriteMovies.some((fav) => fav.id === movie.id)) {
favoriteMovies.push(movie);
saveToLocalStorage("favoriteMovies", favoriteMovies);
}
};
- ์ต๊ทผ ๊ฒ์์ด ์ ์ฅ์ต๋ 5๊ฐ์ ๊ฒ์์ด๋ง ์ ์งํ๋ฉฐ, ์ค๋ณต ๊ฒ์์ด๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
// ์ต๊ทผ ๊ฒ์์ด ์ ์ฅ
export const saveRecentSearch = (searchTerm) => {
let recentSearches = getFromLocalStorage("recentSearches") || [];
// ๊ฒ์์ด ์ค๋ณต ๋ฐฉ์ง
if (!recentSearches.includes(searchTerm)) {
recentSearches.push(searchTerm);
// ์ต๋ 5๊ฐ์ ์ต๊ทผ ๊ฒ์์ด๋ง ์ ์ฅ
if (recentSearches.length > 5) {
recentSearches.shift(); // ์ฒซ ๋ฒ์งธ ๊ฒ์์ด ์ ๊ฑฐ
}
saveToLocalStorage("recentSearches", recentSearches);
}
};
๐ ๏ธ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ API ํ์ฉ์ ๊ฒฐํฉ
์์์ ๊ตฌํํ TMDB API ํธ์ถ๊ณผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํด ๋ค์๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค:
- ์ธ๊ธฐ ์ํ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ
- API๋ฅผ ํธ์ถํด ์ฌ์ฉ์๊ฐ ์ต์ ์ธ๊ธฐ ์ํ๋ฅผ ๋ณผ ์ ์๋๋ก ํฉ๋๋ค.
- ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ ์ ์ฅ
- ์ฌ์ฉ์๊ฐ ํน์ ์ํ๋ฅผ ํด๋ฆญํด ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋๋ฉฐ, ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํด๋ ์ ์ง๋ฉ๋๋ค.
- ๊ฒ์์ด ์ ์ฅ
- ์ฌ์ฉ์์ ์ต๊ทผ ๊ฒ์์ด๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ์ฌ, ๋น ๋ฅธ ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๐ ๋ธ๋ก๊ทธ์์ ๋ค๋ฃฐ ๋ด์ฉ ์์ฝ
์ด ํฌ์คํ ์์๋ ๋ค์ ๋ด์ฉ์ ์์ธํ ๋ค๋ฃน๋๋ค:
- TMDB API ์ค์ ๋ฐ ํ์ฉ ๋ฐฉ๋ฒ
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ๊ด๋ฆฌ
- ์ธ๊ธฐ ์ํ, ๊ฒ์์ด, ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ ๋ชฉ๋ก ์ ์ฅ ๊ตฌํ
๋ค์ ๋จ๊ณ์์๋ UI ์ปดํฌ๋ํธ์ ๋ก์ง ๊ฒฐํฉ์ ๋ํด ์์ฑํ๊ฒ ์ต๋๋ค. ๐