๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/React by GPT

๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API๋ฅผ ํ™œ์šฉํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ

by st๊ณต๊ฐ„ 2025. 6. 16.
๋ฐ˜์‘ํ˜•

๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API๋ฅผ ํ™œ์šฉํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ

๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ์  ๋ณต์žกํ•ด์ง์— ๋”ฐ๋ผ, ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ณต์œ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ณผ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „ํ†ต์ ์œผ๋กœ๋Š” props๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ–ˆ์ง€๋งŒ, ๊นŠ์€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ๋Š” props ๋“œ๋ฆด๋ง(props drilling) ๋ฌธ์ œ๋กœ ์ธํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํฌ๊ฒŒ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์•กํŠธ๋Š” ์ปจํ…์ŠคํŠธ API(Context API)๋ฅผ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ , UI ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API์˜ ๊ธฐ๋ณธ ๊ฐœ๋…, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API๋ž€?

๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์ „์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ props๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ „๋‹ฌํ•  ํ•„์š” ์—†์ด, ์ „์—ญ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ: ํ…Œ๋งˆ, ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด, ๋กœ์ปฌ ์„ค์ • ๋“ฑ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • props ๋“œ๋ฆด๋ง ํ•ด๊ฒฐ: ๊นŠ์€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ๋„ ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ์— ๋ถˆํ•„์š”ํ•œ props ์ „๋‹ฌ ์—†์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ: ์ฝ”๋“œ์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ , ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋””๋ฒ„๊น… ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

2. ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ฐ ๊ตฌ์กฐ

๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ API๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. Context ๊ฐ์ฒด ์ƒ์„ฑ: React.createContext()๋ฅผ ํ†ตํ•ด Context ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Provider ์ปดํฌ๋„ŒํŠธ: Context.Provider๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Provider๋Š” value ์†์„ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ํŠธ๋ฆฌ ํ•˜์œ„์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ๊ฐ’์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Consumer ์ปดํฌ๋„ŒํŠธ ๋˜๋Š” useContext ํ›…: ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” Context.Consumer๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useContext ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ Provider์—์„œ ์ „๋‹ฌํ•œ ๊ฐ’์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// AuthContext.tsx
import React, { createContext, useState, ReactNode } from 'react';

// ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด์„ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
interface User {
  name: string;
  email: string;
}

// ์ปจํ…์ŠคํŠธ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •์˜
interface AuthContextType {
  user: User | null;
  login: (userData: User) => void;
  logout: () => void;
}

// ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • (์‹ค์ œ ์‚ฌ์šฉ ์‹œ์—” ์ดˆ๊ธฐ๊ฐ’์„ null ๋˜๋Š” ๋นˆ ํ•จ์ˆ˜๋กœ ์„ค์ •)
export const AuthContext = createContext<AuthContextType>({
  user: null,
  login: () => {},
  logout: () => {},
});

// Provider ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
interface AuthProviderProps {
  children: ReactNode;
}

export const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {
  const [user, setUser] = useState<User | null>(null);

  const login = (userData: User) => {
    setUser(userData);
  };

  const logout = () => {
    setUser(null);
  };

  return (
    <AuthContext.Provider value={{ user, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
};

์œ„ ์˜ˆ์ œ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ AuthContext๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. AuthProvider ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— user, login, logout ๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ปจํ…์ŠคํŠธ API๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹

์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…Œ๋งˆ, ์‚ฌ์šฉ์ž ์ธ์ฆ, ์–ธ์–ด ์„ค์ • ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ UI๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// UserProfile.tsx
import React, { useContext } from 'react';
import { AuthContext } from './AuthContext';

const UserProfile: React.FC = () => {
  const { user, logout } = useContext(AuthContext);

  if (!user) {
    return <p>๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.</p>;
  }

  return (
    <div style={{ padding: '20px', border: '1px solid #ccc', borderRadius: '8px' }}>
      <h2>์‚ฌ์šฉ์ž ํ”„๋กœํ•„</h2>
      <p>์ด๋ฆ„: {user.name}</p>
      <p>์ด๋ฉ”์ผ: {user.email}</p>
      <button onClick={logout} style={{ marginTop: '10px', padding: '8px 16px' }}>
        ๋กœ๊ทธ์•„์›ƒ
      </button>
    </div>
  );
};

export default UserProfile;

์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useContext ํ›…์„ ์ด์šฉํ•ด AuthContext์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ, ํ…Œ๋งˆ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋‹คํฌ ๋ชจ๋“œ์™€ ๋ผ์ดํŠธ ๋ชจ๋“œ๋ฅผ ์ „์—ญ์—์„œ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์†Œ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ThemeContext.tsx
import React, { createContext, useState, ReactNode } from 'react';

// ํ…Œ๋งˆ ํƒ€์ž… ์ •์˜
type Theme = 'light' | 'dark';

interface ThemeContextType {
  theme: Theme;
  toggleTheme: () => void;
}

export const ThemeContext = createContext<ThemeContextType>({
  theme: 'light',
  toggleTheme: () => {},
});

interface ThemeProviderProps {
  children: ReactNode;
}

export const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => {
  const [theme, setTheme] = useState<Theme>('light');

  const toggleTheme = () => {
    setTheme(prevTheme => (prevTheme === 'light' ? 'dark' : 'light'));
  };

  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

์ด์™€ ๊ฐ™์ด ThemeContext๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“  useContext๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ํ…Œ๋งˆ์™€ ํ…Œ๋งˆ ์ „ํ™˜ ํ•จ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ UI์˜ ์Šคํƒ€์ผ์„ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์‹ค์ „ ์ ์šฉ ๋ฐ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

์ปจํ…์ŠคํŠธ API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์†Œํ™”: ์ปจํ…์ŠคํŠธ์˜ ๊ฐ’์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(memoization)ํ•˜๊ฑฐ๋‚˜, ์ปจํ…์ŠคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ตฌ๋…ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ: ๋ชจ๋“  ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ์— ๋ชฐ์•„๋„ฃ๊ธฐ๋ณด๋‹ค๋Š”, ๊ธฐ๋Šฅ๋ณ„๋กœ ์—ฌ๋Ÿฌ ์ปจํ…์ŠคํŠธ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ์ฆ, ํ…Œ๋งˆ, ๋‹ค๊ตญ์–ด ์„ค์ • ๋“ฑ์„ ๋ณ„๋„์˜ ์ปจํ…์ŠคํŠธ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ: ์œ„ ์˜ˆ์ œ์—์„œ ๋ณด๋“ฏ์ด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ปจํ…์ŠคํŠธ์˜ ๊ฐ’๊ณผ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด, ์ฝ”๋“œ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ์™€ ์บ์‹ฑ: ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์žฆ์€ ๋ฐ์ดํ„ฐ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” useMemo, useCallback ๋“ฑ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ํ˜‘์—… ์‹œ๋‚˜๋ฆฌ์˜ค

๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ํŒ€์›๊ณผ ํ˜‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ์ปจํ…์ŠคํŠธ API๋ฅผ ํ†ตํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ํŒ€ ๊ฐ„์˜ ์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ์—๋„ ํฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, UI/UX ๋””์ž์ด๋„ˆ์™€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ…Œ๋งˆ๋‚˜ ์–ธ์–ด ์„ค์ •์„ ์กฐ์œจํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ์—๋„ ๋ช…ํ™•ํ•œ ํƒ€์ž… ์ •์˜์™€ ๋ฌธ์„œํ™”๋ฅผ ํ†ตํ•ด ํ˜‘์—…์˜ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จ์‹œํ‚ด์œผ๋กœ์จ, ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ์˜ˆ๋ฐฉํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์šด์˜์„ ๋„๋ชจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6.๊ฒฐ๋ก 

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

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋“ฑ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ปจํ…์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ๊ฒ€์ฆํ•จ์œผ๋กœ์จ, ์•ˆ์ •์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

 
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€