์ด๋ฒ ๊ณผ์ ๋ ์ด๋ฏธ ๋์ํ๊ณ ์๋ ํ์์ค ์์ฝ ์๋น์ค๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๋ฌธ์ ์๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ํต์ฌ์ด์๋ค. ๋จผ์ ๋๋ฆ๋๋ก ๋ฆฌํฉํ ๋ง์ ์งํํด PR์ ์ฌ๋ ธ๊ณ , ์ดํ ํด์ค ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์, ์ธ์ ๊น์๋ ๋ฌธ์ฅ๋ค์ ์ ๋ฆฌํด ๋ณด์๋ค.
1. ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ ์๋๋ผ ์์ธกํ๋ค.
ํด์ค ๊ฐ์์์ ๊ฐ์ฅ ์ธ์ ๊น์๋ ๋ฌธ์ฅ์ด ์์๋๋ฐ, ์ฝ๋๋ฅผ ํ ์ค์ฉ ๊ผผ๊ผผํ ํด์ํ๋ฉฐ ์ฝ๋ ๊ฒ์ด ์๋๋ผ ์ง๊ธ๊น์ง์ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ํจํด์ ์ธ์ํ๊ณ "์ด๋ค์์ ์ด๋ฐ ์ฝ๋๊ฐ ๋์ค๊ฒ ์ง?"๋ผ๊ณ ์์ธกํ๋ฉด์ ์ฝ๋๋ค๋ ๊ฒ์ด์๋ค. ์์ธก์ด ๋ง์ผ๋ฉด ๋น ๋ฅด๊ฒ ์ดํดํ๊ณ ๋์ด๊ฐ๊ณ , ๋ฐ๋๋ก ์์ธก์ด ํ๋ฆฌ๋ ์๊ฐ ํ๋ฆ์ด ๋๊ธฐ๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋์ง๊ฒ ๋๋ค. ๊ทธ๋์ ์ค์ํ ๊ฑด ์ฝ๋๋ฅผ ์งค ๋ ๋ด๊ฐ ์๋ํ ๋๋ก ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ์ฌ์ค “์ข์ ์ฝ๋๋ ์์ธก ๊ฐ๋ฅํ ์ฝ๋์ ๋๋ค” ๊ฐ์ ๋ฌธ์ฅ์ ์ฌํ ์์์ด ๋ค์ด์๋๋ฐ, ์ด๋ฒ์ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ ํจ๊ป ์ค๋ช ์ ๋ค์ผ๋ ์ข ๋ ๊น๊ฒ ์๋ฟ์๋ค. ๊ฒฐ๊ตญ ์ฝ๋ ์ฌ๋์ด ๋ด๊ฐ ์๋ํ ํ๋ฆ๋๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ค์ ๋์์ ์์ํ ์ ์์ด์ผ ํ๊ณ , ๊ทธ ๊ธฐ๋๋ฅผ ๊นจ์ง ์๋ ๊ตฌ์กฐ์ฌ์ผ ํ๋ค.
2. ์ธํฐํ์ด์ค๋ฅผ ๋จผ์ ์ ์ํ์ง ์์ผ๋ฉด props๋ ๊ณ์ ๋์ด๋๋ค.
<BookingFilterPanel
filter={filter}
onChange={handleFilterChange}
floors={floors}
validationError={validationError}
/>
๋น์์๋ ์ ํ ์ด์ํ์ง ์์๋๋ฐ, ์๋๋ฉด ํํฐ UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ๊ฐ๋ค์ ๋๊ธด ๊ฒ๋ฟ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ๋ค์ ๋ณด๋ฉด ํด๋น ์ธํฐํ์ด์ค์๋ ์๋ก ๋ค๋ฅธ ์ฑ๊ฒฉ์ ์ ๋ณด๊ฐ ์์ฌ ์๋ค.
- floors: ๋ฐ์ดํฐ
- validationError: ํผ ์ํ
ํํฐ ์ปดํฌ๋ํธ์์๋ ๋ถ๊ตฌํ๊ณ ์ ์ ๋ค๋ฅธ ์ญํ ๊น์ง ํจ๊ป ๋ ์๋ ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ์ด๋ค. ํด์ค ๊ฐ์์์๋ ์ด๋ฐ ์ํฉ์ ๊ตฌํ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ธํฐํ์ด์ค๊ฐ ์ ์ ๋์ด์ง๋ ๊ตฌ์กฐ๋ผ๊ณ ์ค๋ช ํ์๋๋ฐ, ํ์ํ ๊ฐ์ ๊ณ์ ์ถ๊ฐํ๋ค ๋ณด๋ฉด "์ด ์ปดํฌ๋ํธ๊ฐ ๋ฌด์์ ํ๋์ง"๋ณด๋ค "์ธ๋ถ์์ ๋ฌด์์ ๋๊ฒจ์ค์ผ ํ๋์ง"๊ฐ ๋จผ์ ๋ณด์ด๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
์ด ๊ธฐ์ค์ผ๋ก ๋ค์ ๋ณด๋, ๋ง์ฐํ "์ชผ๊ฐ๋ฉด ๋ ๊น๋ํ ๊ฒ ๊ฐ๋ค"๊ฐ ์๋๋ผ ์ ๋ ์ธ๋ถ์ ์ผ๋ก ๊ธฐ๋ฅ ๋จ์๋ก ๋๋ ์ ์๋์ง์ ๋ํ ๊ทผ๊ฑฐ๊ฐ ์๊ฒผ๋ค. ์๋ BookingFilterPanel ์์ ๊ฐ์ถฐ์ ธ ์๋ DateSelector, TimeSelect, FloorSelect ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ ๋ฐ๊นฅ์ผ๋ก ๋๋ฌ๋ด๊ณ , ๊ฐ์ ์๊ธฐ ์ญํ ๋ง ๊ฐ๋๋ก ๊ตฌ์ฑํ๋ ์ชฝ์ด ๋ ์์ฐ์ค๋ฝ๊ฒ ๋๊ปด์ก๋ค.
- DateSelector
- TimeSelect
- FloorSelect
์ด๋ ๊ฒ ๋๋๋ฉด ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์๊ธฐ ๊ด์ฌ์ฌ๋ง ๊ฐ์ง๊ฒ ๋๊ณ , ์ ์ด๋ ์ธํฐํ์ด์ค๋ง ๋ด๋ ์ญํ ์ด ๋ ๋๋ ทํ๊ฒ ๋ณด์ธ๋ค.
3. ์ปดํฌ๋ํธ๋ ์ผ๋ง๋ ์ค์ค๋ก ์ค๋ช ๋๋๊ฐ? ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์.
<MyReservationList
reservations={myReservationList}
rooms={rooms}
onCancelSuccess={() => setMessage(...)}
onCancelError={() => setMessage(...)}
/>
ํ์ํ ๋ฐ์ดํฐ์ ํธ๋ค๋ฌ๋ฅผ ๋ถ๋ชจ์์ ๋ด๋ ค์ฃผ๋ ์ ํ์ ์ธ ๊ตฌ์กฐ์ด์ง๋ง, ํด์ค ๊ฐ์์์๋ ์ด๋ฐ ๊ตฌ์กฐ์ ํ๊ณ๋ฅผ ์ง์๋ค. ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ ์์กดํ๋ ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์์ผ ํ ๋งฅ๋ฝ๋ ํจ๊ป ๋์ด๋๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ๋ถ๋ฆฌ๋ ๋์ด ์์ง๋ง ์ฌ์ฉํ๋ ์ชฝ์์ ์์์ผ ํ ์ ๋ณด๋ ๋ง์์ง๋ ๊ตฌ์กฐ๋ค. ํต์ฌ์ "๋จ์ํ ๋๋ด๋๊ฐ"๊ฐ ์๋๋ผ, ์ด ์ปดํฌ๋ํธ๋ ์ค์ค๋ก ์ค๋ช ๊ฐ๋ฅํ๊ฐ ๋ผ๋ ๊ธฐ์ค์ด์๋ค.
๊ฒฐ๊ตญ ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ค๋ ์ฌ์ค๋ณด๋ค ์ค์ํ ๊ฑด, ๊ทธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ณ๋ ์ค๋ช ์์ด๋ ์ญํ ์ ์ด๋ ์ ๋ ์ดํดํ ์ ์๋๋๋ ๊ฒ์ด์๋ค. ๋ถ๋ฆฌ ์์ฒด๊ฐ ๋ชฉํ๊ฐ ์๋๋ผ, ์ฝ๋ ์ฌ๋์ด ๋ ํท๊ฐ๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ๋ผ๋ ์ ์ ๋ค์ ๋ณด๊ฒ ๋์๋ค.
4. ์ด๋ฆ์ ์ธ๋ถ ๋งฅ๋ฝ์ด ์๋๋ผ ๋ด๋ถ ์๋ฏธ๋ฅผ ๋๋ฌ๋ด์ผ ํ๋ค.
์ด์ ์๋ setData, handleChange์ฒ๋ผ ์ํ๋ฅผ ๋ฐ๊พธ๋ ํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ฆ์ ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋๋ฐ, ๋ค์ ๋ณด๋ ์ด๋ฐ ๋ฐฉ์์ ์ปดํฌ๋ํธ์ ๋ด๋ถ๋ณด๋ค๋ ์ธ๋ถ ๋งฅ๋ฝ์ ๋ ๊ฐ๊น์ด ์ด๋ฆ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฐ ์ฝ๋๊ฐ ์๋ค๊ณ ํ๋ฉด,
<DateSelector
date={date}
setDate={setDate}
/>
์ด ์ธํฐํ์ด์ค๋ ์ผํ ๋ณด๋ฉด ์์ฐ์ค๋ฌ์ ๋ณด์ด์ง๋ง, setDate๋ผ๋ ์ด๋ฆ์ ์ด ์ปดํฌ๋ํธ๊ฐ ํธ์ถ๋๋ ๋ฐ๊นฅ์ ๋งฅ๋ฝ์ ์์กดํ๊ณ ์๋ค. ๋ง์ฝ ๋ ์ง๊ฐ ๋ฐ๋์์ ๋ ์ฝ์์ ์ฐ๊ฑฐ๋, API๋ฅผ ํธ์ถํ๊ฑฐ๋, ๋ค๋ฅธ ์ํ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์ํฉ์ด ์จ๋ค๋ฉด setDate๋ผ๋ ์ด๋ฆ์ ๋ ์ด์ ์ ์ ํ์ง ์๊ฒ ๋๋ค. ์ฆ, ์ปดํฌ๋ํธ๊ฐ “๋ฐ๊นฅ์์ ๋ฌด์์ ํ ์ง”๊น์ง ์๊ณ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ HTML ์ธํฐํ์ด์ค์ ๋น์ทํ ํจํด์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ๋ ์์ฐ์ค๋ฝ๋ค.
<DateSelector
value={date}
onChange={(nextDate) => setDate(nextDate)}
/>
์ด๋ ๊ฒ ๋ฐ๊พธ๋ฉด DateSelector๋ ๋จ์ํ "๊ฐ์ด ๋ฐ๋์๋ค"๋ ์ฌ์ค๋ง ์ ๋ฌํ๊ณ , ๊ทธ ์ดํ์ ๋ฌด์์ ํ ์ง๋ ์ฌ์ฉํ๋ ์ชฝ์์ ๊ฒฐ์ ํ๊ฒ ๋๋ค. ์ปดํฌ๋ํธ๋ ์์ ์ ์ญํ ์๋ง ์ง์คํ๊ณ , ์ธ๋ถ ๋งฅ๋ฝ๊ณผ๋ ๋ถ๋ฆฌ๋๋ ๊ตฌ์กฐ๋ค.
++
๋ง์ง์ ๋ํ ์๊ธฐ๋ ๊ธฐ์ต์ ๋จ์๋๋ฐ, margin์ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์ ์์ญ์ด๊ธฐ ๋๋ฌธ์, ์ปดํฌ๋ํธ๊ฐ ๋ฐ๊นฅ ๊ฐ๊ฒฉ๊น์ง ๊ฒฐ์ ํ๋ ค ๋ค๋ฉด ์ฌ์ฌ์ฉํ ๋๋ง๋ค ๋ณด์ ์ฝ๋๊ฐ ๋ถ๊ธฐ ์ฝ๋ค. ๊ทธ๋์ ์ปดํฌ๋ํธ๋ padding๋ง ์ฑ ์์ง๊ณ , margin์ ์ฌ์ฉํ๋ ์ชฝ์์ ์ ์ดํด์ผ ํ๋ค๋ ์์น์ด ์ธ์ ๊น์๋ค. ์ฌ์ค ๋์์ธ ์์คํ ์ด๋ ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ๋๋ฅผ ์ ์ธํ๋ฉด ๋ง์ง์ ํฌ๊ฒ ์์ํ์ง ์๊ณ ์ฌ์ฉํด ์๋ ๊ฒ ๊ฐ์๋ฐ, CSS์ ์ธ ๋ถ๋ถ๋ ๊ฒฐ๊ตญ ์ปดํฌ๋ํธ์ ๊ด์ฌ์ฌ์ ์ฐ๊ฒฐ๋๋ค๋ ์ ์ด ์ธ์ ๊น์๋ค.
// ์ปดํฌ๋ํธ ๋ด๋ถ์์ margin์ ๊ฒฐ์
<Card style={{ marginTop: 16 }} />
// ์ฌ์ฉํ๋ ์ชฝ์์ ๊ฐ๊ฒฉ์ ์ ์ด
<Wrapper>
<Card />
</Wrapper>
๋น์ทํ ๋งฅ๋ฝ์ผ๋ก ๋ผ๋ฒจ๋ ๋์ผํ๋ค.
// ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ผ๋ฒจ ํฌํจ
<DateSelector />
// ๋ด๋ถ
<label>๋ ์ง ์ ํ</label>
<input ... />
์์ ๊ตฌ์กฐ๋ ์ปดํฌ๋ํธ๊ฐ "์ด๋ค ๋ฌธ๋งฅ์์ ์ฌ์ฉ๋๋์ง" ๊น์ง ์๊ณ ์๋ ์ํ๋ค. ๋ฐ๋๋ก ๋ผ๋ฒจ์ ๋ถ๋ฆฌํ๋ฉด ์ปดํฌ๋ํธ์ ์ญํ ์ด ๋ ๋ช ํํด์ง๋ค.
<label>๋ ์ง ์ ํ</label>
<DateSelector value={date} onChange={...} />
์ด๋ ๊ฒ ๋๋ฉด DateSelector๋ "๋ ์ง๋ฅผ ์ ํํ๋ค" ๋ ์ญํ ์๋ง ์ง์คํ๊ณ , ์ด๋ค ํ ์คํธ๋ฅผ ๋ณด์ฌ์ค์ง๋ ์ฌ์ฉํ๋ ์ชฝ์์ ๊ฒฐ์ ํ ์ ์๋ค.
๊ฒฐ๊ตญ ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณํ ๋๋ ํญ์
- ์ด๊ฑด ์ปดํฌ๋ํธ ๋ด๋ถ์ ์ฑ ์์ธ๊ฐ?
- ์๋๋ฉด ์ฌ์ฉํ๋ ์ชฝ์ ์ฑ ์์ธ๊ฐ?
๋ฅผ ๋๋ ์ ๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์์ ์๋ ์ด๋ฐ ๋ถ๋ถ์ ๊น๊ฒ ์๊ฐํด ๋ณธ ์ ์ด ์์๋๋ฐ, ์ด๋ฒ์๋ ์ปดํฌ๋ํธ์ ๊ฒฝ๊ณ๋ฅผ ๋๋๋ ๊ธฐ์ค์ผ๋ก ๋ค์ ๋ณผ ์ ์๊ฒ ๋์๋ค.
๋๋ ์
์์ฆ AI๊ฐ ์ค์ง์ ์ผ๋ก ์ ๋ฌด ์์ผ๋ก ๋ค์ด์ค๊ณ , ๋น ๋ฅธ ์์ฐ์ฑ์ด ๋ ์ค์ํ๊ฒ ์ฌ๊ฒจ์ง๋ ๋ถ์๊ธฐ ์์์ ํ๋ก ํธ์๋์ ์ค๊ณ๋ ๊ตฌ์กฐ์ ๋ํ ๊ณ ๋ฏผ์ด ์์ ๋ณด๋ค ๋ ์ค์ํ๊ฒ ๋ฐ์๋ค์ฌ์ง๋ ์๊ฐ๋ค์ด ์๋ ๊ฒ ๊ฐ๋ค. AI๊ฐ ์์ฑํด ์ค ๊ฒฐ๊ณผ๋ฌผ๋ ํ๋ฉด๋ง ์ ๋์ํ๋ฉด ์ถฉ๋ถํ๋ค๋ ์์ ํ๊ฐ๋ฅผ ๊ณ์ ๋ฃ๋ค ๋ณด๋, ๋ ์ญ์ ์ ์ ํ์ด ๋น ์ก๊ณ ๊ทธ ๊ธฐ์ค์ ์ต์ํด์ง๊ณ ์์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฐ ํ๋ฆ ์์ฒด๋ฅผ ๋ถ์ ํ๊ณ ์ถ์ ๊ฑด ์๋์ง๋ง, ๊ทธ๋ฐ ์ฅ๋ฉด๋ค์ด ๋ฐ๋ณต๋๋ค ๋ณด๋ ๋๋ ๋ชจ๋ฅด๊ฒ ์๋๋ผ๋ฉด ํ ๋ฒ ๋ ๊ณ ๋ฏผํ์ ๋ถ๋ถ์ ๊ทธ๋ฅ ๋๊ธฐ๊ฒ ๋๊ณ , ์ด๋ ์๊ฐ๋ถํฐ๋ "๊ทธ๋, ์ด ์ ๋๋ฉด ๋๊ฒ ์ง" ํ๋ ๋ง์์ผ๋ก ๊ตฌํํ๊ณ ์์๋ ๊ฒ ๊ฐ๋ค. ๋ฌผ๋ก ๋๋ฆ๋๋ก ๊ธฐ์ค์ ์ ๋ฆฌํด ๋๊ณ AI์ ํจ๊ป ํ์ฉํ๋ ค๊ณ ๋ ํ๊ณ ์์ง๋ง, ๊ทธ ๊ณผ์ ์์ฒด๊ฐ ์์ ๋งํผ ์ฆ๊ฒ๊ฒ ๋๊ปด์ง์ง ์์๋ ๊ฒ๋ ์ฌ์ค์ด๋ค.
์ด๋ฒ ๊ณผ์ ๋ฅผ ํ๋ฉด์ ์ค๋๋ง์ ์ฝ๋ ์์ฒด๋ฅผ ๋ค์ ์๊ฐํด ๋ณด๊ฒ ๋์๋ค. ์ด๋ป๊ฒ ๋๋์ง, ์ด๋ค ์ด๋ฆ์ด ๋ ์์ธก ๊ฐ๋ฅํ์ง, ์ธํฐํ์ด์ค๊ฐ ์ด๋ค ์ญํ ์ ๋๋ฌ๋ด๋์ง ๊ฐ์ ์ด์ผ๊ธฐ๋ค์ด ๋ด๊ฐ ์๋ ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ธฐ์ค๋ค์ ๋ค์ ๋ ์ฌ๋ฆฌ๊ฒ ํด ์ฃผ์๋ค.
์ด๋ฒ ๊ณผ์ ๋ ๋ฆฌํฉํ ๋ง ๊ธฐ์ค์ ๋ฐฐ์ฐ๋ ๊ฒ์ ๋์ด, ๋ด๊ฐ ์ฝ๋๋ฅผ ์ด๋ค ๋ง์์ผ๋ก ๋ํ๊ณ ์์๋์ง๋ฅผ ๋ค์ ๋์๋ณด๊ฒ ๋ง๋ ์๊ฐ์ด์๋ค.
'๐ WIL > ํ๊ณ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ค๊ตญ์ด ๋ฒ์ญ ํค ๊ด๋ฆฌ ํ๋ก์ธ์ค ๊ฐ์ ํ๊ธฐ (0) | 2026.06.07 |
|---|---|
| Toss Frontend Accelerator 5๊ธฐ Pre-Course ํ๊ณ (1) | 2026.02.08 |
| 8์ ์ฒซ์งธ ์ฃผ.. (6) | 2025.08.03 |
| ๐ฆ Grit์ ํ์ฉํ Emotion โ Panda CSS ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ (0) | 2025.03.16 |
| ๋ธ๋ก๊ทธ ํ๊ณ ๋ฐ 2025 ๋ชฉํ (0) | 2025.01.05 |