๐Ÿ’ก ๋กœ์ปฌ mockData๋ฅผ axios API์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ + ์‹ค์ œ ์„œ๋ฒ„๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜ํ•˜๋Š”

์†ก์—ฐ์ง€ยท2025๋…„ 4์›” 16์ผ
0

React ํ”„๋กœ์ ํŠธ์—์„œ ์กฐ์ง๋„/๊ตฌ์„ฑ์› ๊ฐ™์€ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ mockData.ts๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋ฉด,

์‹ค์ œ API ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋  ๋•Œ ์ฝ”๋“œ๋ฅผ ๋Œ€๊ฑฐ ๋œฏ์–ด๊ณ ์น˜์ง€ ์•Š๊ณ ๋„ "๊ทธ๋Œ€๋กœ ์ „ํ™˜"ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ๋ชฉํ‘œ

  • mockData.ts์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ API์ฒ˜๋Ÿผ axios.get()์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ
  • ๋‚˜์ค‘์— ์„œ๋ฒ„๋งŒ ๋ถ™์ด๋ฉด ์ž๋™ ์ „ํ™˜๋˜๋„๋ก ์„ค๊ณ„
  • ์ „ํ™˜ ์‹œ ๊ธฐ์กด UI/์ƒํƒœ ๊ด€๋ฆฌ ๊ตฌ์กฐ ๋‹จ ํ•œ ์ค„๋„ ์•ˆ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ

1. ๊ธฐ๋ณธ API ํด๋ผ์ด์–ธํŠธ ์„ค์ • (axios)


// api/apiClient.ts
import axios from 'axios';

const BASE_URL = process.env.REACT_APP_API_BASE_URL || 'http://localhost:3000';

const apiClient = axios.create({
  baseURL: BASE_URL,
  headers: {
    'Content-Type': 'application/json',
    Accept: 'application/json'
  },
  timeout: 15000
});

export default apiClient;

.env.local:


REACT_APP_API_BASE_URL=https://mock.domain.com:443

2. mock ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑ„๋Š” ์„ธํŒ… (axios-mock-adapter)


npm install axios-mock-adapter

// api/mock/setupMockApi.ts
import MockAdapter from 'axios-mock-adapter';
import apiClient from '../apiClient';
import { initialMembers } from '@/mock/mockData';

export function setupMockApi() {
  const mock = new MockAdapter(apiClient, { delayResponse: 300 });

  mock.onGet('//{ํ”„๋กœ์ ํŠธ๋ช…}/rest/getCpnOrgEmpList.do').reply((config) => {
    const { cpnId } = config.params;

    if (cpnId === 1) {
      const allMembers = Object.values(initialMembers).flat().map((m, index) => ({
        userId: index + 1,
        userNm: m.name,
        position: 1,
        deptNm: '',
        deptId: 0,
        parentId: 0,
        macId: '',
        osId: ''
      }));

      return [200, {
        pscd: 'OK',
        pcsRsltMsg: '์กฐ์ง๋„ ์กฐํšŒ ์„ฑ๊ณต',
        Data: allMembers
      }];
    }

    return [200, {
      pscd: 'FAIL',
      pcsRsltMsg: 'ํ•ด๋‹น ํšŒ์‚ฌ ์—†์Œ',
      Data: []
    }];
  });
}

// App.tsx or main.ts
import { setupMockApi } from '@/api/mock/setupMockApi';

if (process.env.NODE_ENV === 'development') {
  setupMockApi();
}

3. ์‹ค์ œ API์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์ •์˜


// api/getCpnOrgEmpList.ts
import apiClient from './apiClient';
import { ApiResponse } from './apiTemplates';

export interface GetCpnOrgEmpParams {
  userId: number;
  cpnId: number;
}

export interface CpnOrgEmp {
  userId: number;
  userNm: string;
  position: number;
  deptNm: string;
  deptId: number;
  parentId: number;
  macId: string;
  osId: string;
}

export const getCpnOrgEmpList = async (
  params: GetCpnOrgEmpParams
): Promise<ApiResponse<CpnOrgEmp[]>> => {
  try {
    const res = await apiClient.get('/{ํ”„๋กœ์ ํŠธ๋ช…}/rest/getCpnOrgEmpList.do', { params });
    return res.data;
  } catch (e) {
    return {
      pscd: 'ERR_500',
      pcsRsltMsg: '์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹คํŒจ'
    };
  }
};

4. ์‚ฌ์šฉ ์˜ˆ์‹œ (React ์ปดํฌ๋„ŒํŠธ)


useEffect(() => {
  const fetchData = async () => {
    const res = await getCpnOrgEmpList({ userId: 1, cpnId: 1 });
    if (res.pscd === 'OK' && res.Data) {
      console.log('์‘๋‹ต๋ฐ›์€ ๊ตฌ์„ฑ์›', res.Data);
    } else {
      console.error('API ์‹คํŒจ:', res.pcsRsltMsg);
    }
  };

  fetchData();
}, []);

โœ… ์ „ํ™˜์ด ์‰ฌ์šด ์ด์œ 

์ง€๊ธˆ ๊ตฌ์กฐ๋Š” ์‹ค์ œ API๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ mock ์„ค์ •๋งŒ ์ œ๊ฑฐํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์ „๋ณ€๊ฒฝ ํ›„
setupMockApi();โŒ ์ฃผ์„ ์ฒ˜๋ฆฌ
axios.get(...)โœ… ๊ทธ๋Œ€๋กœ ์œ ์ง€
useEffect ํ˜ธ์ถœ ๋กœ์งโœ… ๊ทธ๋Œ€๋กœ ์œ ์ง€
mockData.tsโŒ ์‚ฌ์šฉ ์•ˆ ํ•ด๋„ ๋จ

๐Ÿ” ์‹ค์ œ API ์„œ๋ฒ„ ์ „ํ™˜ ์‹œ ํ•ด์•ผ ํ•  ์ผ


// setupMockApi(); ๐Ÿ‘ˆ ์ด ํ•œ ์ค„๋งŒ ์ œ๊ฑฐ!

โœจ ๋งˆ๋ฌด๋ฆฌ

์ด ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค:

  • ๋ฐฑ์—”๋“œ ์—ฐ๋™ ์ „ ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ๋… ๊ฐœ๋ฐœ ํ•„์š”ํ•  ๋•Œ
  • API ๋ช…์„ธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—… ์ค‘์ผ ๋•Œ
  • ํ…Œ์ŠคํŠธ์šฉ mockData๋กœ ํ™”๋ฉด๋งŒ ๋จผ์ € ๋ณด์—ฌ์ค˜์•ผ ํ•  ๋•Œ
  • ํ›„์— ์‹ค์„œ๋ฒ„ ์ „ํ™˜์ด ๋ถ€๋‹ด ์—†์ด ์ด๋ค„์ ธ์•ผ ํ•  ๋•Œ
profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์Ÿˆ!!

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