์ฝ 5์ฃผ๊ฐ ์งํํ๋ ํ๋ก์ ํธ์ ๋ฐฐํฌ์ ๋ฐํ๊ฐ ๋ง๋ฌด๋ฆฌ ๋์๋ค.
์์ง ๊ณ ์น ์ ์ด ๋ง์ด ๋ณด์ด๋ ํ๋ก์ ํธ ์ด์ง๋ง ์ ์ ์ผํ๋ฅผ ์ฐ๊ณ ๋ค์ ๋์๊ฐ์๋ ์๋ฏธ์์ ํ๊ณ ๋ก ๊ธฐ๋กํด๋ณด์.
ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ jeju month ๋ณด๋ฌ๊ฐ๊ธฐ jejumonth-github
์ด๋ฒ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๊ธฐ๋ณธ์ ์ธ ์ปค๋ฎค๋ํฐ, ์ ์ ๊ธฐ๋ฅ, ์์ ์๋น์ค๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ open api๋ฅผ ํ์ฉํ๋ ๊ฒ์ด์๋ค. ์ฌ๊ธฐ์ open api๋ผ๋ ๊ฒ์ ๋ฒ์๊ฐ ๋งค์ฐ ๋์๋๋ฐ ์ฒซ์ฃผ๋ ๊ฐ์ ํฅ๋ฏธ๋ก์ด ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๋ open api๋ฅผ ์กฐ์ฌํด๋ณด์๋ค.
๋ฑ์ฐ, ์์ ๊ฑฐ๋์ฌ ์๋น์ค, ์ ์ฃผ๋ ์ฌํ ์๋น์ค, ๋์์๋น์ค๋ฑ ๋ค์ํ ์๊ฒฌ๋ค์ด ๋ง์ด ๋์ถ๋์๋ค. ํ ํ์์์ ์ฌ์ฉํ api๋ฅผ ๊ณ ๋ฅด๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์๋น์ค์ฃผ์ ์ ๊ดํด ํ ์ํ๊ฒ ๋์๋ค. ์ฐ๋ฆฌํ์์๋ open api์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ ์ฌ์ง์ด ๋ค์ด๊ฐ ์์ ๊ฒ, ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ค๊ฒ, ์ด๋ฏธ ๋ง๋ค์ด์ง ์๋น์ค๋ฅผ ์นดํผํ์ง ์๊ณ ์ฐ๋ฆฌํ๋ง์ ๊ณ ์ ๊ธฐ๋ฅ์ ๋ฃ์ ๊ฒ๋ฑ์ ๊ณ ๋ คํด์ ์ ์ฃผ๋์ฒญ์์ ์ ๊ณตํ๋ visit jeju api๋ฅผ ํ์ฉํ๊ธฐ๋กํ์๋ค.
์ ์ฃผ๋์ฒญ์์ ์ ๊ณตํ๋ ์ ์ฃผ๋์ ์ฌํ์ง์ ์ถ์ , ๊ด๊ด,์์, ์์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฃผ ํ๋ฌ์ด์ด๋ฅผ ๊ณํํ๋ ์ฌ์ฉ์์๊ฒ ์ฌํ๊ณํ ์์ฑ๊ธฐ๋ฅ์ ํจ๊ป ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ๋ก ํ๋ค.
์ฃผ์ ๊ธฐ๋ฅ๋ค๋ก๋ ์ฌํ ์ปค๋ฎค๋ํฐ, ์ฌํ ๊ณํ ์์ฑ ๋ฐ ๋ณด๊ธฐ, ์ฌํ ์ฅ์ ๊ฒ์ ๋ฐ ์คํฌ๋ฉ๋ฑ์ด ์๋ค.
๊ธฐํ๊ณผ ๋์์ธ ๋จ๊ณ์์ ๋ค์ํ ํด์ ์ฌ์ฉํด๋ณธ ํ๋ก์ ํธ์ด๋ค.
๊ธฐํ ๋ช
์ธ์ ์์ฑ์ ์ํด notion, IA์ ์์ด์ดํ๋ ์ ์์ฑ์ ์ํด miro, ๋์์ธ ์์ ์์ฑ์ ์ํดfigma๋ฅผ ํ์ฉํ์๋ค.
ํ์ฅ๋์ ์ ์ธํ ๋ค๋ฅธ ํ์๋ถ๋ค์ ํ์ ๊ฒฝํ์ด ์ ์ด์ ์ฝ๋ ์ปจ๋ฒค์ , ๋ฌธ์ํ ๋ฐฉ๋ฒ๋ฑ์ ๋ฏธ๋ฆฌ ์ ๋ฆฌํด๊ฐ๊ณ ํ์๋ค์ ์๊ฒฌ์ ๋ง๊ฒ ์์ ํด๊ฐ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.(ํด๋น ๋ด์ฉ์ ํ์ํค์ ์ ๋ฆฌ๋์ด ์๋ค.)
ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ github์ ์ฌ์ฉํ๋ค. prํ ํ๋ฆฟ, ์ด์ํ ํ๋ฆฟ์ ์ ํ๊ณ merge๋ 1๋ช ์ด์์ ์น์ธ์ ๋ฐ์์ผ ๊ฐ๋ฅํ๋๋ก ํ๋ค. issue๋ฅผ ์์ฑํ ๋์๋ ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ์ธ๋ถํํ์ฌ ์ปค๋ฐ๋จ์๋ฅผ ํต์ผ์ํค๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ์ด์ ํ๋ก์ ํธ์์ ์ด์๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ง ๋ชปํด์ ์์ฌ์๋๋ฐ, ํ์คํ ํ์ ์ธ์์ด ๋ง์์ง ์๋ก ๋ค๋ฅธ ํ์์ด ํ์ฌ ์ด๋ค ์์ ์ ํ๊ณ ์๋์ง, ์ด๋ค ์์ ์ด ๋จ์๋์ง๋ฅผ ์ด์ํญ๊ณผ ์คํฌ๋ผ์ ํตํด ํ์ธํ ์ ์์ด์ ํจ์จ์ ์ผ๋ก ์งํํ ์ ์์๋ค.
ํ๋ก์ ํธ ๊ฐ๋ฐ์ด ์์๋๊ณ ํ๊ฒฝ์ค์ ๊ณผ ํด๋๊ตฌ์กฐํ๋ฅผ ๋งก๊ฒ ๋์๋ค. ํ์คํ ์ด๋ฐ ์์ ์ ์๊ฐ์ด ๊ฑธ๋ฆด์ง๋ผ๋ ๊ธฐ๋ฐ์ ์๋ค์ ธ๋์ผ ์ฝ๋ ๊ตฌํ์ด ์์ํด์ง๊ธฐ ๋๋ฌธ์ ํด๋น ๋จ๊ณ๋ฅผ ๊ผผ๊ผผํ ์ฒดํฌํ๊ธฐ๋ฅผ ์ถ์ฒํ๋ค.
๋จผ์ vite๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ธํ ํ๊ณ tailwind, antd์ ๊ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ์ ํ๋ค eslint(air-bnb style), prettier๋ฅผ ์ค์นํด์ ํ์๋ชจ๋๊ฐ ๋์ผํ ์ฝ๋ ์คํ์ผ์ ๊ฐ์ง๋๋ก ํ์๋ค. ์ด์ด์ react-query, redux, react-router๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ๋ก๋ฐ์ด๋๋ฅผ ์ฐ๊ฒฐํด์ฃผ์๋ค.
ํด๋น ํ๋ก์ ํธ์์๋ ์ค๊ฐ์ ์งํํ๊ธด ํ์ง๋ง vite-javascript ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋๊ฒฝ๋ก ๋์ ์ ๋๊ฒฝ๋ก๋ก ํ์ผ์ ์ํฌํธ ํ ์ ์๋๋ก ์ค์ ํ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๊ถํ๋ค.
// vite.config.js
export default defineConfig({
plugins: [react()],
resolve: {
alias: [
{ find: '@', replacement: '/src' },
{ find: '@public', replacement: '/public' },
{ find: '@pages', replacement: '/src/pages' },
{ find: '@components', replacement: '/src/components' },
],
},
});
๋ํ tailwind๋ฅผ ์ฌ์ฉํ๋ค๋ฉด tailwindcss-preset-px-to-rem
๋ฅผ ์ฌ์ฉํด์ pxr ๋จ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด figma์์์ ๊ตฌํ๋ px๋จ์๋ฅผ ๊ฐ๋ฐ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ค์ ๋ธ๋ผ์ฐ์ ์์๋ Rem๋จ์๋ก ์ ์ฉ๋์ด ๋งค์ฐ ํธ๋ฆฌํ๋ค.
์ฌ์ง์ ํด๋น ๊ธฐ๋ฅ์ ๋์
ํ์ฌ ์ฌ๋ฆฐ pr ๋ด์ฉ์ด๋ค..
๋ด ์ฝ๋ ๋ฟ ์๋๋ผ ๋๋ฃ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์ํ ๊ตฌํ๋ฐฉ์์ ๋ํด์ ์๊ฒ๋๋ค. ๋ํ์ ์ผ๋ก ์ฌ๋ฌ api๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์์ผํ ๋ ์ฌ๋๋ง๋ค ๊ตฌํ๋ฐฉ์์ด ๋ฌ๋ผ์ ์ด๋ค ๋ฐฉ๋ฒ์ด ์ข์์ง ๊ณ ๋ฏผํด๋ณด๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
๋ํ ๋์ ๋น์ทํ ๋ก์ง์ ์์ฑํ๋ ๋๋ฃ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด๋ฅผ ๋ชจ๋ํํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด๊ฒ๋๊ณ ๊ฒฐ๊ตญ ์ ์ฒด ํ ์์ฐ์ฑ์ ํฐ ๋์์ด ๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ๊ณตํต๋๋ ๋ก์ง์ ๋ถ๋ฆฌํ 'useMySelector
'์ 'useQueryString
','useAuth
'ํ
์ ๋ง๋ค์๋ค.
๋ฆฌ๋ทฐ๋ฅผ ํ๋ฉด ์์ผ๋ฅผ ํ๋ก์ ํธ ์ ์ฒด๋ก ๋๊ฒ ๊ฐ์ง๊ฒ ๋๋ค. ์ฃผ์์ ํตํด ์ด๋ค ๊ณ ๋ฏผ์ ํ๋์ง ์ ์ ์๊ณ , ํน์ ์ปดํฌ๋ํธ๊ฐ ๋ด๊ฐ ๋ด๋นํ ํ์ด์ง ๋ฟ์๋๋ผ ๋ค๋ฅธ ํ์ด์ง์์๋ ๋ฐ๋ณต์ ์ผ๋ก ์ฐ์ธ๋ค๋ฉด ๊ณตํต ์ปดํฌ๋ํธ๋ก ๋ง๋ค์๋ ์๋ค.
์ด์ ์๋ ๋จ์ด ์ํํ ์ง์์ ๋ณด๋ ๋ธ๋ก๊ทธ์ ๋จผ์ ์์ด ๊ฐ๋ค๋ฉด,ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Axios, Redux, Tanstack-query์ ๊ณต์๋ฌธ์๋ฅผ ์ฝ๊ณ ๋์ ์ง์์ผ๋ก ์ํํ๋ ค๋ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์๋ค.
์ด๋ ๊ณผ์ ์ค์์ ์งํํ ํ์ ์คํฌ๋ฆฝํธ ์คํฐ๋, ๋ฆฌ์กํธ ๊ณต์๋ฌธ์ ์คํฐ๋์ ์ํฅ์ด ์ปธ๋ค๊ณ ์๊ฐํ๋ค. ์ข๋ ์ด๋ ค์ด ๊ธ์ ์ฝ์ผ๋ ค๊ณ ์๋ํ๋ ์ฝ๊ธฐ๋ฅ๋ ฅ์ด ๋ ํฅ์๋ ๊ฒ๊ฐ๊ณ , ํนํ ๊ณต์๋ฌธ์์์ ์ค๋ช ํ๋ ์์ด๋จ์ด๋ก ์ตํ์ ๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋ ์ ๋ค์ด ์์ด์ ์ด์ ๋ ๊ณต์๋ฌธ์๋ฅผ ๋จผ์ ์ฐพ์๋ณด๋ ์ต๊ด์ด ๋ค์๋ค. ํน์ฌ ์ง์์ ์๋ฒฝํ๊ฒ ์๊ธฐํ๊ณ ์์ง ์๋๋ผ๋ 'ํด๋น ๊ฐ๋ ์ด ์ฌ๊ธฐ ์์์ง'๋ผ๊ณ ๋ ์ค๋ฅด๋ฉด ์ฐพ์์ ์ฝ๊ณ ๋ค์ ์ฐพ์๋ณด๋ ํ์๊ฐ ํ์ ํ ์ค์ด๋ค๊ฒ ๋์๋ค.
์์ฃผ ์ฌ์ ์์ง๋ ์์์ง๋ง, ๋น ์๊ฐ์ด ์๊ธธ ๋๋ง๋ค ์ด์ ์ฝ๋๋ฅผ ๋ณต๊ธฐํ๊ณ ๊ฐ์ ์ ์ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ธํ๋ค. ํนํ ์ด๋ฒํ๋ก์ ํธ๋ ํผ์ํ๋ ํ๋ก์ ํธ๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ ํ์ธ๋ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ง์ผ๊ฒ ๋ค๋ ๋ชฉํ๊ฐ ์์๋ค.
์๋ฅผ ๋ค๋ฉด, ์ฌํ ๊ณํ์ ๋ฑ๋กํ๋ ๊ณผ์ ์ ๋ฉํฐ์คํ
ํผ์ผ๋ก ๊ตฌํํ๋ฉด์ ๋ค๋ฅธ ๋๋ฃ๋ค์ด ๋ณด์์ ๋์๋, ์ถ๊ฐ ์ค๋ช
์์ด ์ฝ๋๋ง์ผ๋ก ๋ฑ๋ก๊ณผ์ ์ด ์ดํด๋ฌ์ผ๋ฉด ํ๋ ๋ฐ๋จ์ด ์์๋ค.์ฌ๊ธฐ์ ํ ์ค์ useFunnel ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌํ๊ณผ์ ์ ์ค๋ช
ํ๋ ์์์ ์ ํ๊ฒ ๋์๊ณ ์ด๋ฅผ ํด๋น ํ๋ก์ ํธ์์๋ ์ ์ฉํด๋ณด์๋ค.ํ์ด์ง๋ฅผ ๋๋๋ค๋ฉฐ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ์๋์ ํ๋์ ํ์ด์ง์์ ๊ฐ ๋จ๊ณ์ ํ๋ฆ์ ํ์
ํ ์ ์๋๋ก ํ์๋ค.
onNext, onSkip, onBack์ ํตํด ๊ฐ๋จ๊ณ์ ์ด์ ๋จ๊ณ๋ ๋ฌด์์ธ์ง, skip์ ์ด๋๋ก ์ด๋ํ๋์ง๋ฅผ ํ๋์ ํ์
ํ ์ ์๋ค.
return (
<div>
{step === 'SEARCH' && (
<Search
onBackClick={handleBackClick}
onNext={data => {
// "์ฅ์ ์ด๋ฏธ์ง "ํด๋ฆญ์
setDetail(data);
setStep('DETAIL');
}}
onSkipDetail={data => {
// "์ ํ"๋ฒํผ ํด๋ฆญ์
setRegisterData(prev => ({ ...prev, ...data }));
setStep('TIME');
}}
/>
)}
{step === 'DETAIL' && (
<Details
onBackClick={() => {
setStep('SEARCH');
setDetail('');
}}
onNext={data => {
// ์ผ์ ์์ฑ ํด๋ฆญ์
setRegisterData(prev => ({ ...prev, ...data }));
setStep('TIME');
}}
/>
)}
{step === 'TIME' && (
<div className=" h-full">
<RegisterDayAndTime {...RegisterTimeProps} />
</div>
)}
</div>
);
};
ํ์ด์ง ๋ผ์ฐํฐ, api์๋ํฌ์ธํธ๋ฅผ ๊ฐ์ฒด์์๋ก ๊ด๋ฆฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ์์๋๋ฐ ์ด๋ฅผ ์ข๋ ๋นจ๋ฆฌ ํ๋ก์ ํธ์ ๋์
ํ์ง ๋ชปํ๋ค. ๊ฒฐ๊ตญ ๋ง์ง๋ง ์ฃผ์ฐจ์ ๋ชฐ์์ ์ ๋ฆฌ๋ฅผ ํ๊ฒ ๋์๋๋ฐ ํ๋ก์ ํธ ์ด๋ฐ๋ถํฐ ๋ฏธ๋ฆฌ ์ ํ๊ณ ๊ฐ๋๋ผ๋ฉด ํ๋ฐ์ ๋ค์ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ์์
์ ํ์ง ์์๋ ๋์์๊ฒ ๊ฐ๋ค.
ํด๋น ๊ณผ์ ์ ์ด๋ป๊ฒ ์ ๋ฆฌํ๊ณ ์ ํ์๋์ง๋ qeury key ๊ตฌ์กฐํ ๊ณผ์ ๊ณผ ํจ๊ป ํฌ์คํ
ํ ์์ ์ด๋ค!
๊ธฐํ์ ๋งค์ฐ๋งค์ฐ ์ค์ํ๋ค. ํ๋ก์ ํธ ์ ์ฒด์ ์ฒญ์ฌ์ง์ ๊ทธ๋ฆฌ๊ณ , ์ฐ๋ฆฌ ์๋น์ค๊ฐ ํด๊ฒฐํด์ผํ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ , ์ฌ์ฉ์์๊ฒ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ๊ธฐํ๋จ๊ณ์์ ๋์น ๋ถ๋ถ ๋๊ฐ์ง๊ฐ ์์๋ค.
1. ๋ฐ์คํฌํ view์ ๋ชจ๋ฐ์ผ view์ ์ด์ธ๋ฆฌ๋ UI๋ ๋ฐ๋ก์๋ค.
์ฌํ๊ณํ ์์ฑ์ ๊ฒ์์ฐฝ์ ๋ชจ๋ฐ์ผ ๋ทฐ ์ค๋ฝ๊ฒ ๋์์ธํ๋ค๋ ํผ๋๋ฐฑ์ด ์์๋ค. ๋ ํผ๋ฐ์คํ ์๋น์ค์ ๋์์ธ์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ๊ฒ์ธ๋ฐ, ์ด๋ ๋ชจ๋ฐ์ผํ๋ฉด์ ๋ง๋ Ui์๋ค.
2. open api๋ฅผ ์ ํํ ๋๋ ํํธํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ํํ์.
๋น์ง์ ์ฃผ API์ ์ฅ์ ์ ์ผ๊ด๋ ๋ฐ์ดํฐ๋ก ์๋ต๋๋ ํ๋๊ฐ์ด ์ ๋ค๋ ์ . ๊ณ ํ์ง์ ์ฌ์ง์ ์ ๊ณตํ๋ค๋ ์ ์ด์๋ค. ๋ค๋ง ํด๋น ๊ด๊ด์ง์ ๋ํ ์์ธ์ ๋ณด๊ฐ description ํ๋๋ก๋ง ์ค๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ค์ ๋นํด ์์ธํ์ด์ง๊ฐ ๋น์ฝํด๋ณด์ด๋ ๋จ์ ์ด ์์๋ค.
๋ค์ ํ๋ก์ ํธ์์ open api๋ฅผ ์ ํํ๊ฒ ๋๋ค๋ฉด ๋ณด๋ค ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ํํด์ผ๊ฒ ๊ณ , ํ๊น ๋๋ฐ์ด์ค์ ๋ง๋ ํ๋ฉด์ ๋์์ธํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ธฐ์ ์ ์ผ๋ก ๋์ ํ๋ ๊ณผ์ ์ ๋ชฉ๋ง๋ผ์๋ค๋ ํ์ฅ๋์ ๋ง์์ด ์ดํด๊ฐ๋์๋ค.๋๋ ๋ฉํ ๋ง์์ ๋ฐ๋ณต์ ์ธ ๊ฒ์ํ๋ง ์์ฐํ๋ ํฌํธํด๋ฆฌ์ค๊ฐ ๋๋๊ฒ ๊ฐ๋ค๋ ๊ณ ๋ฏผ์ ๋ง์๋๋ ธ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ๋ฐ ๋ฉํ ๋ง์ ํตํด ์น์์ปค, ๋ชจํน ๋ฑ ๋ค์ํ๊ฒ ๋์ ํ ๊ฑฐ๋ฆฌ๊ฐ ์ฃผ์ด์ ธ์์ด์ ์ดํ ์ฑ๋ฅ๊ฐ์ ์ ์งํํ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด๋ คํ๋ค!
๋๋ ๋๋ฌธ์ T ์ฑํฅ์ด๋ผ ์๋๋ฐฉ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ค๋์ํค๊ฒ ๋ค๋ ๋ง์์ด ์์ ๋๋ฃ์ ๋ง์์ ๋จผ์ ํค์๋ฆฌ์ง ๋ชปํ ๋๊ฐ ๋ง๋ค. ์ด๋ฐ ๋จ์ ์ ์๊ธฐ์ ๋๋ ์์์ ์ผ๋ก ๋ ์ฑ๋งํฌ๋ฅผ ์ง์ํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ํ์ฅ๋์ ์ปค๋ฎค๋์ผ์ด์ ๋ฐฉ๋ฒ์ด ๋์ ๋ฌ๋ผ์ ๋ง์ด ๋ฐฐ์ ๋ค. ํ๋ก์ ํธ ์ด๋ฐ์๋ axios ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ์(?)์ผ๋ก ์ฌ์ฉํ๊ณ ์์๋๋ฐ ์ฌ๋ฌ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋๋ฉด์ axios์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ธํฐ์ ํฐ๋ก ์๋ฌ๋ฅผ ํธ๋ค๋งํ๋๊ฒ์ด ์ข๊ฒ ๋ค๋ ์๊ฒฌ์ ํ์๊ฒ ์ดํํ์๋ค. ํ์ง๋ง api ์ฐ๊ฒฐ์ด ํ๋ฐํ๊ฒ ์งํ๋๋ํฐ๋ผ ํด๋น๊ธฐ๋ฅ์ ๋ฐ๋ก ์ถ๊ฐํ๋ฉด ์ถฉ๋์ด ๋ง์ด ๋ฐ์ํ ๊ฒ ๊ฐ๋ค๋ ํ์ฅ๋์ ์๊ฒฌ์ด ์์ด์ ๋ค๋ฅธ ๋๋ฃ๋ค์ด ๊ธฐ๋ฅ์ ์์ฑํ ๋๊น์ง ๋ณด๋ฅํ๋ฉด ์ด๋ป๊ฒ ๋๋ ํผ๋๋ฐฑ์ ๋ฐ๊ฒ๋์๋ค. ์ฌ์ค ์์ผ๋ก๋ ์ธ์คํด์ค ์ถ๊ฐํ๋ ๊ฒ์ ๋์ ๋ณ๊ฒฝ์ด ์ถฉ๋์ ๊ณ ๋ คํด์ผ๋๋ ๊ฒ์ธ์ง ํฌ๊ฒ ๋ฉ๋๋์ง๋ ์์์ง๋ง '์ ์๋์ด ํ๊ณ ์ถ์ผ์ ๊ฒ ๋๊ปด์ ธ์ ์ดํด๋์'ํ๋ง๋์ ์์ฐ์ค๋ ์๊ฒฌ์ ๊ตฝํ๊ฒ๋์๋ค. ์๋๋ฅผ ์ค๋ํ๋ ๊ฒ์ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ช ๋ฟ์๋๋ผ ์๋์ ๋ง์์ ํค์๋ฆฌ๋ ๊ฒ๋ ๊ณ ๋ คํด์ผ ํ๋ค๋ ์ ์ ์๊ฒ๋์๋ค.
๊ฐ์ฌ๋๊ณผ ๋ฉํ ๋๊ป ์ฌ๋ฌ๋ฒ ํผ๋๋ฐฑ ๋ฐ์ผ๋ฉฐ ๋ฏธ์ฒ ์๊ฐ์น ๋ชปํ ๋ถ๋ถ์์ ๊ฐ์ ํด์ผํ ์ ์ ์ฐพ๊ฒ๋์๊ณ , UX ๊ด์ ์์ ๋ฌด์์ ์ ๊ฒฝ์จ์ผํ๋์ง ์๊ฒ๋์๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ์๋น์ค์ ์ฒซ์ธ์์ธ ๋ฉ์ธํ์ด์ง๋ฅผ ๋งก๊ฒ ๋์ด์ ๊ฐ์ฅ ํผ๋๋ฐฑ์ ์์ฃผ ๋ฐ๊ฒ๋์๋ค. ๋ฐฐํฌ ํ์ ๋ฉํ ๋๊ป์ ์ง์ ์๋น์ค๋ฅผ ์ฌ์ฉํด๋ณด๋ ๋ชจ์ต์ ๋ณด๊ฒ๋์๋๋ฐ, ์บ๋ฌ์
์ ๋ฌดํ์ผ๋ก ๋๊ฒจ๋ณด๊ธฐ, ๋ก๊ทธ์ธ ํผ์์ ์ ํจ์ฑ ์ฒ๋ฆฌ, ์บ๋ฆฐ๋๋ฅผ ์ฌ๋ฌ๋ฒ ํด๋ฆญํ์ ๋ ๋ฒ๊ทธ๋ ๋ฐ์ํ์ง ์๋์ง ๋ฑ์ ์ค์ ์ ์ผ๋ก ๋ณด์
จ๋ค.
์ค์ ๋ก ๊ฐ๋ฐ์๋๊ตฌ๋ก css๋ฅผ ๋ง์ ธ๋ณด์๋ฉฐ ๋ฐ์ํ ๋ ์ด์์์์ ๊ณ ๋ คํดํ ์ ๋ค์ ์ง์ด์ฃผ์
์ ๊ฐ์ ์ฌํญ์ ์ถ๊ฐํ ์ ์์๋ค.