์ต๊ทผ CURSOR๋ผ๋ ์ฝ๋ ์๋ํฐ๋ฅผ ํ์ฉํ๊ณ ์๋๋ฐ ์ฒ์์๋ 'VSCode๋ ํ๋ฌ๊ทธ์ธ ์ฐ๋๋๋ ์ ๊ณผ UI๊ฐ ๋น์ทํด์ ์ ์ ์ํ ์ ์๋ค๋ ๊ฑธ ์ ์ธํ๋ฉด ๋ณ ์ด์ ์ด ์์ง ์๋?' ์๊ฐํ๋๋ฐ, ๊ทธ๋ฌ๋ ๋ ์์ ๋ฐ์ฑ ์ค...

CURSOR IDE
์ฝ๋ ์๋ํฐ ์์ฒด์ GPT์ ์์ฐ์ด๋ก ๋ํํ๋ฉด์ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ , ์ฝ๋ ์๋ํ ๊ณผ์ ์ ๋จ์ถํค๋ฅผ ๋๋ฅด๋ฉด ์ฝ๋ ์์ฑ์ ์ถ์ฒ ๋ฐ์ ์ ์๋ AI ํ์ฌํ IDE
์ด IDE๋ก ๊ฐ๋ฐํ๋ฉด์ VSCode์์ ์ฝํ์ผ๋ฟ์ด๋ ChatGPT ํ๋ฌ๊ทธ์ธ์ ์ฐ๋ ์ฌํ ๊ฐ๋ฐ์ ๋๋ฃ ๋ถ๋ค์ ํฌ์ด์ ์ฒด๊ฐํ๋ค. ์์ฐ์ด๋ก AI์ ๋ํํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ์ด ํธ๋ฆฌํจ์ ๋์ ํ ๊ทธ ์ ์ผ๋ก ๋์๊ฐ ์ ์๋ ์ด๋ค ๊ฒ์ด์๋ค.
๊ฒ๋ค๊ฐ ChatGPT 4.0 ๋ฒ์ ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํ๋ฆฌํฐ ๋์ ์ฝ๋ ์ง์์ ๋ฐ์ ์ ์๋ค๋ ์ ์ด ํนํ ๋ง์กฑ์ค๋ฌ์ ๋ค. ๋ฌผ๋ก ๋ฌด๋ฃ ๋ฒ์ ์ ํ๋ฃจ์ 50ํ๋ก ํ๋๊ฐ ์ ํด์ ธ ์๊ณ , ๋น์ฉ์ ์ง๋ถํ๋ฉด ๊ทธ๋ณด๋ค ํจ์ฌ ๋ง์ ํ์๋ก AI์ ์ฝ๋ ์ง์์ ๋ฐ์ ์ ์๋ค.
ํ์ง๋ง ๋ฌด๋ฃ ๋ฒ์ ์ผ๋ก๋ ์ด์ ์ ์ฝํ์ผ๋ฟ์ด๋ ์ ๋ฃ ChatGPT ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด๋ณธ์ ์ด ์๋ ์ ์ ๋ผ๋ฉด ์ถฉ๋ถํ ํ์์ฒ๋ผ ๋ง์กฑํ ์ ์์ผ๋ฆฌ๋ผ ์๊ฐํ๋ค.
โป ๊ด๊ณ ์๋. ๊ด๊ณ ํ์.
๋ณธ๊ฒฉ์ ์ผ๋ก IDE์ ChatGPT์ ๋์์ ๋ฐ์ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ๋ณด์.
const GetWeather = () => {
const { loc, error: locationError } = useCurrentLocation(geolocationOptions);
const {
data: weatherData,
isLoading,
isError,
error,
} = useQuery(...);
};
๋ฌธ์ ๋ Tanstack Query ํ
์ธ useQuery()๋ก ๊ตฌ์กฐ๋ถํดํ ๋น์ ํตํด ๋ณ์์ ๊ฐ์ ํ ๋นํ ๋ ๋ฐ์ํ๋ค. ErrorLens ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฝ๋ ์์ error ํ์
์ ์ค์ ํ๋ผ๋ ํ์
๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ถ๊ฒ ๋ํ๋ฌ๋ค.
ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋๋ ๊ฑด ์๋์ง๋ง, data์ ํ์
๋ ํจ๊ป ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํจ๊ป ํด๊ฒฐํด์ผ๊ฒ ๋๋ฐ ๋์ ์ค์น, ChatGPT์๊ฒ ๋ฐฉ๋ฒ์ ์ง๋ฌธํด๋ณด๊ธฐ๋ก ํ๋ค.
/** ~.ts ํ์ผ์์ error ๊ฐ์ฒด๋ react-query์ useQuery ํ
์์ ๋ฐํ๋๋ ๊ฐ ์ค ํ๋์
๋๋ค.
์ด error ๊ฐ์ฒด๋ ์ฃผ๋ก ๋คํธ์ํฌ ์์ฒญ ์คํจ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ๋ ์์ธ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
TypeScript์์ ์ด๋ฌํ error ๊ฐ์ฒด์ ํ์
์ ๋ช
์์ ์ผ๋ก ์ค์ ํ๋ ค๋ฉด, ๋จผ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ API ํธ์ถ์ ์์ธ ์ ํ์ ํ์
ํด์ผ ํฉ๋๋ค.
๋ค์์ error ๊ฐ์ฒด์ ๋ํ ํ์
์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
1. ์๋ฌ ํ์
์ ์: Error ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ ์ปค์คํ
์๋ฌ ํ์
์ ์ ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, WeatherAPIError๋ผ๋ ํ์
์ ๋ง๋ค ์ ์์ต๋๋ค.
**/
interface WeatherAPIError extends Error {
response?: {
status: number;
data: any;
};
}
/**
* 2. useQuery์ ํ์
๋งค๊ฐ๋ณ์ ์ค์ : useQuery์ ์ ๋ค๋ฆญ ํ์
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ error์ ํ์
์ WeatherAPIError๋ก ์ค์ ํ ์ ์์ต๋๋ค.
**/
const {
data: weatherData,
isLoading,
isError,
error,
} = useQuery<WeatherData, WeatherAPIError>(
...
);
์น์ ํ๊ฒ ์ธํฐํ์ด์ค๋ก error ๊ฐ์ฒด์ ์ ์ฉํ ํ์
์ ์์ฑํด์ ์ด๋ป๊ฒ ์ ์ฉํด์ผํ ์ง ์์ ๊น์ง ํด์ฃผ์
จ๋ค. ์ด ๋๋ต์ ํ ๋๋ก data์ ๋์์ํฌ WeatherData ํ์
๊น์ง ์์ฑํด์ ์ ๋ค๋ฆญ์ผ๋ก ์ ์ฉํ๋๋ ํ์
์๋ฌ๋ ์ฌ๋ผ์ก๋ค.
/**
* 1. ํจ์์ ๋ฐํ ํ์
ํ์ธ: ํจ์์์ ๋ฐํํ๋ ๊ฐ์ฒด์ ํ์
์ ํ์ธํด์ผ ํฉ๋๋ค.
์ด ํจ์๊ฐ ์ ์๋ ํ์ผ์ ์ด๊ณ , ๋ฐํ ํ์
์ด ์ด๋ป๊ฒ ์ ์๋์ด ์๋์ง ํ์ธํ์ธ์.
* 2. ํ์
์ ์ ์
๋ฐ์ดํธ: ๋ง์ฝ ํจ์์ ๋ฐํ ํ์
์ name ํ๋๊ฐ ํฌํจ๋์ด ์์ง ์๋ค๋ฉด, ํด๋น ํ์
์ name ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํจ์๊ฐ `WeatherData` ํ์
์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๊ณ ๊ฐ์ ํ๋ฉด, `WeatherData` ์ธํฐํ์ด์ค์ name ํ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
**/
interface WeatherData {
name: string; // ๋์ ์ด๋ฆ
// ๊ธฐํ ํ์ํ ํ๋๋ค...
}
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก API ํธ์ถ ๋ฐ์ดํฐ๊ฐ name ํ๋๋ฅผ ๋ฐํํ๊ณ ์๋์ง ํ์ธํด๋ณด๋ผ๋ ๊ฒ๊ณผ ์ต์
๋ ์ฒด์ด๋์ผ๋ก ๋ฐํ๋๋ ๋ฐ์ดํฐ๊ฐ undefined๊ฐ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํ์ธ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๊ฐ name ํ๋๋ฅผ ๋ฐํํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ์ ์ธํ๊ณ ์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ํ์ธํ๋ค. ๊ฒฐ๊ตญ ํ์
์ ํ๋๋ฅผ ์ถ๊ฐํ์ฌ ํ์
์ ์ค์ ํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ๋ค.
๊ณ ๋ฏผํ๋ค๋ณด๋ ์๋ API ํธ์ถ ๊ฒฐ๊ณผ๋ก ๋์ฌ ํ๋๊ฐ ๋ง์๋ฐ ๋ชจ๋ ํ์ ์ ์ถ๊ฐํ์ฌ ์ ์ฉํ๊ธฐ๋ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ infer๋ฅผ ํ์ฉํ๋ ๊ณ ์ค๊ธ ํ์ ์ถ๋ก ์ ์ ์ฉํ๊ณ ์ถ์ด์ก๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง ๋ฌผ์ด๋ดค๋ค.
TypeScript์์ infer ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด๋ถ ํ์ ๋ด์์ ํน์ ํ์ ์ ์ถ๋ก ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. infer๋ ์ฃผ๋ก ์ ๋ค๋ฆญ ํ์ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์กฐ๊ฑด๋ถ ํ์ ๋ด์์ ์ถ๋ก ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํ์ฉํ๋ฉด, ๋ณต์กํ ํ์ ๊ตฌ์กฐ์์ ํน์ ๋ถ๋ถ์ ํ์ ์ ๋์ ์ผ๋ก ์ถ์ถํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, useQuery๋ก๋ถํฐ ๋ฐํ๋๋ ๋ฐ์ดํฐ ํ์ ์ ์ถ๋ก ํ๋ ์ ํธ๋ฆฌํฐ ํ์ ์ ๋ง๋ค ์ ์์ต๋๋ค. useQuery๋ ๋ฐ์ดํฐ1, ๋ก๋ฉ ์ํ2, ์๋ฌ3 ๋ฑ์ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๋ง์ฝ useQuery์ ๋ฐํ ํ์ ์์ data ํ๋์ ํ์ ๋ง ์ถ์ถํ๊ณ ์ถ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด infer๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
type QueryReturnType<T> = T extends { data: infer D } ? D : never;
// ์ฌ์ฉ ์
type WeatherDataType = QueryReturnType<ReturnType<typeof useQuery>>;
/**
์ฌ๊ธฐ์ `QueryReturnType`์ ์ ๋ค๋ฆญ ํ์
`T`๋ฅผ ๋ฐ์, `T`๊ฐ `{ data: infer D }` ํํ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ `D`๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ `never`๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ ๊ฒ ์ ์ํ๋ฉด, `useQuery`์ ๋ฐํ ํ์
์์ `data` ํ๋์ ํ์
์ `WeatherDataType`์ผ๋ก ์ถ๋ก ํ ์ ์์ต๋๋ค.
**/
๋์ด์ ErrorLens ํ๋ฌ๊ทธ์ธ์ผ๋ก ์์ ํ ๋ถ๋ถ์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ํ๋์ง ์์์ง๋ง, ChatGPT ์ ์๋์ ๋ญ๊ฐ ๋ณด์ผ๊น ์ถ์ด ์ง๋ฌธ์ ๋์ ธ๋ดค๋ค.
๊ทธ๋ฌ์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ ์ ๋์ด์์ง๋ง ๊ฐ์ ํ ๋งํ ๋ถ๋ถ๋ค์ ์๋ ค์คฌ๋ค.
/**
* 1. ์๋ฌ ์ฒ๋ฆฌ ๊ฐ์ : ํ์ฌ WeatherAPIError ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ง๋ง,
์ค์ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์์ `error.message`๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ง์ฝ API ์๋ฌ ์๋ต์ด `error.response.data.message`์ ํฌํจ๋์ด ์๋ค๋ฉด, ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ๋ ๋ช
ํํ ์ ์์ต๋๋ค.
**/
if (isError)
return <div>๋ ์จ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐ ์คํจํ์ต๋๋ค: {error.response?.data.message || error.message}</div>;
/**
* 2. ํ์
์์ ์ฑ ๊ฐํ: `useQuery`์์ ์ฌ์ฉํ๋ `queryKey`์ ํ์
์ ์ข ๋ ๋ช
ํํ๊ฒ ์ง์ ํ ์ ์์ต๋๋ค.
ํ์ฌ๋ `queryKey`๋ฅผ ๋ฐฐ์ด๋ก ๋ถํดํ ๋นํ๊ณ ์์ง๋ง, ์ด ๋ฐฐ์ด์ ๊ตฌ์กฐ์ ๋ํ ๋ช
ํํ ํ์
์ ์๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ๊ฐ์ ํ์ฌ ํ์
์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
**/
const fetchWeather = async ({
queryKey,
}: QueryFunctionContext<[string, { lat: number; lon: number }]>) => {
const [key, { lat, lon }] = queryKey;
const openWeather = new OpenWeatherMap({ apiKey: apiKey });
const response = await openWeather.getCurrentWeatherByGeoCoordinates(
lat,
lon
);
return response;
};
๋ ๊ฐ์ง ๊ฐ์ ์ ์ธ์๋ ๊ฐ๋ ์ฑ ํฅ์, ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ ์ ํค๊ฐ์ด ์์ ๋ ์์ธ์ฒ๋ฆฌ ๋ฑ์ ๋ํด์ ๊ฐ์ ์์ ์ ์ํด์คฌ๋ค. ๋ฐ์์ด ํ์ํ๋ค๊ณ ์๊ฐํ 1๋ฒ ์ด์ธ์๋ ์ถํ ์์ ํ๊ณ ๋ ์ดํ์๋ ํ์ํ ์ง ์๊ฐํด ์ ์ฉํ๊ธฐ๋ก ํ๋ค.
ํ์ ๊ด๋ จ ์๋ฌ๋ค์ ํด๊ฒฐํ๊ณ ๋๋, ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ํ์ผ์ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ํธ์ถํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ํผํฌ๋จผ์ค ์ธก๋ฉด์์ ์ ํด ์์ธ์ด ๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋์์ ์ ๋๋ก Tanstack Query๋ฅผ ํ์ฉํ์ง ๋ชปํ๊ณ ์๋ค๋ ์๊ฐ์ ์ง์ธ ์ ์์๋ค. ์ด๋ด ๊ฑฐ๋ฉด ๊ตณ์ด ์บ์ฑ์ด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ง ์์๊น?
๊ทธ๋์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ธฐ๋ก ํ๋ค.
์ด ์ง๋ฌธ์ ๋ํ ์๋ต์ ์ด๋ฏธ ๊ตฌํํด๋ ๋ฐฉ์๊ณผ ์ผ์นํ๋ ํ์์ด์๊ธฐ ๋๋ฌธ์ ํ์ฉํ ์ ์์๋ค. ์ ์ํด์ค ์์ ์ฝ๋๋ง ํ ๋ฒ ๋ณด๊ณ ๋์ด๊ฐ์.
// GetWeather ํจ์ ๋ฐ์ดํฐ ๋ฐํ
const GetWeather = () => {
const weatherData = {
main: {
temp: 22,
humidity: 60
},
wind: {
speed: 5
}
};
return weatherData;
};
export default GetWeather;
// temperature.tsx
const Temperature: React.FC = () => {
const data = GetWeather();
console.log(data);
return (
<CityTempCon>
๊ธฐ์จ: {data?.main?.temp}ยฐC, ์ต๋: {data?.main?.humidity}%
</CityTempCon>
);
};
export default Temperature;
์ฌ๋ฌ ์ปดํฌ๋ํธ์์ GetWeather() ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ๋ ๊ฒ์ ๋นํจ์จ์ ์ผ ์ ์์ผ๋ฉฐ, ์ด๋ ๋คํธ์ํฌ ์์ฒญ์ ์ค๋ณต, ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง ๋ฌธ์ , ๋ฆฌ์์ค ๋ญ๋น ๋ฑ์ ์ด๋ํ ์ ์์ต๋๋ค. React์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ์ดํฐ ํ์นญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๊ณ , ํ์ํ ์ปดํฌ๋ํธ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค.
react-query๋ ์๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ํ๋ฅญํ ๋๊ตฌ๋ก, ๋ฐ์ดํฐ ์บ์ฑ, ๋ฐฐ๊ฒฝ ๋๊ธฐํ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง ๋ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ค๋๋ค. GetWeather() ํจ์์ ๊ฒฐ๊ณผ๋ฅผ react-query๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ๋ง ๊ฐ์ ธ์ค๊ณ , ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ๊ฐ์ ์ด๋ก ์ ์ธ ์๋ต์ ๋ฐ๊ณ GetWeather ํจ์๋ฅผ useQuery ํ
์ ์ฌ์ฉํด์ ์ปค์คํ
ํ
์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ ์ ์ํด์คฌ๋ค.
// src/hooks/useWeather.ts
import { useQuery } from 'react-query';
import GetWeather from '@/components/weather-data';
// GetWeather ํจ์๋ฅผ react-query์ useQuery ํ
์ ์ฌ์ฉํ์ฌ ํธ์ถ
const useWeather = () => {
return useQuery('weather', GetWeather);
};
export default useWeather;
// ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ useWeather ํ
์ฌ์ฉ
import useWeather from '@/hooks/useWeather';
const Temperature: React.FC = () => {
const { data, isLoading, error } = useWeather();
if (isLoading) return <div>๋ก๋ฉ ์ค...</div>;
if (error) return <div>์ค๋ฅ ๋ฐ์!</div>;
return <div>๊ธฐ์จ: {data?.main?.temp}ยฐC</div>;
};
export default Temperature;
/**
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๊ณ ,
ํ์ํ ์ปดํฌ๋ํธ์์๋ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก
์์ง๋๊ฐ ๋์์ง๊ณ , ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค.
**/
๋ฌด๋ฆ์ ํ ์น๋ฉฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ ์ ๋ค์ด๊ฐ๋ค. ์ด ์์ด๋์ด๋ฅผ ํ์ฉํด ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ์ปค์คํ ํ ์ผ๋ก ์์ ํ๊ณ , ๋ฐ์ดํฐ๊ฐ ํ์ํ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ก ๋ง๋๋ ์ด์ ์ผ ๋ญ๊ฐ ์ ๋๋ก ๋ถ๋ฆฌ๋ ๋๋์ด ๋ค์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํ ์ปดํฌ๋ํธ ๋ด์์ ๋ชจ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์๊ฐ์ ๋ฒ๋ฆฌ๋ ์์ฐจ์ ์์ง๋๋ฅผ ๋ฌ์ฑํ ์ ์์๋ค.