HARD
7์ฃผ์ฐจ ๊ณผ์ ์ฒดํฌํฌ์ธํธ
๊ธฐ๋ณธ๊ณผ์
- ์ด 11๊ฐ์ ํ์ผ, 115๊ฐ์ ๋จ์ ํ ์คํธ๋ฅผ ๋ฌด์ฌํ ์์ฑํ๊ณ ํต๊ณผ์ํจ๋ค.
์ง๋ฌธ
Q. handlersUtils์ ๋จ๊ธด ์ง๋ฌธ์ ๋ต๋ณํด์ฃผ์ธ์.
Q. ํ ์คํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ๋์ํค๊ธฐ ์ํด ์์ฑํ๋ ์ค์ ๋ค์ ์๊ฐํด์ฃผ์ธ์.
์ฌํ ๊ณผ์
- App ์ปดํฌ๋ํธ ์ ์ ํ ๋จ์์ ์ปดํฌ๋ํธ, ํ , ์ ํธ ํจ์๋ก ๋ถ๋ฆฌํ๋๊ฐ?
- ํด๋น ๋ชจ๋๋ค์ ๋ํ ์ ์ ํ ํ ์คํธ๋ฅผ 5๊ฐ ์ด์ ์์ฑํ๋๊ฐ?
๊ณผ์ ์ ํํ๊ณ
ํ ์คํธ ์ฝ๋๋ ํด๋ณด๊ณ ์ถ์๋ ๋ถ๋ถ์ด๊ณ ์ ํด๋ด๊ณ ์ถ์ด์ ์์ฌ์ ๋ถ๋ ค์ hard ๋จ๊ณ๋ฅผ ์ผ๋จ ํด๋ณด์ํ๊ณ ์๋ํด๋ดค๋๋ฐ, ์ด์ฌ์๊ฐ ํจ๋ถ๋ก ๋๋ณด๊ธฐ์๋ ์ฝ์ง ์์๋ค์โฆ. ํ ์คํธ ์ฝ๋๋ฅผ ์ฒ์ ์ ํด๋ณด๋ ๊ฑด๋ฐ ์ด์ง๋จ๊ณ๊น์ง๋ ํ๋์ฉ ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ๋ ๋๋์ด๋ผ ์ฌ๋ฏธ์์์ต๋๋ค. ์ด์ง ๋จ๊ณ๊น์ง๋งโฆ. ๋ฏธ๋์๋ถํฐ๋ ์ด๋ป๊ฒ ์์ํด์ผํ ์ง ๊ฐ์ด ์์กํ๋๋ผ๊ณ ์. ๊ทธ๋์ ๋ค๋ฅธ ๋ถ๋ค์ pr์ ๋ง์ด ์ฐธ๊ณ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํ๋๋ผ๋ ๋ค๋ค ํ์ด๊ฐ๋ ๋ฐฉ์์ด ๋ค์ํด์ ์ฒ์์๋ ๊ฐ์ ์ก๊ธฐ ํ๋ค์๋๋ฐ ์ ๊ฐ ๊ฐ์ฅ ์ดํดํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ ์ฐธ๊ณ ํด์ ์ ์ฉํด๋ณด๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ฌ์ ์ข ๋๊ณ ๋จ๊ณ๋ฅผ ๋ฎ์ถฐ์ ์งํํ๋ค๋ฉด hard ๋จ๊ณ์์ ์ถ๊ฐ์ ์ผ๋ก ํค๋งธ๋ ์๊ฐ์ ํ ์คํธ ์ฝ๋์ ์์ฑ๋๋ฅผ ๋์ด๊ฑฐ๋ ํ ์คํธ ์ฝ๋๋ฅผ ๊น๊ฒ ํ์ตํ๋ ์๊ฐ์ผ๋ก ๋์ฒดํ ์ ์์์ ๊ฒ ๊ฐ์ ์์ฌ์ด ๋ถ๋ถ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ผ๋จ ํ ์คํธ ํต๊ณผ ํ๋ฐํด๋ฅผ ๋๋ฆฌ๊ณ ์ฝ๋๋ฅผ ๊ฐ์ ํด์ผ์ง๋ผ๊ณ ๋ง์ ๋จน์๋ ๋ถ๋ถ์ ์๋ ๋ชป๋์ต๋๋ค.ใ ใ
๊ธฐ์ ์ ์ฑ์ฅ
- ๊ฐ ์์๋ง๋ค ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ๋์ง ์ฝ์ง ์์ผ๋ฉด์๋ ํ๋์ฉ ์ฐพ์๊ฐ๋ฉด์ ํด๊ฒฐํด ๋๊ฐ๋๋ง๋ค ์ฌ๋ฏธ์์์ต๋๋ค.
- ํ ๊ฐ์ ํ ์คํธ์ฝ๋๋ฅผ ์ง๋๋ผ๋ ๊ทธ ์์์ ์๊ฐ๋ณด๋ค ๋ง์ ์ ์ฐจ๊ฐ ํ์ํ๋๋ผ๊ณ ์. โ๋ฑ๋ก์ ํ๋ฉด ๋ชฉ๋ก์ด ๋ํ๋๋คโ ๋ผ๋ ํญ๋ชฉ์ฒ๋ผ ๋จ์ํด ๋ณด์ด์ง๋ง โ์ด๊ธฐ์ ๋ชจ๋ ํผ์ด ๋น ๊ฐ์ด๋ค โ ๊ฐ์ ์ ๋ ฅํ๋ค โ ๋ฒํผ์ ๋๋ฅธ๋ค โ ์๋ฌ/์ฑ๊ณต์ ๋ฐํํ๋ค โ ์ ๋ ฅ๊ฐ๊ณผ ๋ชฉ๋ก์ ๊ฐ์ด ๋์ผํ์ง ํ์ธํ๋คโ ๋ฑ์ ๊ณผ์ ๋ค์ ํ๋ํ๋ ํ ์คํธ ํด์ผํ๋๊ฒ ๊น๋ค๋กญ๊ธฐ๋ ํ๋ฉด์๋ ์ฌ๋ฏธ์์์ต๋๋ค.
- ํ
์คํธ์์ ์์ฃผ ์์ฑ์ด ํ์ํ๋ ์ด๋ฒคํธ ๋ชฉ๋ก์ ์ํด ํฉํ ๋ฆฌ ํจ์๋ฅผ ์์ฑํด์ ์ฌ์ฉํด๋ณด์์ต๋๋ค.
// ์ด๋ฒคํธ ์์ฑ ํฉํ ๋ฆฌ ํจ์ export const createEvent = ({ id, date, title, startTime, endTime, description, location, notificationTime, }: Partial<Event>): Event => { return { id: id || '1', date: date || '2025-08-01', title: title || `event ${id}`, startTime: startTime || '09:00', endTime: endTime || '10:00', description: description || 'description', location: location || 'location', category: 'category', repeat: { type: 'none', interval: 0, }, notificationTime: notificationTime || 0, }; }; // ๋๋ฏธ ์ด๋ฒคํธ ์์ฑ const events = [ createEvent({ id: '7', date: '2025-07-31', title: '7์ ์ด๋ฒคํธ', }), createEvent({ id: '8', date: '2025-08-01', title: '8์ ์ด๋ฒคํธ', }), ]; - ์ง์ ํ๋ฉ๋์ด ๋จ๊ฒจ์ฃผ์ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ ๊ฐ ์ ๋ฐ์ ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ๋ฆฌ์ ํ๋ ๋ก์ง์ ์ ๋๋ก ๊ณ ๋ คํ์ง ๋ชปํ๋ค๋ ๊ฑธ ์๊ฒ๋์๋ค์. ํ ์คํธ ๊ฒฉ๋ฆฌ๊ฐ ์ ํ ๋์ง ์๊ณ ์์๋คโฆ!! ๋ค์ ๊ณผ์ ์์๋ ์ ๋๋ก ์ ์ฉํด ๋ณผ ๊ฒ!
์ฝ๋ ํ์ง
ํ์ต ํจ๊ณผ ๋ถ์
๊ณผ์ ๋ฅผ ํ๋ฉด์ ํ๋ค์์ง๋ง, ํ ์คํธ ์ฝ๋์ ํ์์ฑ์ ๋ํด์ ๋๋ ์ ์์๋ ์๊ฐ์ด์์ต๋๋ค. ํนํ ํ ์คํธ๋ฅผ ์ ๋ถ ํต๊ณผํ ํ์ ๋ฆฌํฉํ ๋ง์ ํ๋ ๊ณผ์ ์์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ฑ๋๋ฅผ ๋ณด์ฅํ ์ ์๋ค๋ ๋ถ๋ถ์์ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ๊นจ๋ซ๊ฒ ๋์์ต๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ง๊ธ์ ๋๋ ํ๋ค์ง๋ง ๋ฏธ๋์ ๋๋ ์ง๊ธ์ ๋ ๋๋ถ์ ์ข ๋ ํธํ ์ ์๋ค..! ์ค๋ฌด์์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์จ๋ณด๊ณ ์ถ๋ค!
๊ณผ์ ํผ๋๋ฐฑ
ํ ์คํธ ์ฝ๋๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋์๊ฒ๋ ์ฝ์ง ์์ ๊ณผ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ai ๋ํก์ค๋ฅผ ํด์ผํ๋คโฆ? ๋๋ฌดํ์ญ๋๋คโฆ ๊ทธ๋ฐ๋ฐ ai๋ฅผ ์ฐ๊ฒ ๋๋ฉด ๋ ๊ธ๋ฐฉ ๋ต์ ์ฐพ์ ์ ์๋ ๋ถ๋ถ์ด๋ผ ์คํ๋ ค ์ฒ์์ด๋๊น ai ๋์์์ด ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋ณด๋ ๊ณผ์ ์ด ํ์ํ๋ค๊ณ ์๊ฐ์ด ๋ญ๋๋ค.
๋ฆฌ๋ทฐ ๋ฐ๊ณ ์ถ์ ๋ด์ฉ
- ํ ์คํธ ์ฝ๋์ ํญ๋ชฉ์ ๋๋๋ ๊ธฐ์ค์ด ๊ถ๊ธํฉ๋๋ค. ์ด๋์ ๋ ์ธ์ธํ๊ฒ ๋๋ ์ผํ๋์ง์ ๋ํ ๊ธฐ์ค์ด๋๊น์? ํ ์คํธ์ ์์ด ๋ง์์ง๋๋ผ๋ ๋ชจ๋ ๋ฐ์ ๊ฐ๋ฅํ ๋์์ ๋ํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋๊ฒ ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
- handler์ handlersUtils๋ฅผ ์์ฑํ๊ธฐ๋ ํ์ง๋ง ์ด ๋์ ๋ํ ๊ตฌ๋ถ์ด ์ ํํ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ค์ ๋ก ์ฝ๋์์๋ handler๋ setupServer์์๋ง ์ฌ์ฉ๋๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ handlersUtils๋ง ์ฌ์ฉํ๋๋ฐ ๊ทธ๋ ๋ค๋ฉด ์ด ๋์ ์ ๋๋ก ํ์ฉ์ ๋ชปํ๊ณ ์๋ ๊ฒ ๊ฐ์์์. ๋์ ์ ํํ ์ฐจ์ด์ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ฐ์ด๋ฉด ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
๊ณผ์ ํผ๋๋ฐฑ
์๋ ํ์ธ์ ํจ์ง๋!! 7์ฃผ์ฐจ ๊ณผ์ ์ ์งํํด์ฃผ์ จ๋ค์ ใ ใ ๊ณ ์ํ์ จ์ต๋๋ค!!
ํ ์คํธ ์ฝ๋์ ํญ๋ชฉ์ ๋๋๋ ๊ธฐ์ค์ด ๊ถ๊ธํฉ๋๋ค. ์ด๋์ ๋ ์ธ์ธํ๊ฒ ๋๋ ์ผํ๋์ง์ ๋ํ ๊ธฐ์ค์ด๋๊น์? ํ ์คํธ์ ์์ด ๋ง์์ง๋๋ผ๋ ๋ชจ๋ ๋ฐ์ ๊ฐ๋ฅํ ๋์์ ๋ํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋๊ฒ ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
๋๋๋ ๊ธฐ์ค์ ํจ์๋ง๋ค ๋ค๋ฅด๋ค๊ณ ์๊ฐํด์. ์ด๋ค ํจ์๋ input๊ณผ output์ ๋ฒ์๊ฐ ๋ช ํํ๊ณ , ๊ฒฝ๊ณ๊ฐ์ ๋ํด ๋ฑ ํ ์คํธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๊ณ ๋ฏผ์ ํ ํ์๊ฐ ์์ด์ง๊ธฐ๋ ํ๊ณ ..?
์ด๋ค ํจ์๋ ์ด๊ฒ ๋ถ๋ช ํํ ๊ฒฝ์ฐ๋ ์๊ณ ๊ทธ๋ฌ๋๊น์ ใ ใ ์ ๋ ๊ฐ์ธ์ ์ผ๋ก "์ต๋ํ ๋ง์ ์ผ์ด์ค"์ ๋ํด ์ผ๋จ ์์ฑํด๋ณด๋๊ฑธ ๊ถ์ฅ๋๋ ค์. ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ํด์ ์ผ๋จ ๋ง์ด ํด๋ด์ผํ๊ณ ์ฒดํ์ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋จ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ค ์ฑ์๋ณด๋๊ฑฐ์ฃ . ๊ทธ๋ ๊ฒ ํ๋ค๋ณด๋ฉด "์ด๋ฐ ํ ์คํธ๋ ์์ด๋ ๋ ๊ฒ ๊ฐ์๋ฐ..?" ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์์ด์.
์ ์ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋ ํญ๋ชฉ... ์ด๋ผ๊ธฐ๋ณด๋จ ์ปดํฌ๋ํธ์ ๋ํ ํ ์คํธ๋ ๋ฌด์๋ฏธํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ์๊ฐํด์. ์ปดํฌ๋ํธ์ ๋ด๋ถ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌํ ๋ค์ ํ ์ input/output ์ ๋ํด ํ ์คํธํ๋๊ฑฐ์ฃ .
์ด์ฐจํผ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ์๋จ์ด๋๊น์ ใ ใ
handler์ handlersUtils๋ฅผ ์์ฑํ๊ธฐ๋ ํ์ง๋ง ์ด ๋์ ๋ํ ๊ตฌ๋ถ์ด ์ ํํ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ค์ ๋ก ์ฝ๋์์๋ handler๋ setupServer์์๋ง ์ฌ์ฉ๋๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ handlersUtils๋ง ์ฌ์ฉํ๋๋ฐ ๊ทธ๋ ๋ค๋ฉด ์ด ๋์ ์ ๋๋ก ํ์ฉ์ ๋ชปํ๊ณ ์๋ ๊ฒ ๊ฐ์์์. ๋์ ์ ํํ ์ฐจ์ด์ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ฐ์ด๋ฉด ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
์ฐจ์ด๊ฐ ์๋ค๊ณ ๋๋๋ค๋ฉด ๊ทธ๋ฅ ํฉ์ณ๋ ๋๋ค๊ณ ์๊ฐํด์ ใ ใ ์ ๊ฐ ์ค๋ช ํด์ ๋ฉ๋ํ๋ ๊ฒ ๋ณด๋ค ํจ์ง๋๊ป์ ๋๋๊ฒ ์ค์ํ๋๊น์.
handlerUtils๋ ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ํ์ํ ๋ณ๋์ ํธ๋ค๋ฌ๋ฅผ ์ด๊ธฐํ ๋ฐ ์ ์ํ๋ ์ฉ๋ handler๋ ๋๋ถ๋ถ์ ํ ์คํธ์ ํ์ํ ๊ธฐ๋ณธ์ ์ธ ํธ๋ค๋ฌ๋ฅผ ์ ์ํ๋ ์ฉ๋
์ด๋ ๊ฒ ๊ตฌ๋ถํ ์ ์์ง ์์๊น ์ถ๋ค์ ใ ใ