์ฃ์กํฉ๋๋ค! 1์์ ์ด๋ฏธ ์์ฑํ์ จ์ผ๋ 2์๋ถํฐ 12์๊น์ง๋ง ์์ฑํ๊ฒ ์ต๋๋ค.
์์ฑ์ผ์: 25.02.21
์ ์ํ ๋ค๋น๊ฒ์ด์ ์์คํ ๋ฐ ๊ณตํต UI ์ปดํฌ๋ํธ ์ธํ๋ผ ๊ฐ๋ฐ
A-WORKS ํ๋ซํผ์ ๊ทผ๊ฐ์ด ๋๋ ๊ณตํต ์ธํ๋ผ ๊ตฌ์ถ. ์ฌ์ฉ์๊ฐ ํ๋ซํผ ๋ด ์ด๋ ํ์ด์ง์ ์๋ ํ์ฌ ์์น์ ๋ง๋ ๋ค๋น๊ฒ์ด์ ์ ์๋์ผ๋ก ํ์ํ๋ ์ ์ํ ๋ค๋น๊ฒ์ด์ ์์คํ ๊ฐ๋ฐ. URL pathname์ ๋ถ์ํ์ฌ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์๋ ๊ฐ์งํ๊ณ , ์ฌ์ด๋๋ฐ์ ์๋จ ๋ฉ๋ด๊ฐ ๋์ ์ผ๋ก ์ ํ๋๋ ์๊ณ ๋ฆฌ์ฆ ์ฐ๊ตฌ. ํ๋ซํผ ์ ์ฒด์์ ์ผ๊ด๋ UI/UX๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ๊ณตํต ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ถ ๋ฐ ๋คํฌ๋ชจ๋/๋ผ์ดํธ๋ชจ๋ ํ ๋ง ์์คํ ๊ตฌํ.
์๊ฒ ์ต๋๋ค! 1์๋ถํฐ 12์๊น์ง ๊ฐ ํญ๋ชฉ์ ๋ด์ฉ์ ๋ ํ๋ถํ๊ฒ ๋๋ ค์ ์์ฑํ๊ฒ ์ต๋๋ค. --- # ์ฐ๊ตฌ๋ ธํธ (์์จ์์) --- ## 1์ **์์ฑ์ผ์: 25.01.23** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๊ธฐ์ ์ง์ ์ ๋ฌด ํ๋ก์ธ์ค ๋ถ์ ๋ฐ A-WORKS ์์คํ ์ํคํ ์ฒ ์ค๊ณ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์์ผํฐ์ ์ค์ ์ ๋ฌด ํ๋ก์ธ์ค๋ฅผ ์ฌ์ธต ๋ถ์ํ๊ณ , A-WORKS ํ๋ซํผ์ ์ ์ฒด ์์คํ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ ์ฐ๊ตฌ ์ํ. ํ์ ์์ ์ฌ์ฉ ์ค์ธ ์์ ๊ธฐ๋ฐ ์ ๋ฌด ๋ฐฉ์์ ๋ฌธ์ ์ (๋ฐ์ดํฐ ์ค๋ณต, ์ ํฉ์ฑ ๋ฏธ๋ณด์ฅ, ์ค์๊ฐ ํํฉ ํ์ ๋ถ๊ฐ, ๋ณด๊ณ ์ ์์ฑ ๋นํจ์จ ๋ฑ)์ ์ฒด๊ณ์ ์ผ๋ก ํ์ ํ๊ณ , ์ด๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์น ๊ธฐ๋ฐ ํตํฉ ํ๋ซํผ์ ๊ธฐ์ ์ ๊ธฐ๋ฐ ์๋ฆฝ. ๊ธฐ์ ๋ถ๋ฅ์ฒด๊ณ(์ฐ๊ตฌ์๊ธฐ์ , ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , ์ ๋ต๊ธฐ์ ๊ธฐ์ , ํ๋ณด๊ธฐ์ , ๊ธฐํ๊ธฐ์ )์ ๋ช ํํ ๋ถ๋ฅ ๊ธฐ์ค์ ์ ์ํ๊ณ , ์ต์ ์น ํ๋ ์์ํฌ์ธ Next.js 15 App Router ๊ธฐ๋ฐ์ ์ค์ฒฉ ๋ผ์ฐํ ๊ตฌ์กฐ ๋ฐ ํต์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ. ํฅํ 11๊ฐ์๊ฐ ์งํ๋ ๊ฐ๋ฐ์ ์ฒญ์ฌ์ง์ด ๋๋ ์ํคํ ์ฒ ๋ฌธ์์ ์ค๊ณ ์ฐ์ถ๋ฌผ ๋์ถ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ํ์ ๋ด๋น์ ๋์ ์ฌ์ธต ์ธํฐ๋ทฐ ๋ฐ ์ ๋ฌด ํํฉ ๋ถ์์ ํตํด ๊ธฐ์ ๊ด๋ฆฌ, ์ ๋ฌธ๊ฐDB, ์ฌ์ ๊ด๋ฆฌ, ๋ณด๊ณ ์, ์์ฐ, ๋ฌธ์ ๋ฑ 6๊ฐ ํต์ฌ ์ ๋ฌด ์์ญ์ As-Is ํ๋ก์ธ์ค๋ฅผ ์์ธ ๋ถ์ํ๊ณ , ๊ฐ ์์ญ๋ณ Pain Point๋ฅผ ๋์ถํ์ฌ ๊ฐ์ ๋ To-Be ํ๋ก์ธ์ค ์ค๊ณ. ํนํ ๊ธฐ์ ์ ๋ณด๊ฐ ๋ด๋น์๋ณ๋ก ๊ฐ๋ณ ์์ ํ์ผ์ ๋ถ์ฐ ๊ด๋ฆฌ๋์ด ๋ฐ์ดํฐ ์ค๋ณต ๋ฐ ๋ฒ์ ๋ถ์ผ์น๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ๋ฌธ์ , ์ฃผ๊ฐ/์๊ฐ ๋ณด๊ณ ์ ์์ฑ ์ ์ฌ๋ฌ ํ์ผ์์ ์์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ทจํฉํด์ผ ํ๋ ๋นํจ์จ, ์์ฐ ์งํ ํํฉ์ ์ค์๊ฐ์ผ๋ก ํ์ ํ ์ ์์ด ์์ฌ๊ฒฐ์ ์ด ์ง์ฐ๋๋ ๋ฌธ์ , ๊ธฐ์ ๋ถ๋ฅ ๋ณ๊ฒฝ(์น๊ฒฉ/์ฌ๋ถ๋ฅ) ์ ์ด๋ ฅ ์ถ์ ์ด ๋ถ๊ฐ๋ฅํ ๋ฌธ์ ๋ฑ ํต์ฌ Pain Point 12๊ฐ ํญ๋ชฉ ์๋ณ ๋ฐ ์ฐ์ ์์ ๋์ถ. - ๊ธฐ์ ์ 5๊ฐ ์ ํ(์ฐ๊ตฌ์๊ธฐ์ , ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , ์ ๋ต๊ธฐ์ ๊ธฐ์ , ํ๋ณด๊ธฐ์ , ๊ธฐํ๊ธฐ์ )์ผ๋ก ๋ถ๋ฅํ๋ ๋ช ํํ ๊ธฐ์ค์ ์ ์ํ๊ณ , ๊ฐ ์ ํ๋ณ ํ์ ๊ด๋ฆฌ ํญ๋ชฉ(๊ธฐ์ ๊ธฐ๋ณธ์ ๋ณด, ์ฌ์ ์๋ฑ๋ก๋ฒํธ, ๋ํ์, ์ค๋ฆฝ์ผ, ์ฃผ์, ์ฐ๋ฝ์ฒ, ์ธ์ฆ ํํฉ, ์ธ์ฆ๋ฒํธ, ์ธ์ฆ์ผ, ๊ธฐ์ ๋ถ์ผ, ๋ด๋น์ ์ ๋ณด, ๊ด๋ฆฌ ๋ฉ๋ชจ ๋ฑ)๊ณผ ์ ํ ๊ฐ ์ ํ(ํ๋ณดโ์ฐ๊ตฌ์๊ธฐ์ ์น๊ฒฉ, ๊ธฐํโ์ฒจ๋จ๊ธฐ์ ์ฌ๋ถ๋ฅ ๋ฑ) ์์ ๋ฐ์ดํฐ ํ๋ฆ ๋ฐ ์ด๋ ฅ ๋ณด์กด ๋ฐฉ์ ์ค๊ณ. ๊ธฐ์ ID๋ฅผ Primary Key๋ก ํ์ฌ ๋ชจ๋ ์ฐ๊ด ๋ฐ์ดํฐ(์ฌ์ ์ฐธ์ฌ ์ด๋ ฅ, ์ ๋ฌธ๊ฐ ๋งค์นญ ์ด๋ ฅ, ์์ฐ ๋ฐฐ์ ๋ด์ญ, ๋ณด๊ณ ์ ์ธ๊ธ ์ด๋ ฅ ๋ฑ)๊ฐ ์ฐธ์กฐ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋๋ ์ ๊ทํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์๋ฆฝ. - Next.js 15 App Router ๊ธฐ๋ฐ์ผ๋ก 7๊ฐ ์ฃผ์ ๋ชจ๋(๋์๋ณด๋, ๊ธฐ์ ๊ด๋ฆฌ, ์ ๋ฌธ๊ฐ๊ด๋ฆฌ, ์ฌ์ ๊ด๋ฆฌ, ๊ธฐ์ ์ฌ์ ํ, ๋ณด๊ณ ์, ์ด์๊ด๋ฆฌ)์ ๋ผ์ฐํ ํธ๋ฆฌ๋ฅผ ์ค๊ณํ๊ณ , ๊ฐ ๋ชจ๋์ด ๋ ๋ฆฝ์ ์ธ ๋ ์ด์์(์ฌ์ด๋๋ฐ ๋ฉ๋ด, ํค๋ ๊ตฌ์ฑ)์ ๊ฐ์ง๋ฉด์๋ ์์ ๋ ์ด์์(์ ์ฒด ํ๋ซํผ ๋ค๋น๊ฒ์ด์ , ์ฌ์ฉ์ ์ธ์ฆ ์ํ)์ ๊ณต์ ํ๋ ์ค์ฒฉ ๋ ์ด์์ ๊ณ์ธต ๊ตฌ์กฐ ์๋ฆฝ. URL ๊ฒฝ๋ก ์ฒด๊ณ(/company-management, /expert-management, /business-management, /commercialization, /reports, /budget, /documents, /users, /profile, /notifications ๋ฑ)์ ๋์ ๋ผ์ฐํ ํจํด([id], [orgId] ๋ฑ์ ํ์ฉํ ์์ธ ํ์ด์ง) ์ ์. ๊ฐ ๋ชจ๋๋ณ ์์ ํ์ด์ง ์์ ์ฃผ์ ๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฑ. - ๊ธฐ์ ์ ๋ณด, ์ ๋ฌธ๊ฐ ํ๋กํ, ์ฌ์ ํ๋ก์ ํธ, ์ฐ๊ตฌ์๊ธฐ์ ํ์ดํ๋ผ์ธ(7๋จ๊ณ), ๊ธฐ์ ์ด์ ํ์ดํ๋ผ์ธ(5๋จ๊ณ), ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , ์ฃผ๊ฐ๋ณด๊ณ ์, ์๊ฐ๋ณด๊ณ ์, ์์ฐํญ๋ชฉ(5๊ณ์ธต), ๋ฌธ์, ์ฌ์ฉ์, ์๋ฆผ ๋ฑ 12๊ฐ ํต์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์์ฑ(ํ๋๋ช , ํ์ , ํ์์ฌ๋ถ, ๊ธฐ๋ณธ๊ฐ)๊ณผ ๋ชจ๋ธ ๊ฐ ๊ด๊ณ(1:N, N:M)๋ฅผ ์ ์ํ๊ณ , TypeScript ์ธํฐํ์ด์ค๋ก ๋ช ์ธํ. ๋ฉ์ธ ๋์๋ณด๋(KPI ์นด๋ 6์ข , ์ฐจํธ 7์ข ), ๊ธฐ์ ๋ชฉ๋ก/์์ธ, ์นธ๋ฐ๋ณด๋(7๋จ๊ณ/5๋จ๊ณ), ๋ณด๊ณ ์ ์์ฑ ํผ, ์์ฐ ํธ์ง ํ ์ด๋ธ ๋ฑ 30์ฌ ๊ฐ ์ฃผ์ ํ๋ฉด์ UI/UX ์์ด์ดํ๋ ์ ์์ฑ ๋ฐ ํ๋ฉด ๊ฐ ์ฌ์ฉ์ ํ๋ก์ฐ(User Flow) ์ ์. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ํ์ ์์ ๊ธฐ์ ๊ด๋ฆฌ, ์ ๋ฌธ๊ฐDB, ์ฌ์ ๊ด๋ฆฌ, ๋ณด๊ณ ์, ์์ฐ์ด ๊ฐ๊ฐ ๋ด๋น์๋ณ ๊ฐ๋ณ ์์ ํ์ผ๋ก ๊ด๋ฆฌ๋์ด ๋์ผํ ๊ธฐ์ ๋ฐ์ดํฐ(๊ธฐ์ ๋ช , ๋ํ์, ์ฐ๋ฝ์ฒ ๋ฑ)๊ฐ ์ฌ๋ฌ ํ์ผ์ ์ค๋ณต ์กด์ฌํ๊ณ , ํ ๊ณณ์์ ์ ๋ณด๋ฅผ ์์ ํด๋ ๋ค๋ฅธ ํ์ผ์๋ ์๋ ๋ฐ์๋์ง ์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๋ณด์ฅ๋์ง ์๋ ๊ทผ๋ณธ์ ๋ฌธ์ ๋ฐ์. ์๋ฅผ ๋ค์ด ๊ธฐ์ ์ฐ๋ฝ์ฒ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ธฐ์ ๊ด๋ฆฌ ์์ , ์ฌ์ ๊ด๋ฆฌ ์์ , ๋ณด๊ณ ์ ์ฒจ๋ถ ์๋ฃ ๋ฑ ์ฌ๋ฌ ๊ณณ์ ์ผ์ผ์ด ์์ ํด์ผ ํ๋ฉฐ, ๋๋ฝ ์ ์๋ชป๋ ์ ๋ณด๊ฐ ์ ํต๋๋ ์ํฉ ๋ฐ๋ณต. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ์ ID๋ฅผ ์ค์ฌ์ผ๋ก ์ฌ์ ๊ด๋ฆฌ, ๋ณด๊ณ ์, ์์ฐ ๋ฐ์ดํฐ๊ฐ ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐ(Foreign Key)ํ๋ ๋จ์ผ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์ฌ, ๊ธฐ์ ์ ๋ณด๋ ํ ๊ณณ(๊ธฐ์ ๊ด๋ฆฌ ๋ชจ๋)์์๋ง ๊ด๋ฆฌ๋๊ณ ์ฐ๊ด ๋ฐ์ดํฐ๋ ์ด๋ฅผ ์ฐธ์กฐํ๋ ์ ๊ทํ๋ ๊ตฌ์กฐ ์๋ฆฝ. ๊ธฐ์ ์ ๋ณด ์์ ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ํ๋ฉด์ ์ฆ์ ๋ฐ์๋์ด ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ. ๋ํ 7๊ฐ ๋ชจ๋(๋์๋ณด๋, ๊ธฐ์ , ์ ๋ฌธ๊ฐ, ์ฌ์ , ์ฌ์ ํ, ๋ณด๊ณ ์, ์ด์)์ด ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ฉด์๋ ๋ฉ์ธ ๋์๋ณด๋์์๋ ์ ์ฒด ๋ชจ๋์ ํต์ฌ ๋ฐ์ดํฐ๋ฅผ ํตํฉ ์กฐํํด์ผ ํ๋ ์์ถฉ ์๊ตฌ์ฌํญ์ด ์กด์ฌํ์ฌ, Next.js App Router์ ์ค์ฒฉ ๋ ์ด์์(Nested Layout) ๊ธฐ๋ฅ์ ํ์ฉํด ๊ฐ ๋ชจ๋๋ณ ๋ ๋ฆฝ ๋ ์ด์์(์ ์ฉ ์ฌ์ด๋๋ฐ, ์ ์ฉ ํค๋)์ ์ ์งํ๋ฉด์ ์ต์์ ๋ ์ด์์์์ ๊ณตํต ๋ค๋น๊ฒ์ด์ (์ ์ฒด ์นดํ ๊ณ ๋ฆฌ ๋ฉ๋ด)๊ณผ ์ ์ญ ์ํ(๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ ๋ณด, ์๋ฆผ)๋ฅผ ๊ณต์ ํ๊ณ , Zustand Store๋ฅผ ๋ชจ๋๋ณ๋ก ๋ถ๋ฆฌ(innotech-store, budget-store, report-store ๋ฑ)ํ๋ ๋์๋ณด๋์์๋ ํ์ํ Store๋ง ์ ํ์ ์ผ๋ก ๊ตฌ๋ ํ๋ ์ํคํ ์ฒ ์๋ฆฝ์ผ๋ก ๋ชจ๋ ๋ ๋ฆฝ์ฑ๊ณผ ๋ฐ์ดํฐ ํตํฉ์ฑ์ ๋์ ํ๋ณด. --- ## 2์ **์์ฑ์ผ์: 25.02.21** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ์ ์ํ ๋ค๋น๊ฒ์ด์ ์์คํ ๋ฐ ๊ณตํต UI ์ปดํฌ๋ํธ ์ธํ๋ผ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ A-WORKS ํ๋ซํผ์ ๊ทผ๊ฐ์ด ๋๋ ๊ณตํต ์ธํ๋ผ ๊ตฌ์ถ ์ฐ๊ตฌ ์ํ. 7๊ฐ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ ๋๊ท๋ชจ ํ๋ซํผ์์ ์ฌ์ฉ์๊ฐ ์ด๋ ํ์ด์ง์ ์๋ ํ์ฌ ์์น์ ๋ง๋ ๋ค๋น๊ฒ์ด์ ์ ์๋์ผ๋ก ํ์ํ๋ ์ ์ํ ๋ค๋น๊ฒ์ด์ ์์คํ ๊ฐ๋ฐ. URL pathname์ ์ค์๊ฐ ๋ถ์ํ์ฌ ํ์ฌ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์๋ ๊ฐ์งํ๊ณ , ์ด์ ๋ฐ๋ผ ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํธ๋ฆฌ์ ์๋จ ๋ฉ๋ด ๋ฒํผ์ด ์ฆ์ ๋์ ์ ํ๋๋ ์๊ณ ๋ฆฌ์ฆ ์ฐ๊ตฌ. ํ๋ซํผ ์ ์ฒด 78๊ฐ ํ๋ฉด์์ ์ผ๊ด๋ UI/UX๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ shadcn/ui ๊ธฐ๋ฐ ๊ณตํต ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ 40์ฌ ์ข ๊ตฌ์ถ ๋ฐ CSS ๋ณ์ ๊ธฐ๋ฐ ๋คํฌ๋ชจ๋/๋ผ์ดํธ๋ชจ๋ ํ ๋ง ์์คํ ๊ตฌํ. ๋ฐ์คํฌํฑ, ํ๋ธ๋ฆฟ, ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๋ชจ๋ ์ต์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ์ํ ๋ ์ด์์ ์์คํ ๊ฐ๋ฐ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๋ฉ์ธ ๋ ์ด์์ ํ๋ฉด ๊ฐ๋ฐ. ์ข์ธก ๊ณ ์ ์ฌ์ด๋๋ฐ(๊ธฐ๋ณธ ๋๋น 280px, ์ถ์ ์ 60px ์์ด์ฝ๋ง ํ์), ์๋จ ํค๋(๋์ด 64px, ํ์ฌ ์์น๋ฅผ ๋ํ๋ด๋ ๋นต๊ฐ๋ฃจ ๋ค๋น๊ฒ์ด์ ํฌํจ), ์๋จ ๋ฉ๋ด(ํ์ฌ ์นดํ ๊ณ ๋ฆฌ์ ์ฃผ์ ๋ฉ๋ด๋ฅผ ๋ฒํผ ํํ๋ก ๋ฐฐ์น), ๋ฉ์ธ ์ฝํ ์ธ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ 4์์ญ ๋ฐ์ํ ๋ ์ด์์ ๊ตฌํ. URL pathname์ ์ฒซ ๋ฒ์งธ ์ธ๊ทธ๋จผํธ(์: /company-management โ company, /reports โ report)๋ฅผ ํ์ฑํ์ฌ 6๊ฐ ์นดํ ๊ณ ๋ฆฌ(home, business, technology, commercialization, report, management)๋ฅผ ์๋ ํ๋ณํ๊ณ , ํ๋ณ๋ ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ผ ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํธ๋ฆฌ ์ ์ฒด, ์๋จ ๋ฉ๋ด ๋ฒํผ ๊ตฌ์ฑ, ๋นต๊ฐ๋ฃจ ๊ฒฝ๋ก ํ ์คํธ๊ฐ ์ฆ์ ์ ํ๋๋ ์ ์ํ ๋ค๋น๊ฒ์ด์ ์์คํ ๊ฐ๋ฐ. usePathname() ํ ์ผ๋ก pathname ๋ณ๊ฒฝ์ ์ค์๊ฐ ๊ฐ์งํ์ฌ ์นดํ ๊ณ ๋ฆฌ ๋งคํ ํจ์๋ฅผ ์คํํ๊ณ , ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ๋ฉ๋ด ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋์ ์ผ๋ก ๋ ๋๋งํ๋ ๊ตฌ์กฐ ๊ตฌํ. - ์๋จ ๋ฉ๋ด(TopMenu) UI ๊ฐ๋ฐ. ํ๋ฉด ๋๋น๋ฅผ ์ค์๊ฐ ๊ฐ์งํ์ฌ ๋ฐ์คํฌํฑ ํ๊ฒฝ(768px ์ด์)์์๋ ํ์ฌ ์นดํ ๊ณ ๋ฆฌ์ ์ฃผ์ ๋ฉ๋ด ํญ๋ชฉ์ ๋ฒํผ ํํ๋ก ๊ฐ๋ก ๋ฐฐ์นํ๊ณ , ๋ชจ๋ฐ์ผ/ํ๋ธ๋ฆฟ ํ๊ฒฝ(768px ๋ฏธ๋ง)์์๋ ํ๋ฒ๊ฑฐ ๋ฉ๋ด ์์ด์ฝ์ ํ์ํ์ฌ ํด๋ฆญ ์ ํ๋ฉด ์ฐ์ธก์์ ์ฌ๋ผ์ด๋๋๋ Sheet ๊ธฐ๋ฐ ์ ์ฒด ๋ฉ๋ด ๋๋ก์ด๋ก ์๋ ์ ํ๋๋ ๋ฐ์ํ ๊ตฌ์กฐ ๊ตฌํ. ์๋จ ์ฐ์ธก ์์ญ์ ์๋ฆผ ๋ฒจ ์์ด์ฝ(๋ฏธ์ฝ์ ์๋ฆผ ์๋ฅผ ๋นจ๊ฐ์ ๋ฑ์ง๋ก ํ์, ํด๋ฆญ ์ ์ต๊ทผ ์๋ฆผ 5๊ฑด ๋๋กญ๋ค์ด), ์ฌ์ฉ์ ํ๋กํ ์๋ฐํ(ํด๋ฆญ ์ ๋๋กญ๋ค์ด ๋ฉ๋ด: ๋ด ํ๋กํ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ์ค์ , ๋ก๊ทธ์์ ํญ๋ชฉ) ๋ฐฐ์น. ํ์ฌ ์ ํ๋ ๋ฉ๋ด ํญ๋ชฉ์ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ํ๋จ ์ธ๋์ผ์ดํฐ ๋ฐ๋ก ํ์ฑํ ์ํ ์๊ฐ์ ํ์. - ๋์ ์ฌ์ด๋๋ฐ(Sidebar) UI ๊ฐ๋ฐ. 6๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์์ ํ ๋ค๋ฅธ ๋ฉ๋ด ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ ๋๋งํ๋ฉฐ, ๊ฐ ๋ฉ๋ด ํธ๋ฆฌ๋ ์ต๋ 3๋จ๊ณ ๊น์ด(๋๋ถ๋ฅ ํด๋ > ์ค๋ถ๋ฅ ํด๋ > ์๋ถ๋ฅ ํ์ด์ง)์ ์ ํ/ํผ์นจ(Collapsible) ์์ฝ๋์ธ ๊ตฌ์กฐ ์ง์. ํด๋ ํญ๋ชฉ ํด๋ฆญ ์ ํ์ ๋ฉ๋ด๊ฐ ์ ๋๋ฉ์ด์ ๊ณผ ํจ๊ป ํผ์ณ์ง๊ฑฐ๋ ์ ํ๋ ์ธํฐ๋์ ๊ตฌํ. ํ์ฌ URL pathname๊ณผ ์ ํํ ์ผ์นํ๋ ๋ฉ๋ด ํญ๋ชฉ์ ํ์ฑํ ์คํ์ผ(๋ฐฐ๊ฒฝ์, ์ข์ธก ์ธ๋์ผ์ดํฐ ๋ฐ) ์๋ ์ ์ฉ ๋ฐ ํด๋น ๋ฉ๋ด ํญ๋ชฉ์ด ์ํ ๋ชจ๋ ์์ ํด๋๋ฅผ ์๋์ผ๋ก ํผ์นจ ์ฒ๋ฆฌํ์ฌ ํ์ฌ ์์น๋ฅผ ๋ช ํํ ํ์. ์ฌ์ด๋๋ฐ ํ๋จ์ ์ถ์/ํ์ฅ ํ ๊ธ ๋ฒํผ ๋ฐฐ์น, ์ถ์ ๋ชจ๋์์๋ ์์ด์ฝ๋ง ํ์๋๊ณ ๋ง์ฐ์ค ํธ๋ฒ ์ ํดํ์ผ๋ก ๋ฉ๋ด๋ช ํ์. ์ถ์/ํ์ฅ ์ ํ ์ CSS transition์ ํ์ฉํ ๋ถ๋๋ฌ์ด ๋๋น ๋ณ๊ฒฝ ์ ๋๋ฉ์ด์ ์ ์ฉ. - CSS Custom Properties(๋ณ์) ๊ธฐ๋ฐ ๋์์ธ ํ ํฐ ์ฒด๊ณ ์๋ฆฝ ๋ฐ ํ ๋ง ์์คํ ๊ฐ๋ฐ. --background, --foreground, --card, --card-foreground, --primary, --primary-foreground, --secondary, --muted, --accent, --destructive, --border, --input, --ring ๋ฑ ์๋งจํฑ ์ปฌ๋ฌ ํ ํฐ๊ณผ --radius(๋ชจ์๋ฆฌ ๋ฅ๊ธ๊ธฐ), --font-sans, --font-mono ๋ฑ ๊ธฐํ ๋์์ธ ํ ํฐ ์ ์. :root ์ ํ์์ ๋ผ์ดํธ๋ชจ๋ ํ ํฐ ๊ฐ์, .dark ํด๋์ค์ ๋คํฌ๋ชจ๋ ํ ํฐ ๊ฐ์ ์ ์ํ์ฌ ํ ๋ง ์ ํ ์ ํ ํฐ ๊ฐ๋ง ๊ต์ฒด๋๋ฉด ์ ์ฒด UI ์์์ด ์ผ๊ด ๋ณ๊ฒฝ๋๋ ๊ตฌ์กฐ ๊ตฌํ. next-themes ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ThemeProvider ๊ตฌ์ฑ์ผ๋ก ์์คํ ์ค์ ์๋ ๊ฐ์ง(OS ๋คํฌ๋ชจ๋ ์ค์ ์ฐ๋) ๋ฐ ์ฌ์ฉ์ ์๋ ์ ํ(๋ผ์ดํธ/๋คํฌ/์์คํ 3๊ฐ์ง ์ต์ ) ์ง์. - shadcn/ui ๊ธฐ๋ฐ ๊ณตํต UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ 40์ฌ ์ข ๊ตฌ์ถ. Button(6๊ฐ์ง variant: default/destructive/outline/secondary/ghost/link, 4๊ฐ์ง size: default/sm/lg/icon), Card(CardHeader/CardTitle/CardDescription/CardContent/CardFooter ์กฐํฉ์ผ๋ก ๋ค์ํ ๋ ์ด์์ ๊ตฌ์ฑ), Dialog/AlertDialog(๋ชจ๋ฌ ์ฐฝ), Sheet(์ฌ์ด๋ ํจ๋/๋๋ก์ด), Table(Header/Body/Row/Head/Cell/Caption ์กฐํฉ์ ๋ฐ์ดํฐ ํ ์ด๋ธ), Tabs(List/Trigger/Content ์กฐํฉ์ ํญ ์ธํฐํ์ด์ค), Select/Checkbox/RadioGroup/Switch(ํผ ์ ๋ ฅ ์์), Input/Textarea(ํ ์คํธ ์ ๋ ฅ), Badge/Avatar/Skeleton(ํ์ ์์), Tooltip/Popover/DropdownMenu/ContextMenu(์ค๋ฒ๋ ์ด ์์), Accordion/Collapsible(์ ํ/ํผ์นจ), Progress/Slider(์งํ๋ฅ /๋ฒ์ ์ ํ), Calendar/DatePicker(๋ ์ง ์ ํ) ๋ฑ. ๋ชจ๋ ์ปดํฌ๋ํธ์ ARIA ์์ฑ(aria-label, aria-describedby, role ๋ฑ) ์ ์ฉ์ผ๋ก ์คํฌ๋ฆฐ ๋ฆฌ๋ ํธํ์ฑ ๋ฐ ์น ์ ๊ทผ์ฑ ํ๋ณด, Tailwind CSS ์ ํธ๋ฆฌํฐ ํด๋์ค ๊ธฐ๋ฐ ์คํ์ผ๋ง์ผ๋ก ํ๋ก์ ํธ ์๊ตฌ์ฌํญ์ ๋ง๋ ์ปค์คํฐ๋ง์ด์ง ์ฉ์ด์ฑ ํ๋ณด. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ฌ์ฉ์๊ฐ "์ฌ์ ๊ด๋ฆฌ" ์นดํ ๊ณ ๋ฆฌ ํ์ด์ง์์ "๋ณด๊ณ ์" ์นดํ ๊ณ ๋ฆฌ ํ์ด์ง๋ก ์ด๋ํ ๋, ๋ธ๋ผ์ฐ์ URL์ /business-management/...์์ /reports/...๋ก ์ฆ์ ๋ณ๊ฒฝ๋์ง๋ง ์ฌ์ด๋๋ฐ์ ์๋จ ๋ฉ๋ด UI๊ฐ ์ด์ ์นดํ ๊ณ ๋ฆฌ(์ฌ์ ๊ด๋ฆฌ) ์ํ๋ฅผ ์๋ฐฑ ๋ฐ๋ฆฌ์ด๊ฐ ์ ์งํ๋ค๊ฐ ๋ค๋ฆ๊ฒ ์ ํ๋๋ฉด์ ๋ฉ๋ด๊ฐ ๊น๋นก์ด๊ฑฐ๋ ์๋ชป๋ ์นดํ ๊ณ ๋ฆฌ ๋ฉ๋ด๊ฐ ์ ๊น ํ์๋๋ UX ๋ฌธ์ ๋ฐ์. ์ด๋ URL ๋ณ๊ฒฝ ์ด๋ฒคํธ์ React ์ํ ์ ๋ฐ์ดํธ ์ฌ์ด์ ํ์ด๋ฐ ๋ถ์ผ์น๊ฐ ์์ธ์ผ๋ก ๋ถ์. URL pathname์ ์ ์ผํ ์ง์ค ์์ฒ(Single Source of Truth)์ผ๋ก ์ผ์, ์นดํ ๊ณ ๋ฆฌ ์ํ๋ฅผ ๋ณ๋์ useState๋ก ๊ด๋ฆฌํ์ง ์๊ณ ๋งค ๋ ๋๋ง ์ฌ์ดํด๋ง๋ค pathname์์ ์ง์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ณ์ฐ(ํ์)ํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ. getCategoryFromPathname(pathname) ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์์ฑํ์ฌ pathname์ ์ฒซ ๋ฒ์งธ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ฆ์ ๋ฐํํ๊ณ , ์ฌ์ด๋๋ฐ์ ์๋จ ๋ฉ๋ด ์ปดํฌ๋ํธ์์ ์ด ํจ์์ ๋ฐํ๊ฐ์ ์ง์ ์ฌ์ฉํ์ฌ ๋ ๋๋งํจ์ผ๋ก์จ URL๊ณผ UI๊ฐ ํญ์ ๋๊ธฐํ๋๋๋ก ๋ณด์ฅ. ๋ํ ์ฌ์ด๋๋ฐ๊ฐ 6๊ฐ ์นดํ ๊ณ ๋ฆฌ x ๊ฐ ์นดํ ๊ณ ๋ฆฌ๋น ํ๊ท 15๊ฐ ๋ฉ๋ด ํญ๋ชฉ x ์ต๋ 3๋จ๊ณ ๊น์ด = ์๋ฐฑ ๊ฐ์ ๋ฉ๋ด ๋ ธ๋๋ฅผ ์ ์ฌ์ ์ผ๋ก ๊ฐ์ง๋ฉด์, ์นดํ ๊ณ ๋ฆฌ ์ ํ ์ ์ ์ฒด ๋ฉ๋ด ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ๋ ๋๋งํ๋ฉด ๋ถํ์ํ DOM ๋ ธ๋ ์์ฑ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ธ๋กํน๋์ด UI๊ฐ 0.5์ด ์ด์ ๋ฒ๋ฒ ์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฐ์. ํ์ฌ ํ์ฑํ๋ ์นดํ ๊ณ ๋ฆฌ์ ํด๋นํ๋ ๋ฉ๋ด ๋ฐ์ดํฐ ๋ฐฐ์ด๋ง ์ ํ์ ์ผ๋ก ๋ ๋๋งํ๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ํจํด์ ์ ์ฉํ๊ณ , ๊ฐ ํด๋ ๋ฉ๋ด ํญ๋ชฉ์ ์ ํ/ํผ์นจ ์ํ๋ฅผ ๊ฐ๋ณ useState๋ก ๊ด๋ฆฌํ์ฌ ํน์ ํด๋์ ์ํ ๋ณ๊ฒฝ ์ ํด๋น ํด๋์ ์๋ธํธ๋ฆฌ๋ง ๋ฆฌ๋ ๋๋ง๋๋๋ก ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ๋ฐ ๋ฉ๋ชจ์ด์ ์ด์ (React.memo) ์ ์ฉ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ. --- ## 3์ **์์ฑ์ผ์: 25.03.20** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๊ธฐ์ 5๊ฐ ์ ํ ๋ถ๋ฅ ๊ด๋ฆฌ ์์คํ ๋ฐ ํต๊ณ ๋์๋ณด๋ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์์ผํฐ์์ ๊ด๋ฆฌํ๋ ์ ์ฃผ๊ธฐ์ ์ ์ฐ๊ตฌ์๊ธฐ์ , ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , ์ ๋ต๊ธฐ์ ๊ธฐ์ , ํ๋ณด๊ธฐ์ , ๊ธฐํ๊ธฐ์ ์ 5๊ฐ ์ ํ์ผ๋ก ๋ถ๋ฅํ์ฌ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ธฐ์ ๊ด๋ฆฌ ๋ชจ๋ ๊ฐ๋ฐ. ๊ฐ ์ ํ๋ณ ๊ธฐ์ ๋ชฉ๋ก์ ๋ฑ๋ก, ์กฐํ, ์์ , ์ญ์ (CRUD) ์ ์ฒด ๊ธฐ๋ฅ๊ณผ ์ฌ์ ์๋ฑ๋ก๋ฒํธ/๊ธฐ์ ๋ช ๊ฒ์, ์ํ/์ง์ญ ํํฐ๋ง, ๋ฑ๋ก์ผ/๊ธฐ์ ๋ช ์ ๋ ฌ, ํ์ด์ง๋ค์ด์ ๋ฑ ๋ชฉ๋ก ๊ด๋ฆฌ๋ฅผ ์ํ ๊ณตํต ์ธํฐํ์ด์ค ๊ตฌํ. 5๊ฐ ๋ถ๋ฅ๋ณ ๊ธฐ์ ํํฉ, ์ฐ๋๋ณ ์ฆ๊ฐ ์ถ์ด, ์๋ณ ๋ฑ๋ก ํํฉ ๋ฑ์ ๋ค์ํ ์ฐจํธ๋ก ์๊ฐํํ๋ ๊ธฐ์ ํต๊ณ ๋์๋ณด๋ ๊ฐ๋ฐ. ๋ฐ์ดํฐ ๋ก๋ฉ ์ค ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ ์ํ Skeleton ๋ก๋ฉ UI ๊ฐ๋ฐ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๊ธฐ์ ๊ด๋ฆฌ ๋ฉ์ธ ํ๋ฉด(/company-management) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ ์์ญ์ ์ ์ฒด ๊ธฐ์ ํํฉ์ ํ๋์ ํ์ ํ ์ ์๋ 5๊ฐ์ ์์ฝ ์นด๋(์ฐ๊ตฌ์๊ธฐ์ N๊ฐ, ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ N๊ฐ, ์ ๋ต๊ธฐ์ ๊ธฐ์ N๊ฐ, ํ๋ณด๊ธฐ์ N๊ฐ, ๊ธฐํ๊ธฐ์ N๊ฐ) ๊ฐ๋ก ๋ฐฐ์นํ์ฌ ํ์ํ๊ณ , ๊ฐ ์นด๋์๋ ํด๋น ๋ถ๋ฅ์ ์์ด์ฝ, ๋ถ๋ฅ๋ช , ํ์ฌ ๊ธฐ์ ์๋ฅผ ํฌ๊ฒ ํ์ํ๋ฉฐ, ์ ์ ๋๋น ์ฆ๊ฐ ์์น๋ฅผ ํ์ดํ ์์ด์ฝ๊ณผ ํจ๊ป ์ฐ์ธก ํ๋จ์ ํ์(์ฆ๊ฐ: ๋ น์ โฒ +N, ๊ฐ์: ๋นจ๊ฐ์ โผ -N, ๋ณ๋์์: ํ์ -). ๊ฐ ์นด๋ ํด๋ฆญ ์ ํด๋น ๋ถ๋ฅ์ ๊ธฐ์ ๋ชฉ๋ก ํ์ด์ง๋ก ์ฆ์ ์ด๋ํ๋ ๋ค๋น๊ฒ์ด์ ๊ธฐ๋ฅ ๊ตฌํ. ํ๋ฉด ํ๋จ ์์ญ์ 5๊ฐ ๋ถ๋ฅ๋ณ ๋ฐ๋ก๊ฐ๊ธฐ ๋ฒํผ์ ํฐ ์นด๋ ํํ๋ก ๋ฐฐ์นํ์ฌ, ๊ฐ ์นด๋์ ๋ถ๋ฅ ์์ด์ฝ, ๋ถ๋ฅ๋ช , ๊ฐ๋จํ ์ค๋ช ํ ์คํธ๋ฅผ ํฌํจํ์ฌ ์ง๊ด์ ์ธ ๋ค๋น๊ฒ์ด์ UX ์ ๊ณต. - ๊ธฐ์ ๋ถ๋ฅ๋ณ ๊ด๋ฆฌ ํ๋ฉด 5์ข (/company-management/research ์ฐ๊ตฌ์๊ธฐ์ , /company-management/advanced-tech ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , /company-management/strategic-tech ์ ๋ต๊ธฐ์ ๊ธฐ์ , /company-management/candidate ํ๋ณด๊ธฐ์ , /company-management/others ๊ธฐํ๊ธฐ์ ) ๊ฐ๋ฐ. 5๊ฐ ํ๋ฉด ๋ชจ๋ ๋์ผํ ๋ ์ด์์ ๊ตฌ์กฐ๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ถ๋ฅ ๊ฐ ์ด๋ ์์๋ ์ผ๊ด๋ ๊ฒฝํ ์ ๊ณต: ํ๋ฉด ์๋จ์ ๊ฒ์๋ฐ(placeholder "์ฌ์ ์๋ฑ๋ก๋ฒํธ ๋๋ ๊ธฐ์ ๋ช ์ผ๋ก ๊ฒ์", ์ ๋ ฅ ์ฆ์ ์ค์๊ฐ ํํฐ๋ง ์ ์ฉ), ํํฐ ๋๋กญ๋ค์ด 2์ข (์ํ ํํฐ: ํ์ฑ/๋นํ์ฑ/์ ์ฒด, ์ง์ญ ํํฐ: ์/๋ ์ ํ), ์ ๋ ฌ ๋๋กญ๋ค์ด(๋ฑ๋ก์ผ ์ต์ ์/์ค๋๋์, ๊ธฐ์ ๋ช ๊ฐ๋๋ค์/์ญ์, ์ต๊ทผ ์์ ์). ํ๋ฉด ์ค์์ ๊ธฐ์ ๋ชฉ๋ก ๋ฐ์ดํฐ ํ ์ด๋ธ ๋ฐฐ์น(์ปฌ๋ผ ๊ตฌ์ฑ: ๊ธฐ์ ๋ช , ์ฌ์ ์๋ฑ๋ก๋ฒํธ, ๋ํ์๋ช , ์ค๋ฆฝ์ผ, ์ฃผ์ ๊ธฐ์ ๋ถ์ผ, ์ํ ๋ฑ์ง, ๋ฑ๋ก์ผ, ์ก์ ๋ฒํผ). ํ ์ด๋ธ ๊ฐ ํ์ ์ฐ์ธก์ ์ก์ ๋ฒํผ ๊ทธ๋ฃน(์์ธ๋ณด๊ธฐ ๋ฒํผโ๊ธฐ์ ์์ธ ํ์ด์ง ์ด๋, ์์ ๋ฒํผโํธ์ง ๋ชจ๋ฌ ์คํ, ์ญ์ ๋ฒํผโ์ญ์ ํ์ธ ๋ค์ด์ผ๋ก๊ทธ) ๋ฐฐ์น. ํ๋ฉด ํ๋จ์ ํ์ด์ง๋ค์ด์ ์ปดํฌ๋ํธ(ํ์ด์ง๋น ํ์ ๊ฑด์ ์ ํ: 10/20/50๊ฑด, ์ด์ /๋ค์ ํ์ด์ง ๋ฒํผ, ํ์ด์ง ๋ฒํธ ์ง์ ํด๋ฆญ) ๋ฐฐ์น. ๋ถ๋ฅ๋ณ๋ก ํ ์ด๋ธ ์ปฌ๋ผ ๊ตฌ์ฑ์ ์ผ๋ถ ์ฐจ๋ณํํ์ฌ ํด๋น ๋ถ๋ฅ ํน์ฑ ๋ฐ์(์: ์ฐ๊ตฌ์๊ธฐ์ ํ๋ฉด์๋ '์ฐ๊ตฌ์ ๋ฑ๋ก๋ฒํธ' ์ปฌ๋ผ ์ถ๊ฐ, ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ํ๋ฉด์๋ '์ฒจ๋จ๊ธฐ์ ์ธ์ฆ๋ฒํธ' ๋ฐ '์ธ์ฆ์ผ' ์ปฌ๋ผ ์ถ๊ฐ, ์ ๋ต๊ธฐ์ ๊ธฐ์ ํ๋ฉด์๋ '์ ๋ต๊ธฐ์ ๋ถ์ผ' ์ปฌ๋ผ ์ถ๊ฐ). - ๊ธฐ์ ํต๊ณ ํ๋ฉด(/company-management/statistics) ๊ฐ๋ฐ. ํ๋ฉด ์ข์ธก ์๋จ์ ๋ถ๋ฅ๋ณ ํํฉ ์ํ ์ฐจํธ(Pie Chart) ๋ฐฐ์น: 5๊ฐ ๋ถ๋ฅ(์ฐ๊ตฌ์/์ฒจ๋จ/์ ๋ต/ํ๋ณด/๊ธฐํ)์ ๊ธฐ์ ์ ๋น์จ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์์์ ํ์ด ์กฐ๊ฐ์ผ๋ก ํ์, ์ฐจํธ ์ค์ ๋๋ ํ์ ์ ์ฒด ๊ธฐ์ ์ ์ซ์ ํ์, ์ฐจํธ ์ฐ์ธก์ ๋ฒ๋ก(๊ฐ ๋ถ๋ฅ๋ช , ์์, ๊ธฐ์ ์, ๋น์จ%) ํ์. ํ๋ฉด ์ฐ์ธก ์๋จ์ ์ฐ๋๋ณ ์ฆ๊ฐ ์ถ์ด ๋ง๋ ์ฐจํธ(Bar Chart) ๋ฐฐ์น: X์ถ์ ์ต๊ทผ 5๊ฐ๋ ์ฐ๋(2021~2025), Y์ถ์ ๊ธฐ์ ์, ๊ฐ ์ฐ๋๋ณ๋ก 5๊ฐ ๋ถ๋ฅ๋ฅผ ์์์ผ๋ก ๊ตฌ๋ถํ ๋์ ๋ง๋(Stacked Bar)๋ก ํ์ํ์ฌ ์ฐ๋๋ณ ์ ์ฒด ๊ธฐ์ ์ ์ฆ๊ฐ ์ถ์ด์ ๋ถ๋ฅ๋ณ ๊ตฌ์ฑ๋น ๋ณํ๋ฅผ ๋์์ ํ์ ๊ฐ๋ฅ. ํ๋ฉด ํ๋จ ์ ์ฒด ๋๋น์ ์๋ณ ๋ฑ๋ก ํํฉ ์์ญ ์ฐจํธ(Area Chart) ๋ฐฐ์น: X์ถ์ ๋นํด ์ฐ๋ 1์~12์, Y์ถ์ ์ ๊ท ๋ฑ๋ก ๊ธฐ์ ์, 5๊ฐ ๋ถ๋ฅ๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ์์์ ๋ฐํฌ๋ช ์์ญ์ผ๋ก ๋์ ํ์ํ์ฌ ์๋ณ ์ ๊ท ๋ฑ๋ก ์ถ์ด ๋ฐ ๋ถ๋ฅ๋ณ ๊ธฐ์ฌ๋ ์๊ฐํ. ๋ชจ๋ ์ฐจํธ์ ๋ง์ฐ์ค ํธ๋ฒ ์ ํด๋น ๋ฐ์ดํฐ ํฌ์ธํธ์ ์์ธ ์์น๋ฅผ ํดํ์ผ๋ก ํ์ํ๋ ์ธํฐ๋์ ๊ตฌํ. - ๊ฐ ๋ถ๋ฅ๋ณ Skeleton ๋ก๋ฉ UI 5์ข ๊ฐ๋ฐ. ํ์ด์ง ์ต์ด ์ง์ ์ ๋๋ ํํฐ/์ ๋ ฌ ์กฐ๊ฑด ๋ณ๊ฒฝ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ถ๋ฌ์ค๋ ๋์, ์ค์ ๋ฐ์ดํฐ ํ ์ด๋ธ๊ณผ ๋์ผํ ๋ ์ด์์ ๊ตฌ์กฐ์ ํ์ ํ๋ ์ด์คํ๋(Skeleton)๋ฅผ ๋จผ์ ํ์ํ์ฌ ์ฝํ ์ธ ์์ญ์ Layout Shift(๋ ์ด์์ ๋ฐ๋ฆผ ํ์) ๋ฐฉ์ง ๋ฐ ์ฌ์ฉ์ ์ฒด๊ฐ ๋ก๋ฉ ์๋ ๋ํญ ๊ฐ์ . Skeleton ์ปดํฌ๋ํธ๋ Tailwind CSS์ animate-pulse ํด๋์ค๋ฅผ ์ ์ฉํ์ฌ ๋ถ๋๋ฝ๊ฒ ๊น๋นก์ด๋ ์ ๋๋ฉ์ด์ ์ผ๋ก ๋ก๋ฉ ์ค์์ ์๊ฐ์ ์ผ๋ก ๋ช ํํ ์ ๋ฌ. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ 5๊ฐ ๋ถ๋ฅ(์ฐ๊ตฌ์๊ธฐ์ , ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ , ์ ๋ต๊ธฐ์ ๊ธฐ์ , ํ๋ณด๊ธฐ์ , ๊ธฐํ๊ธฐ์ ) ๊ด๋ฆฌ ํ๋ฉด์ด ๊ฐ๊ฐ ๊ฒ์ ๋ก์ง, ํํฐ๋ง ๋ก์ง, ์ ๋ ฌ ๋ก์ง, ํ์ด์ง๋ค์ด์ ๋ก์ง, ํ ์ด๋ธ ๋ ๋๋ง ๋ก์ง์ ํฌํจํ๋๋ฐ, ์ด๋ฅผ 5๊ฐ ํ์ผ(/research/page.tsx, /advanced-tech/page.tsx ๋ฑ)์ ๊ฐ๋ณ์ ์ผ๋ก ๊ตฌํํ๋ฉด ๊ฑฐ์ ๋์ผํ ์ฝ๋๊ฐ 5๋ฒ ๋ฐ๋ณต๋์ด, ๊ฒ์ ๊ธฐ๋ฅ ๋ฒ๊ทธ ์์ ์ 5๊ณณ์ ๋ชจ๋ ์ฐพ์ ์์ ํด์ผ ํ๊ณ , ์๋ก์ด ํํฐ ์ต์ ์ถ๊ฐ ์ 5๊ฐ ํ์ผ ๋ชจ๋์ ๋์ผํ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ์ ์ง๋ณด์ ๋นํจ์จ ๋ฌธ์ ๋ฐ์. ๊ฒ์/ํํฐ/์ ๋ ฌ/ํ์ด์ง๋ค์ด์ ์ํ ๊ด๋ฆฌ ๋ฐ ๋ก์ง์ useCompanyList(classification: string)์ ๊ฐ์ ์ปค์คํ ํ ์ผ๋ก ์ถ์ถํ๊ณ , ํ ์ด๋ธ ๋ ๋๋ง์ CompanyTable์ด๋ผ๋ ๊ณตํต ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ฌ, ๊ฐ ๋ถ๋ฅ๋ณ ํ์ด์ง ์ปดํฌ๋ํธ์์๋ ํด๋น ๋ถ๋ฅ ์ฝ๋("research", "advanced-tech" ๋ฑ)์ ๋ถ๋ฅ๋ณ๋ก ๋ค๋ฅธ ํ ์ด๋ธ ์ปฌ๋ผ ์ค์ ๋ง props๋ก ์ ๋ฌํ๋ ์ค์ ๊ธฐ๋ฐ(Configuration-driven) ์ํคํ ์ฒ ํจํด ์ ์ฉ. ์ด๋ฅผ ํตํด ๊ณตํต ๋น์ฆ๋์ค ๋ก์ง์ ์ปค์คํ ํ ๊ณผ ๊ณตํต ์ปดํฌ๋ํธ ํ ๊ณณ์์๋ง ๊ด๋ฆฌํ๊ณ , ๋ถ๋ฅ๋ณ ์ฐจ์ด์ (์ถ๊ฐ ์ปฌ๋ผ, ๋ถ๋ฅ ์ฝ๋)๋ง ๊ฐ๋ณ ์ ์ํ์ฌ ์ ์ฒด ์ฝ๋ ์ค๋ณต๋ฅ ์ 90% ์ด์ ์ ๊ฑฐํ๊ณ ์ ์ง๋ณด์์ฑ ๋ํญ ํฅ์. ๋ํ ํ๋ณด๊ธฐ์ ์ด ์ฐ๊ตฌ์๊ธฐ์ ์ค๋ฆฝ ์๊ฑด์ ์ถฉ์กฑํ์ฌ ์ฐ๊ตฌ์๊ธฐ์ ์ผ๋ก ์น๊ฒฉ๋๊ฑฐ๋, ๊ธฐํ๊ธฐ์ ์ด ์ฒจ๋จ๊ธฐ์ ์ธ์ฆ์ ์ทจ๋ํ์ฌ ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ์ผ๋ก ์ฌ๋ถ๋ฅ๋ ๋, ๊ธฐ์กด ๋ถ๋ฅ์์์ ๊ด๋ฆฌ ์ด๋ ฅ(์ต์ด ๋ฑ๋ก์ผ, ์ด์ ๋ด๋น์, ๊ด๋ฆฌ ๋ฉ๋ชจ ๋ฑ)์ด ์์ ํ ์ฌ๋ผ์ ธ ํด๋น ๊ธฐ์ ์ด ์ธ์ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ ํ์ฌ ๋ถ๋ฅ์ ์ด๋ฅด๋ ๋์ง ์ถ์ ์ด ๋ถ๊ฐ๋ฅํ ๋ฌธ์ ๋ฐ์. ๊ธฐ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ classificationHistory ๋ฐฐ์ด ํ๋๋ฅผ ์ถ๊ฐํ๊ณ , ๋ถ๋ฅ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง๋ค {previousClassification: "candidate", newClassification: "research", changedAt: "2025-03-15T10:30:00Z", changedBy: "ํ๊ธธ๋", reason: "์ฐ๊ตฌ์๊ธฐ์ ์ค๋ฆฝ ์๊ฑด ์ถฉ์กฑ"} ํํ์ ์ด๋ ฅ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด์ pushํ์ฌ ๊ธฐ๋ก. ๊ธฐ์ ์์ธ ํ๋ฉด์ "๋ถ๋ฅ ๋ณ๊ฒฝ ์ด๋ ฅ" ํญ์ ์ถ๊ฐํ์ฌ ํด๋น ๊ธฐ์ ์ ๋ถ๋ฅ ๋ณ๊ฒฝ ํ์คํ ๋ฆฌ๋ฅผ ์๊ณ์ด ํ์๋ผ์ธ ํํ๋ก ์กฐํ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ. --- ## 4์ **์์ฑ์ผ์: 25.04.18** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช KPI ๊ธฐ๋ฐ ์ข ํฉ ๋์๋ณด๋ ๋ฐ Recharts ๋ณตํฉ ๋ฐ์ดํฐ ์๊ฐํ ์์คํ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ A-WORKS ํ๋ซํผ์ ์ง์ ์ ์ด์ ํต์ฌ ํ๋ฉด์ธ ๋ฉ์ธ ๋์๋ณด๋ ๊ฐ๋ฐ. ๊ธฐ์ ์ง์์ผํฐ์ ํต์ฌ ์ฑ๊ณผ์งํ(KPI) 6์ข (์ฐ๊ตฌ์๊ธฐ์ ๋ฌ์ฑํํฉ, ๊ธฐ์ ์ด์ ๋ฌ์ฑํํฉ, ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ๋ฌ์ฑํํฉ, ์์ฐ ์งํ๋ฅ , ์งํ์ค์ธ ์ฌ์ ์, ๋ฏธ์ ์ถ ๋ณด๊ณ ์ ์)์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์๋ ์๊ฐ์ ์งํ ์นด๋ ๊ฐ๋ฐ. ์๋ณ ์ค์ ์ถ์ด, ๋ชฉํ ๋ฌ์ฑ๋ฅ , ์์ฐ ํํฉ, ์ฌ์ ์ํ ๋ถํฌ ๋ฑ ๋ค์ํ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ์ ์๋ Recharts ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ๋ณตํฉ ์ฐจํธ 7์ข (AreaChart, RadialBarChart, BarChart, PieChart 2์ข , ComposedChart, LineChart) ๊ฐ๋ฐ. ์๋ก ๋ค๋ฅธ ๋ชจ๋(๊ธฐ์ ๊ด๋ฆฌ, ์ฌ์ ๊ด๋ฆฌ, ์์ฐ๊ด๋ฆฌ, ๋ณด๊ณ ์๊ด๋ฆฌ)์ ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋์๋ณด๋ ํ๋ฉด์์ ํตํฉ ์กฐํํ๋ ํฌ๋ก์ค ๋ชจ๋ ๋ฐ์ดํฐ ์ง๊ณ ์ฒด๊ณ ์ฐ๊ตฌ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๋ฉ์ธ ๋์๋ณด๋ ํ๋ฉด(/ ๋ฃจํธ ๊ฒฝ๋ก) ๊ฐ๋ฐ. ํ๋ฉด ์ต์๋จ ์์ญ์ KPI ์งํ ์นด๋ 6์ข ์ 2ํ 3์ด ๋ฐ์ํ ๊ทธ๋ฆฌ๋(๋ฐ์คํฌํฑ 3์ด, ํ๋ธ๋ฆฟ 2์ด, ๋ชจ๋ฐ์ผ 1์ด)๋ก ๋ฐฐ์น: (1) ์ฐ๊ตฌ์๊ธฐ์ ์นด๋ - ํ์ฌ ๋ฌ์ฑ N๊ฐ / ์ฐ๊ฐ ๋ชฉํ N๊ฐ, ๋ฌ์ฑ๋ฅ N% ํ๋ก๊ทธ๋ ์ค๋ฐ, ์ ์ ๋๋น ์ฆ๊ฐ +N๊ฐ ํ์; (2) ๊ธฐ์ ์ด์ ์นด๋ - ํ์ฌ ๋ฌ์ฑ N๊ฑด / ์ฐ๊ฐ ๋ชฉํ N๊ฑด, ๋ฌ์ฑ๋ฅ N%, ์ ์ ๋๋น +N๊ฑด; (3) ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ์นด๋ - ํ์ฌ ๋ฌ์ฑ N๊ฐ / ์ฐ๊ฐ ๋ชฉํ N๊ฐ, ๋ฌ์ฑ๋ฅ N%, ์ ์ ๋๋น +N๊ฐ; (4) ์์ฐ์งํ๋ฅ ์นด๋ - ํ์ฌ ์งํ N์ต์ / ์ด ๋ฐฐ์ N์ต์, ์งํ๋ฅ N% ์ํ ๊ฒ์ด์ง, ์ ์ ๋๋น +N%p; (5) ์งํ์ฌ์ ์นด๋ - ์งํ์ค N๊ฑด, ์๋ฃ N๊ฑด, ์ง์ฐ N๊ฑด์ ์์์ผ๋ก ๊ตฌ๋ถ ํ์; (6) ๋ฏธ์ ์ถ ๋ณด๊ณ ์ ์นด๋ - ์ฃผ๊ฐ๋ณด๊ณ ๋ฏธ์ ์ถ N๊ฑด, ์๊ฐ๋ณด๊ณ ๋ฏธ์ ์ถ N๊ฑด, ํฉ๊ณ N๊ฑด ๊ฐ์กฐ ํ์. ๊ฐ ์นด๋ ์ข์ธก์ ํด๋น ์งํ๋ฅผ ๋ํ๋ด๋ ์์ด์ฝ, ์ค์์ ์ฃผ์ ์์น๋ฅผ ํฌ๊ฒ, ํ๋จ์ ๋ถ๊ฐ ์ ๋ณด ๋ฐ ์ฆ๊ฐ ํ์๋ฅผ ๋ฐฐ์นํ๊ณ , ์นด๋ ์ ์ฒด ํด๋ฆญ ์ ํด๋น ์์ธ ํ์ด์ง(์: ์ฐ๊ตฌ์๊ธฐ์ ์นด๋ ํด๋ฆญ โ ์ฐ๊ตฌ์๊ธฐ์ ์นธ๋ฐ๋ณด๋)๋ก ์ด๋ํ๋ ๋ค๋น๊ฒ์ด์ ๊ธฐ๋ฅ ๊ตฌํ. - Recharts ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ๋ณตํฉ ์ฐจํธ 7์ข ๊ฐ๋ฐ. (1) ์๋ณ ์ค์ ์ถ์ด ์์ญ ์ฐจํธ(AreaChart): X์ถ์ 1์~12์, Y์ถ์ ๊ฑด์/๊ฐ์, 3๊ฐ ๋ฐ์ดํฐ ์๋ฆฌ์ฆ(์ฐ๊ตฌ์๊ธฐ์ -ํ๋์, ๊ธฐ์ ์ด์ -๋ น์, ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ -์ฃผํฉ์)๋ฅผ ๊ฐ๊ฐ ๋ฐํฌ๋ช ์์ญ์ผ๋ก ๋์ ํ์ํ์ฌ ์๋ณ ์ถ์ด ๋ฐ ํญ๋ชฉ ๊ฐ ๋น๊ต๋ฅผ ๋์์ ์๊ฐํ. (2) ๋ชฉํ ๋ฌ์ฑ๋ฅ ๋ฐฉ์ฌํ ๋ง๋ ์ฐจํธ(RadialBarChart): 3๊ฐ KPI(์ฐ๊ตฌ์๊ธฐ์ , ๊ธฐ์ ์ด์ , ์ฒจ๋จ๊ธฐ์ )์ ๋ฌ์ฑ๋ฅ ์ ๋์ฌ์ ํํ์ ๋ฐฉ์ฌํ ๋ง๋๋ก ํ์, 100% ๊ธฐ์ค์ ์ ์ ์ ์ผ๋ก ํ์, ์ฐจํธ ์ค์์ 3๊ฐ KPI์ ํ๊ท ๋ฌ์ฑ๋ฅ ์์น ํ ์คํธ ํ์. (3) ์ฌ์ ๋ณ ์์ฐ ํํฉ ์ํ ๋ง๋ ์ฐจํธ(BarChart): Y์ถ์ ์ฌ์ ๋ช ์ ๋์ด, X์ถ์ ๊ธ์ก(์ต์ ๋จ์), ๊ฐ ์ฌ์ ๋ณ๋ก ๋ฐฐ์ ์์ฐ(ํ์ ๋ง๋)๊ณผ ์งํ ์์ฐ(ํ๋์ ๋ง๋)์ ๋ณ๋ ฌ ๋ฐฐ์นํ์ฌ ์ฌ์ ๋ณ ์์ฐ ์์ง์จ์ ์ง๊ด์ ์ผ๋ก ๋น๊ต. (4) ์ฌ์ ์งํ ์ํ ๋ถํฌ ์ํ ์ฐจํธ(PieChart): ์งํ์ค/์๋ฃ/์ง์ฐ/์์ 4๊ฐ ์ํ๋ณ ์ฌ์ ์๋ฅผ ํ์ด ์กฐ๊ฐ์ผ๋ก ํ์, ๋๋ ํํ๋ก ์ค์ ํ์ ์ ์ฒด ์ฌ์ ์ ํ์, ๊ฐ ์กฐ๊ฐ ํธ๋ฒ ์ ์ํ๋ช ๊ณผ ๊ฑด์ ํดํ ํ์. (5) ์ฐ๊ตฌ์๊ธฐ์ ๋จ๊ณ๋ณ ํํฉ ์ํ ์ฐจํธ(PieChart): 7๋จ๊ณ ํ์ดํ๋ผ์ธ(์ค๋ฆฝ๊ธฐํ~๋ฑ๋ก์๋ฃ) ๊ฐ ๋จ๊ณ์ ์๋ ๊ธฐ์ ์๋ฅผ ํ์ด ์กฐ๊ฐ์ผ๋ก ํ์ํ์ฌ ํ์ดํ๋ผ์ธ ๋ณ๋ชฉ ๊ตฌ๊ฐ ์๋ณ ์ง์. (6) ๋ถ๊ธฐ๋ณ ๋ชฉํ ๋๋น ์ค์ ๋ณตํฉ ์ฐจํธ(ComposedChart): X์ถ์ Q1~Q4 ๋ถ๊ธฐ, ๋ง๋(Bar)๋ก ๋ถ๊ธฐ๋ณ ์ค์ , ์ (Line)์ผ๋ก ๋ถ๊ธฐ๋ณ ๋ชฉํ๋ฅผ ๋์ ํ์, ์ค์ ์ด ๋ชฉํ๋ฅผ ์ด๊ณผํ ๋ถ๊ธฐ์ ๊ฐ์กฐ ์์ ์ ์ฉ. (7) ์ต๊ทผ 6๊ฐ์ ์ถ์ด ์ ์ฐจํธ(LineChart): ์ฃผ์ ์งํ 3์ข ์ ์ต๊ทผ 6๊ฐ์ ์๋ณ ์์น๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ์์์ ์ ์ผ๋ก ํ์. - ๊ธฐ๊ด๋ณ ๋ณด๊ณ ์ ์ ์ถํํฉ UI ๊ฐ๋ฐ. 2x2 ๊ทธ๋ฆฌ๋ ๋ ์ด์์์ผ๋ก ITL ์ฃผ๊ฐ/์๊ฐ, UAD ์ฃผ๊ฐ/์๊ฐ 4๊ฐ ๋ณด๊ณ ์์ ์ ์ถ ์ํ๋ฅผ ์นด๋ ํํ๋ก ๋ฐฐ์นํ๊ณ , ๊ฐ ์นด๋์ ์ ์ถ ์ํ์ ๋ฐ๋ฅธ ์๊ฐ์ ํ์ ์ ์ฉ: ์ ์ถ ์๋ฃ(๋ น์ ๋ฐฐ๊ฒฝ, ์ฒดํฌ ์์ด์ฝ), ๋ฏธ์ ์ถ(๋นจ๊ฐ์ ๋ฐฐ๊ฒฝ, X ์์ด์ฝ), ์์ฑ์ค(๋ ธ๋์ ๋ฐฐ๊ฒฝ, ์๊ณ ์์ด์ฝ). ๊ฐ ์นด๋ ํด๋ฆญ ์ ํด๋น ๋ณด๊ณ ์ ์์ฑ ๋๋ ์กฐํ ํ์ด์ง๋ก ์ง์ ์ด๋. D-Day ๊ธฐ๋ฐ ์ฃผ์ ์ผ์ ์นด๋ ๊ฐ๋ฐ. ํ์ฌ ๋ ์ง ๊ธฐ์ค ํฅํ 2์ฃผ ์ด๋ด์ ์ฃผ์ ์ผ์ (์ ๊ธฐ ์ ๊ฒ, ๋ณด๊ณ ๋ง๊ฐ, ํ์, ์ฌ์ฌ ์ผ์ )์ D-Day ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ๋ฆฌ์คํธ๋ก ํ์. ๊ฐ ์ผ์ ํญ๋ชฉ์ ์ผ์ ์ ํ ์์ด์ฝ, ์ผ์ ๋ช , ๋ ์ง, D-Day ๋ฑ์ง ํ์ํ๊ณ , ๊ธด๊ธ๋์ ๋ฐ๋ฅธ ์์ ์ฐจ๋ณํ ์ ์ฉ: D-3 ์ด๋ด ์ผ์ ์ ๋นจ๊ฐ์ ๊ฐ์กฐ, D-7 ์ด๋ด๋ ์ฃผํฉ์, ๊ทธ ์ธ๋ ๊ธฐ๋ณธ ํ์. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ๋ฉ์ธ ๋์๋ณด๋์์ ๊ธฐ์ ๊ด๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ํ company-store, ์ฌ์ ๊ด๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ํ innotech-store, ์์ฐ ๋ฐ์ดํฐ๋ฅผ ์ํ budget-store, ๋ณด๊ณ ์ ๋ฐ์ดํฐ๋ฅผ ์ํ report-store ๋ฑ 4๊ฐ ์ด์์ Zustand Store๋ฅผ ๋์์ ๊ตฌ๋ ํ์ฌ KPI ์นด๋์ ์ฐจํธ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋๋ฐ, ์ด๋ ํ๋์ Store ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝ๋์ด๋(์: ์์ฐ Store์์ ์งํ์ก 1๊ฑด ์ ๋ฐ์ดํธ) ๋์๋ณด๋์ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ด 7๊ฐ ์ฐจํธ๊ฐ ์ ๋ถ ๊น๋นก์ด๋ฉฐ ๋ค์ ๊ทธ๋ ค์ง๋ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ฐ UX ๋ฌธ์ ๋ฐ์. Zustand๊ฐ ์ ๊ณตํ๋ ์ ํ์(Selector) ํจํด์ ์ ์ฉํ์ฌ ๊ฐ KPI ์นด๋ ์ปดํฌ๋ํธ์ ์ฐจํธ ์ปดํฌ๋ํธ๊ฐ ์์ ์๊ฒ ์ค์ ๋ก ํ์ํ ๋ฐ์ดํฐ ์กฐ๊ฐ๋ง ๊ฐ๋ณ์ ์ผ๋ก ๊ตฌ๋ ํ๋๋ก ์ธ๋ถํํ์ฌ ํด๊ฒฐ. ์๋ฅผ ๋ค์ด ์ฐ๊ตฌ์๊ธฐ์ KPI ์นด๋๋ `const count = useInnotechStore(state => state.researchCompanies.filter(c => c.stage === '๋ฑ๋ก์๋ฃ').length)`์ฒ๋ผ ๋ฑ๋ก์๋ฃ ๋จ๊ณ์ ๊ธฐ์ ์๋ง ์ ํํ๊ณ , ์์ฐ ์ฐจํธ๋ `const budgetData = useBudgetStore(state => state.items.map(i => ({name: i.name, allocated: i.allocated, spent: i.spent})))`์ฒ๋ผ ์ฐจํธ์ ํ์ํ ํ๋๋ง ์ถ์ถํ์ฌ, ๊ด๋ จ ์๋ Store๋ ํ๋ ๋ณ๊ฒฝ ์์๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ก ์ต์ ํ. ๋ํ ๋์๋ณด๋ ํ์ด์ง ์ง์ ์ 6๊ฐ KPI ์นด๋ + 7๊ฐ ์ฐจํธ + ๋ณด๊ณ ํํฉ ์นด๋ + ์ผ์ ์นด๋๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ ๋๋ง์ ์ํํ๋ฉด์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด 2์ด ์ด์ ์์๋์ด ์ฌ์ฉ์๊ฐ ๋น ํ๋ฉด์ ์ค๋ ๋ณด๊ฒ ๋๋ ์ฒด๊ฐ ์๋ ๋ฌธ์ ๋ฐ์. ๋ชจ๋ ๋ฐ์ดํฐ ์์ญ์ Skeleton ๋ก๋ฉ UI๋ฅผ ๋จผ์ ํ์ํ์ฌ ๋ ์ด์์์ ์ฆ์ ํ์ ํ๊ณ , ์ฝํ ์ธ ์ฐ์ ์์์ ๋ฐ๋ฅธ ์์ฐจ ๋ ๋๋ง ์ ๋ต ์ ์ฉ: KPI ์นด๋(์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๋จผ์ ํ์ธํ๋ ํต์ฌ ์งํ)๋ฅผ ์ต์ฐ์ ์ผ๋ก ๋ ๋๋งํ๊ณ , ๋ทฐํฌํธ ํ๋จ์ ์์นํ ์ฐจํธ๋ค์ Intersection Observer API๋ฅผ ํ์ฉํด ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ์ฌ ํด๋น ์์ญ์ด ๋ทฐํฌํธ์ ์ง์ ํ ๋ ๋น๋ก์ ๋ ๋๋งํ๋ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ๋ฐฉ์์ ๋์ ํ์ฌ ์ด๊ธฐ ์ฒด๊ฐ ๋ก๋ฉ ์๊ฐ์ 0.5์ด ์ด๋ด๋ก ๋ํญ ๋จ์ถ. --- ## 5์ **์์ฑ์ผ์: 25.05.22** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ์ ๋ฌธ๊ฐ DB 3์ถ ๋ถ๋ฅ์ฒด๊ณ ์ค๊ณ ๋ฐ ๋ค์ค ์กฐ๊ฑด ํตํฉ๊ฒ์ ์์คํ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์๋ฌธ, ํ๊ฐ์์ํ, ๋ฉํ ๋ง ํ๋ก๊ทธ๋จ ๋ฑ ๋ค์ํ ์ญํ ๋ก ๊ธฐ์ ์ง์ ํ๋์ ์ฐธ์ฌํ๋ ์ธ๋ถ ์ ๋ฌธ๊ฐ ์ธ๋ ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ๋ฌธ๊ฐ DB ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. ์ ๋ฌธ๋ถ์ผ(IT/SW, BT/์๋ฃ, NT/์์ฌ ๋ฑ), ์์๊ธฐ๊ด ์ ํ(๋ํ, ์ฐ๊ตฌ์, ๊ธฐ์ ๋ฑ), ์ญ๋๋ฑ๊ธ(์์/์ฑ ์/์ ์/์ ๋ฌธ)์ 3์ถ ๋ถ๋ฅ์ฒด๊ณ๋ฅผ ์ค๊ณํ๊ณ , 3๊ฐ ์ถ์ ์กฐ๊ฑด์ ์์ ๋กญ๊ฒ AND ์กฐํฉํ์ฌ ์ํ๋ ์ ๋ฌธ๊ฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ๋ค์ค ์กฐ๊ฑด ํตํฉ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ. ์ ๋ฌธ๊ฐ ์์ธ ํ๋กํ, ๊ฒฝ๋ ฅ์ฌํญ, ์ ๋ฌธ๋ถ์ผ, ์๋ฌธ ์ด๋ ฅ ๋ฑ์ ์ข ํฉ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์์ธ ํ๋กํ ํ์ด์ง ๋ฐ ๋์ ๋ผ์ฐํ ์์คํ ๊ฐ๋ฐ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ์ ๋ฌธ๊ฐ ๊ด๋ฆฌ ๋ฉ์ธ ํ๋ฉด(/expert-management) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ ์์ญ์ ์ ์ฒด ์ ๋ฌธ๊ฐ ํํฉ์ ์์ฝํ๋ 3๊ฐ์ ํต๊ณ ์นด๋(์ด ๋ฑ๋ก ์ ๋ฌธ๊ฐ ์ N๋ช , ์ด๋ฒ ๋ฌ ์ ๊ท ๋ฑ๋ก N๋ช , ํ์ฌ ํ๋์ค์ธ ์ ๋ฌธ๊ฐ N๋ช ) ๊ฐ๋ก ๋ฐฐ์น. ํ๋ฉด ์ค์ ์์ญ์ ์ ๋ฌธ๋ถ์ผ๋ณ ์ ๋ฌธ๊ฐ ๋ถํฌ๋ฅผ ์๊ฐํํ๋ ์ํ ์ฐจํธ(Pie Chart) ๋ฐฐ์น: IT/SW, BT/์๋ฃ, NT/์์ฌ, ET/์๋์ง, CT/๋ฌธํ, ์ตํฉ/๊ธฐํ 6๊ฐ ๋ถ์ผ๋ณ ์ ๋ฌธ๊ฐ ์์ ๋น์จ์ ์์์ผ๋ก ๊ตฌ๋ถํ์ฌ ํ์, ์ฐจํธ ์ฐ์ธก์ ๋ฒ๋ก(๋ถ์ผ๋ช , ์์, ์ธ์์, ๋น์จ%) ํ์. ํ๋ฉด ํ๋จ ์์ญ์ ์ต๊ทผ ๋ฑ๋ก๋ ์ ๋ฌธ๊ฐ 5์ธ์ ์นด๋ ํํ๋ก ๊ฐ๋ก ๋ฐฐ์ดํ์ฌ ํ์: ๊ฐ ์นด๋์ ํ๋กํ ์ฌ์ง(์์ ๊ฒฝ์ฐ ์ด๋ฆ ์ด๋์ ๋ก ์์ฑํ ์๋ฐํ), ์ด๋ฆ, ์์๊ธฐ๊ด, ์ ๋ฌธ๋ถ์ผ ํ๊ทธ, ๋ฑ๋ก์ผ ํ์. - ์ ๋ฌธ๊ฐ ๋ชฉ๋ก ํ๋ฉด(/expert-management/list) ๊ฐ๋ฐ. ์ ๋ฌธ๊ฐ ์ ๋ณด๋ฅผ ์นด๋ ๊ทธ๋ฆฌ๋ ๋ ์ด์์(๋ฐ์คํฌํฑ 4์ด, ํ๋ธ๋ฆฟ 2์ด, ๋ชจ๋ฐ์ผ 1์ด)์ผ๋ก ๋ฐฐ์นํ์ฌ ์๊ฐ์ ์ผ๋ก ํ๋ถํ๊ฒ ํ์. ๊ฐ ์ ๋ฌธ๊ฐ ์นด๋ ๊ตฌ์ฑ: ์๋จ์ ํ๋กํ ์ฌ์ง(์์ ๊ฒฝ์ฐ ์ด๋ฆ ๊ธฐ๋ฐ ์ด๋์ ์๋ฐํ), ์ค์์ ์ด๋ฆ(๊ตต์ ๊ธ์จ), ์์๊ธฐ๊ด๋ช , ์ง์, ํ๋จ์ ์ ๋ฌธ๋ถ์ผ ํ๊ทธ(์ต๋ 3๊ฐ๊น์ง ํ์, ์ด๊ณผ ์ +N more ํ์), ์ญ๋๋ฑ๊ธ ๋ฑ์ง(์์: ๊ธ์, ์ฑ ์: ์์, ์ ์: ๋์, ์ ๋ฌธ: ํ์), ์ต๊ทผ ํ๋์ผ(N์ผ ์ ํ์). ํ๋ฉด ์๋จ์ ๊ฒ์ ๋ฐ ํํฐ ํจ๋ ๋ฐฐ์น: ๊ฒ์ ์ ๋ ฅ์ฐฝ(์ด๋ฆ, ์์๊ธฐ๊ด๋ช , ์ ๋ฌธ๋ถ์ผ ํค์๋๋ก ์ค์๊ฐ ๊ฒ์), ์ ๋ฌธ๋ถ์ผ ํํฐ(6๊ฐ ๋ถ์ผ ๋ค์ค ์ ํ ์ฒดํฌ๋ฐ์ค), ๊ธฐ๊ด์ ํ ํํฐ(๋ํ/์ ๋ถ์ถ์ฐ์ฐ/๊ธฐ์ ๋ถ์ค์ฐ/๋ฏผ๊ฐ๊ธฐ์ /๊ธฐํ ๋ผ๋์ค ๋ฒํผ), ์ญ๋๋ฑ๊ธ ํํฐ(์์/์ฑ ์/์ ์/์ ๋ฌธ ๋ผ๋์ค ๋ฒํผ), ์ ๋ ฌ ๋๋กญ๋ค์ด(์ด๋ฆ์, ์ต๊ทผํ๋์, ๋ฑ๋ก์ผ์). ํ๋จ์ ํ์ด์ง๋ค์ด์ (ํ์ด์ง๋น 12/24/48๋ช ์ ํ, ์ด์ /๋ค์ ๋ฒํผ). - ์ ๋ฌธ๊ฐ DB ํตํฉ๊ฒ์ ํ๋ฉด(/expert-management/database) ๊ฐ๋ฐ. 3๊ฐ ๊ฒ์ ์ถ์ ์๊ฐ์ ์ผ๋ก ๋ช ํํ ๊ตฌ๋ถํ ๊ฒ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ. ์ฒซ ๋ฒ์งธ ์น์ : ํค์๋ ๊ฒ์(์ ๋ฌธ๊ฐ ์ด๋ฆ, ์์๊ธฐ๊ด, ์ฐ๊ตฌ ๋ถ์ผ, ์ธ๋ถ ์ ๋ฌธ ๋ถ์ผ ๋ฑ ํ ์คํธ ๊ฒ์). ๋ ๋ฒ์งธ ์น์ : ์ ๋ฌธ๋ถ์ผ ์ ํ(IT/SW, BT/์๋ฃ, NT/์์ฌ, ET/์๋์ง, CT/๋ฌธํ, ์ตํฉ/๊ธฐํ 6๊ฐ ๋ถ์ผ ์ค ๋ณต์ ์ ํ ๊ฐ๋ฅํ ์ฒดํฌ๋ฐ์ค ๊ทธ๋ฃน). ์ธ ๋ฒ์งธ ์น์ : ์์๊ธฐ๊ด ์ ํ ์ ํ(๋ํ๊ต, ์ ๋ถ์ถ์ฐ์ฐ๊ตฌ์, ๊ธฐ์ ๋ถ์ค์ฐ๊ตฌ์, ๋ฏผ๊ฐ๊ธฐ์ , ํ๋ฆฌ๋์/๊ฐ์ธ, ๊ธฐํ ์ค ๋ณต์ ์ ํ ๊ฐ๋ฅ). ๋ค ๋ฒ์งธ ์น์ : ์ญ๋๋ฑ๊ธ ์ ํ(์์์ ๋ฌธ๊ฐ, ์ฑ ์์ ๋ฌธ๊ฐ, ์ ์์ ๋ฌธ๊ฐ, ์ ๋ฌธ๊ฐ ์ค ๋จ์ผ ๋๋ ๋ณต์ ์ ํ). '๊ฒ์' ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ ์ ํ ์กฐ๊ฑด์ AND ์กฐํฉํ์ฌ ํํฐ๋งํ ๊ฒฐ๊ณผ๋ฅผ ํ๋จ ํ ์ด๋ธ์ ํ์. ๊ฒ์ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ์ด๋ฆ, ์์, ์ ๋ฌธ๋ถ์ผ, ์ญ๋๋ฑ๊ธ, ์ต๊ทผํ๋, ์ฐ๋ฝ์ฒ ์ปฌ๋ผ ํ์. ๊ฒ์ ์กฐ๊ฑด ์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ ๊ธฐ๋ฅ: ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ ์กฐ๊ฑด ์กฐํฉ์ ์ด๋ฆ์ ๋ถ์ฌ ์ ์ฅํ๊ณ ์ถํ ์ํด๋ฆญ์ผ๋ก ๋ถ๋ฌ์ค๊ธฐ ๊ฐ๋ฅ. - ์ ๋ฌธ๊ฐ ์์ธ ํ๋กํ ํ๋ฉด(/expert-management/database/[id]) ๊ฐ๋ฐ. Next.js ๋์ ๋ผ์ฐํ ์ ํ์ฉํ์ฌ URL์ ์ ๋ฌธ๊ฐ ID ํ๋ผ๋ฏธํฐ์ ๋ฐ๋ผ ํด๋น ์ ๋ฌธ๊ฐ์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ํ์. ํ๋ฉด ์๋จ์ ํ๋กํ ํค๋: ๋ํ ํ๋กํ ์ฌ์ง, ์ด๋ฆ, ์์๊ธฐ๊ด, ์ง์, ์ญ๋๋ฑ๊ธ ๋ฑ์ง, ์ ๋ฌธ๋ถ์ผ ํ๊ทธ๋ค. ํญ ๊ธฐ๋ฐ ์์ธ ์ ๋ณด ๊ตฌ์ฑ: (1) ๊ธฐ๋ณธ์ ๋ณด ํญ - ์ด๋ฆ, ์์, ์ง์, ์ฐ๋ฝ์ฒ(์ ํ๋ฒํธ, ์ด๋ฉ์ผ), ์ฃผ์, ํ๋กํ ์ฌ์ง, ์๊ธฐ์๊ฐ; (2) ๊ฒฝ๋ ฅ์ฌํญ ํญ - ํ๋ ฅ(ํ๊ต๋ช , ์ ๊ณต, ํ์, ๊ธฐ๊ฐ), ๊ฒฝ๋ ฅ(ํ์ฌ/๊ธฐ๊ด๋ช , ์ง์/์ง์ฑ , ๋ด๋น ์ ๋ฌด, ๊ธฐ๊ฐ), ์๊ฒฉ์ฆ/์ธ์ฆ(์๊ฒฉ์ฆ๋ช , ๋ฐ๊ธ๊ธฐ๊ด, ์ทจ๋์ผ); (3) ์ ๋ฌธ๋ถ์ผ ํญ - ์ฃผ ์ ๋ฌธ๋ถ์ผ ์ ํ, ์ธ๋ถ ์ฐ๊ตฌ ๋ถ์ผ ํ ์คํธ, ๊ธฐ์ ํค์๋ ํ๊ทธ(์ต๋ 10๊ฐ), ์ฃผ์ ์ฐ๊ตฌ ์ค์ /๋ ผ๋ฌธ; (4) ์๋ฌธ์ด๋ ฅ ํญ - ํด๋น ์ ๋ฌธ๊ฐ๊ฐ A-WORKS ํ๋ซํผ์ ํตํด ์ฐธ์ฌํ ์๋ฌธ/ํ๊ฐ/๋ฉํ ๋ง ํ๋ ์ด๋ ฅ์ ํ ์ด๋ธ๋ก ํ์(์ผ์, ๋์ ๊ธฐ์ ๋ช , ํ๋ ์ ํ, ํ๋ ๋ด์ฉ ์์ฝ, ํ๊ฐ ์ ์); (5) ์ฐ๋ฝ์ฒ ํญ - ์ฐ๋ฝ์ฒ ์์ธ ์ ๋ณด, ์ ํธ ์ฐ๋ฝ ๋ฐฉ๋ฒ, ์ฐ๋ฝ ๊ฐ๋ฅ ์๊ฐ๋. ๊ฐ ํญ ๋ด์ฉ์ 'ํธ์ง' ๋ฒํผ์ ๋ฐฐ์นํ์ฌ ์ธ๋ผ์ธ ํธ์ง ๊ฐ๋ฅ. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ ๋ฌธ๋ถ์ผ 6๊ฐ ์ต์ x ๊ธฐ๊ด์ ํ 5๊ฐ ์ต์ x ์ญ๋๋ฑ๊ธ 4๊ฐ ์ต์ = 120๊ฐ์ง ์ด์์ ์กฐํฉ์ด ๊ฐ๋ฅํ ๋ค์ค ์กฐ๊ฑด ๊ฒ์์์, ์ฌ์ฉ์๊ฐ ์กฐ๊ฑด์ ํ๋์ฉ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋๋ง๋ค ์ ์ฒด ์ ๋ฌธ๊ฐ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํํ๋ฉฐ ๋ชจ๋ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋ฉด, ์ ๋ฌธ๊ฐ ์๊ฐ ์๋ฐฑ ๋ช ์ด์์ผ ๋ ๊ฐ ๊ฒ์ ์กฐ๊ฑด ๋ณ๊ฒฝ๋ง๋ค ๋์ ๋๊ฒ ์๋ต์ด ์ง์ฐ(500ms ์ด์)๋์ด ์ฌ์ฉ์๊ฐ ์กฐ๊ฑด์ ์์ ๋กญ๊ฒ ์กฐํฉํ๋ฉฐ ํ์ํ๋ UX๋ฅผ ์ ํดํ๋ ๋ฌธ์ ๋ฐ์. ๊ฒ์ ์ฒ๋ฆฌ๋ฅผ 3๊ฐ ์ถ์ ๋ํ ํ์ดํ๋ผ์ธ ํํฐ๋ง์ผ๋ก ์ฌ์ค๊ณ: ์ ์ฒด ๋ฐ์ดํฐ โ ์ ๋ฌธ๋ถ์ผ ํํฐ ์ ์ฉ โ ๊ธฐ๊ด์ ํ ํํฐ ์ ์ฉ โ ์ญ๋๋ฑ๊ธ ํํฐ ์ ์ฉ ์์๋ก ๋จ๊ณ๋ณ ์ฒ๋ฆฌํ๊ณ , ๊ฐ ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํ์ฌ ์ฌ์ฉ์๊ฐ ๋ง์ง๋ง ๋จ๊ณ(์: ์ญ๋๋ฑ๊ธ)์ ์กฐ๊ฑด๋ง ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์ด์ ๋จ๊ณ(์ ๋ฌธ๋ถ์ผ, ๊ธฐ๊ด์ ํ) ํํฐ ๊ฒฐ๊ณผ๋ ์บ์์์ ์ฌ์ฌ์ฉํ๊ณ ๋ง์ง๋ง ๋จ๊ณ ํํฐ๋ง ์ฌ์คํํ๋ ์ ์ง์ ํํฐ๋ง(Progressive Filtering) ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ. ์ด๋ฅผ ํตํด ์กฐ๊ฑด ๋ณ๊ฒฝ ์ ํ๊ท ์๋ต ์๊ฐ์ 200ms ์ด๋ด๋ก ์ ์งํ์ฌ ์ค์๊ฐ ๊ฒ์์ ๊ฐ๊น์ด ๋ฐ์์ฑ ํ๋ณด. ๋ํ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ ์์์ ์ ๋ฌธ๊ฐ ID(์: /expert-management/database/99999)๋ฅผ ์ง์ ์ ๋ ฅํ์ฌ ์กด์ฌํ์ง ์๋ ์ ๋ฌธ๊ฐ ํ์ด์ง์ ์ ๊ทผํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์กฐํ ์คํจ๋ก undefined ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ค ํ์ฌ "Cannot read property of undefined" ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๋น ํ๋ฉด์ด ํ์๋๋ ๋ฌธ์ ๋ฐ์. ์ ๋ฌธ๊ฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ์ ์ต์๋จ์์ ํด๋น ID๋ก ๋ฐ์ดํฐ ์กฐํ ํ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด(null ๋๋ undefined) ์ฆ์ "ํด๋น ์ ๋ฌธ๊ฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค" ์๋ด ๋ฉ์์ง์ ํจ๊ป "์ ๋ฌธ๊ฐ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ" ๋ฒํผ์ ํ์ํ๋ ์๋ฌ ๋ฐ์ด๋๋ฆฌ ์ฒ๋ฆฌ ์ ์ฉ. ์ ์์ ์ธ ๋ฐ์ดํฐ๊ฐ ์กฐํ๋ ๊ฒฝ์ฐ์๋ง ์์ธ ํ๋กํ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋๋ก ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๊ตฌํ. --- ## 6์ **์์ฑ์ผ์: 25.06.20** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ์ฌ์ ๊ด๋ฆฌ ๋ค๋จ๊ณ ํ์ดํ๋ผ์ธ ์ํ๊ด๋ฆฌ ์์ง ๋ฐ ์นธ๋ฐ๋ณด๋ ์๊ฐํ ์์คํ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์ ์ฌ์ ์ ํต์ฌ ์์ญ์ธ ์ฐ๊ตฌ์๊ธฐ์ ์ค๋ฆฝ ์ง์(7๋จ๊ณ ํ์ดํ๋ผ์ธ), ๊ธฐ์ ์ด์ ์ค๊ฐ(5๋จ๊ณ ํ์ดํ๋ผ์ธ), ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ๋ฐ๊ตด์ 3๋ ์์ญ์ ํตํฉ ๊ด๋ฆฌํ๋ ์ฌ์ ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. ๊ฐ ์์ญ์ ์งํ ๋จ๊ณ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ถ์ ํ๊ณ ์ํ ๋ณ๊ฒฝ, ๋ด๋น์ ๋ฐฐ์ , ํ๋ ๊ธฐ๋ก ๋ฑ์ ๊ด๋ฆฌํ ์ ์๋ ๋๊ท๋ชจ Zustand ์ํ๊ด๋ฆฌ ์์ง(Store) ์ค๊ณ. ๋ณต์กํ ๋ค๋จ๊ณ ํ์ดํ๋ผ์ธ์ ์งํ ํํฉ์ ํ๋์ ์ง๊ด์ ์ผ๋ก ํ์ ํ ์ ์๋๋ก ์นธ๋ฐ๋ณด๋(Kanban Board) ํํ์ ์๊ฐํ UI ๊ตฌํ. ์ฐ๊ฐ ๋ชฉํ ๋๋น ๋ฌ์ฑ ํํฉ์ ์ค์๊ฐ์ผ๋ก ์ง๊ณํ์ฌ ํ์ํ๋ ์ฌ์ ๊ด๋ฆฌ ๋์๋ณด๋ ๊ฐ๋ฐ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ์ฌ์ ์ํ๊ด๋ฆฌ ์์ง(innotech-store) ์ค๊ณ ๋ฐ ๊ฐ๋ฐ. Zustand ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ์ ์ญ ์ํ๊ด๋ฆฌ Store๋ก 3๋ ์ฌ์ ์์ญ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํตํฉ ๊ด๋ฆฌํ๋ ์ฝ 2,400์ค ๊ท๋ชจ์ Store ๊ตฌํ. (1) ์ฐ๊ตฌ์๊ธฐ์ (ResearchCompany) ๋ฐ์ดํฐ ๋ชจ๋ธ: ๊ธฐ์ ID, ๊ธฐ์ ๊ธฐ๋ณธ์ ๋ณด(๊ธฐ์ ๋ช , ๋ํ์, ์ฐ๋ฝ์ฒ ๋ฑ), ํ์ฌ ๋จ๊ณ(7๋จ๊ณ ์ค ํ๋), ๊ฐ ๋จ๊ณ๋ณ ์ง์ ์ผ/์๋ฃ์ผ, ๋ด๋น์ ์ ๋ณด, ๊ด๋ จ ๊ธฐ์ ์ด์ ๊ฑด ์ฐ๊ฒฐ(FK), ํ๋ ๋ฉ๋ชจ ๋ฐฐ์ด(์๊ณ์ด ๊ธฐ๋ก). 7๋จ๊ณ ํ์ดํ๋ผ์ธ ์ ์: ์ค๋ฆฝ๊ธฐํ(์ฌ์ ์์ด๋์ด ๊ฒํ ๋จ๊ณ) โ ๊ธฐ์ ๋งค์นญ(์ ํฉ ๊ธฐ์ ํ์ ๋ฐ ๋งค์นญ ๋จ๊ณ) โ ๊ธฐ์ ์ด์ (๊ธฐ์ ์ด์ ํ์ ๋ฐ ๊ณ์ฝ ๋จ๊ณ) โ ๊ธฐ๊ด์ฌ์(์ ๊ด ๊ธฐ๊ด ๋ด๋ถ ์ฌ์ ๋จ๊ณ) โ ์๊ฑด๊ตฌ๋น(์ฐ๊ตฌ์๊ธฐ์ ์ค๋ฆฝ ๋ฒ์ ์๊ฑด ์ถฉ์กฑ ๋จ๊ณ) โ ๋ฑ๋ก์ฌ์ฌ(์ฐ๊ตฌ์๊ธฐ์ ๋ฑ๋ก ์ ์ฒญ ๋ฐ ์ฌ์ฌ ๋จ๊ณ) โ ๋ฑ๋ก์๋ฃ(์ฐ๊ตฌ์๊ธฐ์ ๊ณต์ ๋ฑ๋ก ์๋ฃ). (2) ๊ธฐ์ ์ด์ (TechTransfer) ๋ฐ์ดํฐ ๋ชจ๋ธ: ๊ธฐ์ ์ด์ ๊ฑด ID, ์ด์ ๋์ ๊ธฐ์ ๋ช , ๊ธฐ์ ์ถ์์ธ/์ถ์๊ธฐ๊ด, ๊ธฐ์ ๋ถ์ผ, ์์ ๋ก์ดํฐ ๊ธ์ก, ํ์ฌ ๋จ๊ณ(5๋จ๊ณ ์ค ํ๋), ์ฐ๊ฒฐ๋ ์ฐ๊ตฌ์๊ธฐ์ ID(ํด๋น ์), ๋ด๋น์, ํ๋ ๋ฉ๋ชจ ๋ฐฐ์ด. 5๋จ๊ณ ํ์ดํ๋ผ์ธ ์ ์: ์์ํ์ธ(๊ธฐ์ ์ ๊ธฐ์ ์์ ํ์ ) โ ๊ธฐ์ ํ์(๊ธฐ์ ์์ธ ๋ด์ฉ ํ์) โ ๊ธฐ๊ดํ์(์ถ์๊ธฐ๊ด๊ณผ ์ด์ ์กฐ๊ฑด ํ์) โ ์ด์ ์ ์ฒญ(๊ธฐ์ ์ด์ ์ ์ฒญ์ ์ ์) โ ๊ณ์ฝ์ฒด๊ฒฐ(๊ธฐ์ ์ด์ ๊ณ์ฝ ์ฒด๊ฒฐ ์๋ฃ). (3) ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ (AdvancedTechCompany) ๋ฐ์ดํฐ ๋ชจ๋ธ: ๊ธฐ์ ID, ๊ธฐ์ ์ ๋ณด, ๋ฐ๊ตด/์ธ์ฆ ๋จ๊ณ, ์ธ์ฆ ์์ ์ผ, ๋ด๋น์. (4) ์ฐ๊ฐ๋ชฉํ(TargetStatus) ๋ฐ์ดํฐ: ์ฐ๊ตฌ์๊ธฐ์ ์ฐ๊ฐ ๋ชฉํ N๊ฐ, ๊ธฐ์ ์ด์ ์ฐ๊ฐ ๋ชฉํ N๊ฑด, ์ฒจ๋จ๊ธฐ์ ์ฐ๊ฐ ๋ชฉํ N๊ฐ์ ํ์ฌ ๋ฌ์ฑ ์์น๋ฅผ ๋ณ๋ ๊ด๋ฆฌ. (5) ํ๋๋ฉ๋ชจ(ActivityMemo) ๋ชจ๋ธ: ๊ธฐ๋ก ID, ๊ธฐ๋ก ์ผ์, ๊ธฐ๋ก ๋ด์ฉ ํ ์คํธ, ์์ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์๊ณ์ด ๋ฉ๋ชจ. Store ์ก์ ์ผ๋ก ๊ธฐ์ /๊ฑด ์ถ๊ฐ, ๋จ๊ณ ๋ณ๊ฒฝ(moveToNextStage), ๋ฉ๋ชจ ์ถ๊ฐ(addMemo), ๋ด๋น์ ๋ณ๊ฒฝ, ๋ชฉํ ์ ๋ฐ์ดํธ ๋ฑ ๋ค์ํ ์ํ ๋ณ๊ฒฝ ํจ์ ์ ๊ณต. - ์ฐ๊ตฌ์๊ธฐ์ 7๋จ๊ณ ์นธ๋ฐ๋ณด๋ ํ๋ฉด(/business-management/innotech-2025/research-company) ๊ฐ๋ฐ. 7๊ฐ ๋จ๊ณ(์ค๋ฆฝ๊ธฐํ, ๊ธฐ์ ๋งค์นญ, ๊ธฐ์ ์ด์ , ๊ธฐ๊ด์ฌ์, ์๊ฑด๊ตฌ๋น, ๋ฑ๋ก์ฌ์ฌ, ๋ฑ๋ก์๋ฃ)๋ฅผ ๊ฐ๊ฐ ํ๋์ ์ปฌ๋ผ์ผ๋ก ํ์ฌ ๊ฐ๋ก๋ก ๋๋ํ ๋ฐฐ์นํ๋ ์นธ๋ฐ๋ณด๋ UI ๊ตฌํ. ๊ฐ ์ปฌ๋ผ ๋ด๋ถ์ ํด๋น ๋จ๊ณ์ ์๋ ์ฐ๊ตฌ์๊ธฐ์ ๋ค์ ์นด๋ ํํ๋ก ์ธ๋ก ๋ฐฐ์ดํ์ฌ ํ์. ๊ธฐ์ ์นด๋ ๊ตฌ์ฑ: ๊ธฐ์ ๋ช (๊ตต์ ๊ธ์จ), ๋ด๋น์ ์ด๋ฆ ๋ฐ ์๋ฐํ, ํด๋น ๋จ๊ณ ์ง์ ์ผ(N์ผ ๊ฒฝ๊ณผ ํ์), ๊ฐ์ฅ ์ต๊ทผ ํ๋ ๋ฉ๋ชจ ์์ฝ(1์ค, ๋ง์ค์ ์ฒ๋ฆฌ). ๊ฐ ์ปฌ๋ผ ํค๋์ ๋จ๊ณ๋ช ๊ณผ ํจ๊ป ํด๋น ๋จ๊ณ์ ์๋ ๊ธฐ์ ์๋ฅผ ๋ฑ์ง ํํ๋ก ํ์. ๊ธฐ์ ์นด๋ ํด๋ฆญ ์ ํ๋ฉด ์ฐ์ธก์์ ์ฌ๋ผ์ด๋๋๋ ์์ธ ์ ๋ณด ์ฌ์ด๋ ํจ๋ ์คํ: ๊ธฐ์ ๊ธฐ๋ณธ์ ๋ณด, 7๋จ๊ณ ์ ์ฒด ์งํ ์ด๋ ฅ(๊ฐ ๋จ๊ณ ์ง์ ์ผ/์๋ฃ์ผ ํ์๋ผ์ธ), ํ๋ ๋ฉ๋ชจ ์ ์ฒด ๋ชฉ๋ก(์๊ณ์ด์), ๋ค์ ๋จ๊ณ๋ก ์ด๋ ๋ฒํผ, ๋ฉ๋ชจ ์ถ๊ฐ ์ ๋ ฅ์ฐฝ. - ๊ธฐ์ ์ด์ 5๋จ๊ณ ์นธ๋ฐ๋ณด๋ ํ๋ฉด(/business-management/innotech-2025/tech-transfer) ๊ฐ๋ฐ. 5๊ฐ ๋จ๊ณ(์์ํ์ธ, ๊ธฐ์ ํ์, ๊ธฐ๊ดํ์, ์ด์ ์ ์ฒญ, ๊ณ์ฝ์ฒด๊ฒฐ)๋ฅผ ์ปฌ๋ผ์ผ๋ก ํ๋ ์นธ๋ฐ๋ณด๋ UI ๊ตฌํ. ๊ฐ ๊ธฐ์ ์ด์ ๊ฑด์ ์นด๋๋ก ํ์: ๊ธฐ์ ๋ช , ์ถ์๊ธฐ๊ด, ๊ด๋ จ ๊ธฐ์ ๋ช (์ฐ๊ตฌ์๊ธฐ์ ๊ณผ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ), ์์ ๋ก์ดํฐ ๊ธ์ก, ํด๋น ๋จ๊ณ ์ง์ ์ผ. ์นด๋ ํด๋ฆญ ์ ๊ธฐ์ ์ด์ ์์ธ ์ ๋ณด ์ฌ์ด๋ ํจ๋ ์คํ: ๊ธฐ์ ์์ธ ์ ๋ณด, ์ถ์์ธ/์ถ์๊ธฐ๊ด ์ ๋ณด, ์ด์ ์กฐ๊ฑด, ์ฐ๊ฒฐ๋ ์ฐ๊ตฌ์๊ธฐ์ ์ ๋ณด ๋งํฌ, ๋จ๊ณ ์ด๋ ฅ, ํ๋ ๋ฉ๋ชจ. - ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ๊ด๋ฆฌ๋ณด๋ ํ๋ฉด(/business-management/innotech-2025/advanced-tech) ๊ฐ๋ฐ. ๋ฐ๊ตด ๋ฐ ์ธ์ฆ ๋จ๊ณ๋ณ๋ก ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ํ๋ณด๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์นด๋ ํํ๋ก ํ์. - ์ฌ์ ๊ด๋ฆฌ ๋ฉ์ธ ๋์๋ณด๋ ํ๋ฉด(/business-management/innotech-2025) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ์ 3๋ ์ฌ์ ์์ญ์ ์์ฝ KPI ์นด๋(์ฐ๊ตฌ์๊ธฐ์ : ๋ฌ์ฑ N๊ฐ/๋ชฉํ N๊ฐ, ๋ฌ์ฑ๋ฅ N%; ๊ธฐ์ ์ด์ : ๋ฌ์ฑ N๊ฑด/๋ชฉํ N๊ฑด, ๋ฌ์ฑ๋ฅ N%; ์ฒจ๋จ๊ธฐ์ : ๋ฌ์ฑ N๊ฐ/๋ชฉํ N๊ฐ, ๋ฌ์ฑ๋ฅ N%) ๋ฐฐ์น. ๊ฐ KPI ์นด๋์ ๋ชฉํ ๋ฌ์ฑ๋ฅ ์ ์๊ฐํํ๋ ํ๋ก๊ทธ๋ ์ค๋ฐ ๋๋ ์ํ ๊ฒ์ด์ง ํฌํจ. ํ๋จ์ 3๋ ์์ญ์ผ๋ก์ ๋ฐ๋ก๊ฐ๊ธฐ ๋ฒํผ(์ฐ๊ตฌ์๊ธฐ์ ์นธ๋ฐ๋ณด๋, ๊ธฐ์ ์ด์ ์นธ๋ฐ๋ณด๋, ์ฒจ๋จ๊ธฐ์ ๋ณด๋) ๋ฐฐ์น. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ฐ๊ตฌ์๊ธฐ์ , ๊ธฐ์ ์ด์ , ์ฒจ๋จ๊ธฐ์ 3๊ฐ ์์ญ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ ๋๊ท๋ชจ innotech-store์์ ํตํฉ ๊ด๋ฆฌ๋๋ฉด์, ์ฌ์ฉ์๊ฐ ์ฐ๊ตฌ์๊ธฐ์ ์ ๋จ๊ณ๋ฅผ ๋ณ๊ฒฝ(์: "๊ธฐ์ ์ด์ " ๋จ๊ณ โ "๊ธฐ๊ด์ฌ์" ๋จ๊ณ๋ก ์ด๋)ํ๋ฉด ํด๋น ๊ธฐ์ ์ ํ์ฌ ๋จ๊ณ ํ๋ ์ ๋ฐ์ดํธ, ์ด์ ๋จ๊ณ("๊ธฐ์ ์ด์ ")์ ์๋ฃ์ผ ๊ธฐ๋ก, ์ ๋จ๊ณ("๊ธฐ๊ด์ฌ์")์ ์ง์ ์ผ ๊ธฐ๋ก, "๋จ๊ณ ๋ณ๊ฒฝ: ๊ธฐ์ ์ด์ โ๊ธฐ๊ด์ฌ์" ๋ด์ฉ์ ํ๋๋ฉ๋ชจ ์๋ ์ถ๊ฐ, ๋ง์ง๋ง ๋จ๊ณ("๋ฑ๋ก์๋ฃ") ๋๋ฌ ์ ์ฐ๊ฐ๋ชฉํ์ ๋ฌ์ฑ์ +1 ์ ๋ฐ์ดํธ ๋ฑ ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ๋์์ ๊ฐฑ์ ๋์ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๊ฐ๋ณ setState ํธ์ถ๋ก ์์ฐจ ์ฒ๋ฆฌํ๋ฉด ์ค๊ฐ ์ํ๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋์ด ์นธ๋ฐ๋ณด๋์์ ์นด๋๋ ์ ์ปฌ๋ผ์ผ๋ก ์ด๋ํ๋๋ฐ ๋์๋ณด๋์ ๋ฌ์ฑํํฉ์ ์์ง ์ด์ ๊ฐ์ ํ์ํ๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฐ์. ๋จ๊ณ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ํ๋์ Store ์ก์ ํจ์(moveToNextStage) ๋ด๋ถ์์ ๋จ์ผ setState ํธ์ถ๋ก ์์์ (atomic)์ผ๋ก ์ผ๊ด ์ฒ๋ฆฌํ๋ ํธ๋์ญ์ ํจํด ์ ์ฉ. ํด๋น ์ก์ ํจ์ ๋ด์์ (1) ๊ธฐ์ ์ currentStage ํ๋๋ฅผ ์ ๋จ๊ณ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ, (2) stageHistory ๋ฐฐ์ด์ ์ด์ ๋จ๊ณ ์๋ฃ ๊ธฐ๋ก ์ถ๊ฐ, (3) ์ ๋จ๊ณ ์ง์ ๊ธฐ๋ก ์ถ๊ฐ, (4) activityMemos ๋ฐฐ์ด์ ๋จ๊ณ ๋ณ๊ฒฝ ๋ฉ๋ชจ ์๋ ์ถ๊ฐ, (5) ์ ๋จ๊ณ๊ฐ ์ต์ข ๋จ๊ณ("๋ฑ๋ก์๋ฃ")์ธ ๊ฒฝ์ฐ targetStatus.achieved ๊ฐ +1 ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ํ๋์ ์ํ ๊ฐ์ฒด๋ก ๊ตฌ์ฑํ์ฌ ํ ๋ฒ์ ๋ฐ์ํจ์ผ๋ก์จ ์ค๊ฐ ์ํ ์์ด ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ. ๋ํ ์ฐ๊ตฌ์๊ธฐ์ 7๋จ๊ณ ์นธ๋ฐ๋ณด๋๋ฅผ 7๊ฐ ์ปฌ๋ผ์ผ๋ก ๊ฐ๋ก ๋ฐฐ์นํ๋ฉด, ์ผ๋ฐ์ ์ธ ๋ฐ์คํฌํฑ ๋ชจ๋ํฐ(1920px ๋๋น)์์๋ ์ข์ธก ์ฌ์ด๋๋ฐ(280px)์ ์๋ธ ์ฌ์ด๋๋ฐ(200px)๋ฅผ ์ ์ธํ ์ฝํ ์ธ ์์ญ ๋๋น๊ฐ ์ฝ 1440px์ด๋ฏ๋ก ์ปฌ๋ผ๋น ๋๋น๊ฐ ์ฝ 200px๋ก ๋งค์ฐ ์ข์์ ธ ๊ธฐ์ ์นด๋ ๋ด ํ ์คํธ(๊ธฐ์ ๋ช , ๋ด๋น์๋ช , ๋ฉ๋ชจ ์์ฝ)๊ฐ ์๋ฆฌ๊ฑฐ๋ ์ฝ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฐ์. ๋ชจ๋ฐ์ผ ํ๊ฒฝ(768px ๋ฏธ๋ง)์์๋ 7๊ฐ ์ปฌ๋ผ์ด ํ ํ๋ฉด์ ํ์ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅ. ๋ฐ์ํ ๋ ์ด์์ ์ ๋ต์ ์ ์ฉํ์ฌ ๋ฐ์คํฌํฑ ํ๊ฒฝ์์๋ 7๊ฐ ์ปฌ๋ผ ์นธ๋ฐ๋ณด๋๋ฅผ ์ ์งํ๋ ์ฝํ ์ธ ์์ญ์ ๊ฐ๋ก ์คํฌ๋กค์ ํ์ฉํ๊ณ ๊ฐ ์ปฌ๋ผ์ ์ต์ ๋๋น 220px๋ฅผ ๋ณด์ฅํ์ฌ ์นด๋ ๋ด์ฉ์ด ์ ์ ํ ํ์๋๋๋ก ํ๊ณ , ํ๋ธ๋ฆฟ/๋ชจ๋ฐ์ผ ํ๊ฒฝ(768px ๋ฏธ๋ง)์์๋ ์นธ๋ฐ๋ณด๋ ๋์ 7๊ฐ ๋จ๊ณ๋ฅผ ์ธ๋ก๋ก ๋์ดํ๋ ์์ฝ๋์ธ(์ ํ/ํผ์นจ) ๋ฆฌ์คํธ ๋ทฐ๋ก ์๋ ์ ํ๋๋๋ก ๊ตฌํ. ์์ฝ๋์ธ ๊ฐ ํญ๋ชฉ์ ํค๋์ ๋จ๊ณ๋ช ๊ณผ ํด๋น ๋จ๊ณ ๊ธฐ์ ์ ๋ฑ์ง๋ฅผ ํ์ํ๊ณ , ํค๋ ํด๋ฆญ ์ ํด๋น ๋จ๊ณ์ ๊ธฐ์ ์นด๋ ๋ชฉ๋ก์ด ํผ์ณ์ง๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ฐ์ผ์์๋ ์ ์ฒด ํ์ดํ๋ผ์ธ ํํฉ ํ์ ๋ฐ ์์ธ ์กฐํ ๊ฐ๋ฅ. --- ## 7์ **์์ฑ์ผ์: 25.07.18** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๊ธฐ๊ด๋ณ(ITL/UAD) ์ธ๋ถ๊ด๋ฆฌ ์์คํ ๋ฐ ์ฌ์ ํฌํธํด๋ฆฌ์ค ํตํฉ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์ ์ฌ์ ์ ์ฐธ์ฌํ๋ ๊ธฐ๊ด๋ณ(ITL, UAD ๋ฑ) ์ธ๋ถ ๊ด๋ฆฌ ๊ธฐ๋ฅ๊ณผ ์ฌ์ ๊ด๋ฆฌ ์ ์ฉ ์ค์ฒฉ ๋ ์ด์์ ์์คํ ๊ฐ๋ฐ. ์ ์ฒด ํ๋ซํผ ๋ฉ์ธ ๋ ์ด์์์ ์ ์งํ๋ฉด์ ์ฌ์ ๊ด๋ฆฌ ์น์ ๋ด๋ถ์ ์ ์ฉ ์๋ธ ์ฌ์ด๋๋ฐ๋ฅผ ์ถ๊ฐํ๋ 2์ค ๋ ์ด์์ ๊ตฌ์กฐ ๊ตฌํ. ๊ฐ ์ฐธ์ฌ๊ธฐ๊ด์ด ๋ด๋นํ๋ ์ฐ๊ตฌ์๊ธฐ์ , ๊ธฐ์ ์ด์ ํํฉ์ ๊ธฐ๊ด๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ์กฐํํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๊ด๋ณ ๋์๋ณด๋ ๊ฐ๋ฐ. ๊ฐ๋ณ ์ฌ์ ํ๋ก์ ํธ์ ๋ฑ๋ก, ์์ , ์ญ์ ๊ธฐ๋ฅ ๋ฐ ์ฌ์ ๋ณ ์์ธ ์ ๋ณด(๊ฐ์/์ผ์ /์ฑ๊ณผ/์์ฐ) ํ๋ฉด์ ๊ตฌํํ์ฌ ์ ์ฒด ์ฌ์ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํตํฉ ๊ด๋ฆฌํ๋ ์์คํ ๊ตฌ์ถ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ์ฌ์ ๊ด๋ฆฌ ์ ์ฉ ์ค์ฒฉ ๋ ์ด์์(/business-management/innotech-2025/layout.tsx) ๊ฐ๋ฐ. ์ฌ์ฉ์๊ฐ ์ฌ์ ๊ด๋ฆฌ > ์ด๋ ธํ ํฌ2025 ๊ฒฝ๋ก(/business-management/innotech-2025/*)์ ์ง์ ํ๋ฉด, ์ ์ฒด ํ๋ซํผ์ ๋ฉ์ธ ์ฌ์ด๋๋ฐ(์ข์ธก ์ฒซ ๋ฒ์งธ)๋ ๊ทธ๋๋ก ์ ์ง๋๋ฉด์ ์ฝํ ์ธ ์์ญ์ ์ข์ธก์ ์ด๋ ธํ ํฌ ์ ์ฉ ์๋ธ ์ฌ์ด๋๋ฐ(์ข์ธก ๋ ๋ฒ์งธ)๊ฐ ์ถ๊ฐ๋ก ๋ํ๋๋ 2์ค ์ฌ์ด๋๋ฐ ๊ตฌ์กฐ ๊ตฌํ. ์๋ธ ์ฌ์ด๋๋ฐ ๋ฉ๋ด ๊ตฌ์ฑ: ๋์๋ณด๋(์ด๋ ธํ ํฌ ๋ฉ์ธ), ์ฐ๊ตฌ์๊ธฐ์ (์นธ๋ฐ๋ณด๋), ๊ธฐ์ ์ด์ (์นธ๋ฐ๋ณด๋), ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ (๋ณด๋), ์กฐ์ง๊ด๋ฆฌ(ITL/UAD ๊ธฐ๊ด๋ณ), ๋ณด๊ณ ์(์ฃผ๊ฐ/์๊ฐ). ์๋ธ ์ฌ์ด๋๋ฐ ๋๋น 200px ๊ณ ์ , ๋ฉ์ธ ์ฌ์ด๋๋ฐ๊ฐ ์ถ์ ๋ชจ๋์ผ ๋๋ ์๋ธ ์ฌ์ด๋๋ฐ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฒด ๋๋น ์ ์ง. ํ์ฌ URL pathname๊ณผ ์ผ์นํ๋ ์๋ธ ๋ฉ๋ด ํญ๋ชฉ์ ํ์ฑํ ์คํ์ผ(๋ฐฐ๊ฒฝ์, ์ข์ธก ์ธ๋์ผ์ดํฐ) ์ ์ฉ. - ๊ธฐ๊ด๋ณ ์กฐ์ง๊ด๋ฆฌ ํ๋ฉด 4์ข ๊ฐ๋ฐ. (1) ์ ์ฒด ์ฐธ์ฌ๊ธฐ๊ด ํํฉ ํ๋ฉด(/business-management/innotech-2025/organizations): ์ด๋ ธํ ํฌ ์ฌ์ ์ ์ฐธ์ฌํ๋ ๋ชจ๋ ๊ธฐ๊ด(ITL, UAD ๋ฑ) ๋ชฉ๋ก์ ์นด๋ ๊ทธ๋ฆฌ๋๋ก ๋ฐฐ์น, ๊ฐ ์นด๋์ ๊ธฐ๊ด ๋ก๊ณ /์์ด์ฝ, ๊ธฐ๊ด๋ช , ํด๋น ๊ธฐ๊ด์ด ๋ด๋นํ๋ ์ฐ๊ตฌ์๊ธฐ์ ์, ๋ด๋น ๊ธฐ์ ์ด์ ๊ฑด์, ๋ด๋น์ ์ด๋ฆ ๋ฐ ์ฐ๋ฝ์ฒ ํ์, ์นด๋ ํด๋ฆญ ์ ํด๋น ๊ธฐ๊ด ์์ธ ํ์ด์ง๋ก ์ด๋. (2) ITL ๊ธฐ๊ด ์์ธ ํ๋ฉด(/business-management/innotech-2025/organizations/itl): ITL ๊ธฐ๊ด์ด ๋ด๋นํ๋ ์ฐ๊ตฌ์๊ธฐ์ ๋ชฉ๋ก์ ํ ์ด๋ธ๋ก ํ์(๊ธฐ์ ๋ช , ํ์ฌ ๋จ๊ณ, ์ง์ ์ผ, ๋ด๋น์), ITL ๋ด๋น ๊ธฐ์ ์ด์ ๊ฑด ๋ชฉ๋ก ํ ์ด๋ธ(๊ธฐ์ ๋ช , ํ์ฌ ๋จ๊ณ, ์ถ์๊ธฐ๊ด), ITL์ ์๋ณ ์ค์ ์ถ์ด ์ฐจํธ, ITL ๋ด๋น์ ์ฐ๋ฝ์ฒ ์ ๋ณด. (3) UAD ๊ธฐ๊ด ์์ธ ํ๋ฉด(/business-management/innotech-2025/organizations/uad): UAD ๊ธฐ๊ด์ด ๋ด๋นํ๋ ์ฐ๊ตฌ์๊ธฐ์ ๋ฐ ๊ธฐ์ ์ด์ ์ ๋ณด๋ฅผ ITL๊ณผ ๋์ผํ ๊ตฌ์กฐ๋ก ํ์. (4) ๊ธฐ๊ด ๋์ ์์ธ ํ๋ฉด(/business-management/innotech-2025/organizations/[orgId]): URL์ ๊ธฐ๊ด ID ํ๋ผ๋ฏธํฐ์ ๋ฐ๋ผ ํด๋น ๊ธฐ๊ด์ ์์ธ ์ ๋ณด๋ฅผ ๋์ ์ผ๋ก ์กฐํํ์ฌ ํ์ํ๋ ๋ฒ์ฉ ์์ธ ํ์ด์ง. - ๊ธฐ๊ด๋ณ ๊ธฐ์ ์ด์ ๊ด๋ฆฌ ํ๋ฉด 2์ข ๊ฐ๋ฐ. (1) ITL ๊ธฐ์ ์ด์ ํํฉ(/business-management/innotech-2025/tech-transfer/itl): ์ ์ฒด ๊ธฐ์ ์ด์ ๋ฐ์ดํฐ ์ค ITL ๊ธฐ๊ด์ด ๋ด๋นํ๋ ๊ฑด๋ง ํํฐ๋งํ์ฌ ํ ์ด๋ธ๋ก ํ์, ๋จ๊ณ๋ณ ํํฉ ์์ฝ ์นด๋(์์ํ์ธ N๊ฑด, ๊ธฐ์ ํ์ N๊ฑด, ..., ๊ณ์ฝ์ฒด๊ฒฐ N๊ฑด), ์ต๊ทผ ํ๋ ๋ด์ญ ๋ฆฌ์คํธ. (2) UAD ๊ธฐ์ ์ด์ ํํฉ(/business-management/innotech-2025/tech-transfer/uad): UAD ๋ด๋น ๊ธฐ์ ์ด์ ๊ฑด์ ๋์ผํ ๊ตฌ์กฐ๋ก ํ์. - ์ฌ์ ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ. business-store(Zustand) ์ค๊ณ ๋ฐ ๊ตฌํ: ์ฌ์ ํ๋ก์ ํธ ๋ชฉ๋ก ๋ฐฐ์ด, ๊ฐ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ์ ๋ณด(์ฌ์ ID, ์ฌ์ ๋ช , ์ฌ์ ๊ธฐ๊ฐ ์์์ผ/์ข ๋ฃ์ผ, ์ด ์์ฐ, ์ํ: ์์ /์งํ์ค/์๋ฃ/๋ณด๋ฅ), CRUD ์ก์ (ํ๋ก์ ํธ ์ถ๊ฐ, ์ ๋ณด ์์ , ์ญ์ , ์ํ ๋ณ๊ฒฝ). ์ฌ์ ๋ชฉ๋ก ํ๋ฉด(/business-management): ๋ฑ๋ก๋ ์ฌ์ ํ๋ก์ ํธ๋ค์ ์นด๋ ๊ทธ๋ฆฌ๋๋ก ํ์, ๊ฐ ์นด๋์ ์ฌ์ ๋ช , ์ฌ์ ๊ธฐ๊ฐ, ์ด ์์ฐ, ์ํ ๋ฑ์ง(์์์ผ๋ก ๊ตฌ๋ถ), ์ ์ฒด ์งํ๋ฅ ํ๋ก๊ทธ๋ ์ค๋ฐ ํ์. ์๋จ์ ์ํ ํํฐ(์ ์ฒด/์์ /์งํ์ค/์๋ฃ/๋ณด๋ฅ) ํญ ์ ๊ณต. ์ฌ์ ์์ธ ํ๋ฉด(/business-management/[id]): ๋์ ๋ผ์ฐํ ์ผ๋ก ์ฌ์ ID์ ๋ฐ๋ผ ํด๋น ์ฌ์ ์ ์์ธ ์ ๋ณด ์กฐํ. ํญ ๊ธฐ๋ฐ ์์ธ ์ ๋ณด ๊ตฌ์ฑ: (1) ๊ฐ์ ํญ - ์ฌ์ ๊ธฐ๋ณธ์ ๋ณด, ์ฌ์ ๋ชฉํ, ๊ธฐ๋ํจ๊ณผ, ์ฐธ์ฌ ๊ธฐ๊ด ๋ชฉ๋ก; (2) ์ผ์ ํญ - ์ฃผ์ ๋ง์ผ์คํค์ ํ์๋ผ์ธ ํํ๋ก ์๊ฐํ, ๊ฐ ๋ง์ผ์คํค์ ์์ ์ผ/์๋ฃ์ผ/์ํ; (3) ์ฑ๊ณผ ํญ - ์ฌ์ KPI ๋ชฉํ ๋๋น ๋ฌ์ฑํํฉ ํ ์ด๋ธ ๋ฐ ์ฐจํธ; (4) ์์ฐ ํญ - ํด๋น ์ฌ์ ์ ์์ฐ ๋ฐฐ์ /์งํ ํํฉ ์์ฝ. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ฌ์ ๊ด๋ฆฌ(/business-management/innotech-2025/*) ๊ฒฝ๋ก ์ง์ ์ ์ด๋ ธํ ํฌ ์ ์ฉ ์๋ธ ์ฌ์ด๋๋ฐ๋ฅผ ์ฝํ ์ธ ์์ญ์ ์ถ๊ฐ๋ก ํ์ํด์ผ ํ๋๋ฐ, ๋จ์ํ LayoutClient ์ปดํฌ๋ํธ ๋ด๋ถ์์ pathname์ ๊ฒ์ฌํ์ฌ ์กฐ๊ฑด๋ถ๋ก ์๋ธ ์ฌ์ด๋๋ฐ๋ฅผ ๋ ๋๋งํ๋ฉด ๋ฉ์ธ ์ฌ์ด๋๋ฐ์ ์๋ธ ์ฌ์ด๋๋ฐ๊ฐ ๋์์ ๊ฐ์ ์์น์ ๋ํ๋๋ ค ํ๊ฑฐ๋, ๋ฉ์ธ ์ฌ์ด๋๋ฐ๊ฐ ์๋ธ ์ฌ์ด๋๋ฐ๋ก ์์ ํ ๋์ฒด๋์ด ์ ์ฒด ํ๋ซํผ ๋ค๋น๊ฒ์ด์ (๋ค๋ฅธ ๋ชจ๋๋ก ์ด๋ํ๋ ๋ฉ๋ด)์ ์์ด๋ฒ๋ฆฌ๋ ๋ ์ด์์ ๋ฌธ์ ๋ฐ์. Next.js App Router์ ์ค์ฒฉ ๋ ์ด์์(Nested Layouts) ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ ์ด์์ ๊ณ์ธต์ ๋ช ํํ ๋ถ๋ฆฌ: ์ต์์ ๋ฃจํธ ๋ ์ด์์(/app/layout.tsx)์์ ๋ฉ์ธ ์ฌ์ด๋๋ฐ์ ์ ์ฒด ํ๋ซํผ ๊ตฌ์กฐ๋ฅผ ๋ ๋๋งํ๊ณ , ์ด๋ ธํ ํฌ ๊ฒฝ๋ก์ ์ ์ฉ ๋ ์ด์์(/app/business-management/innotech-2025/layout.tsx)์์ children(์ค์ ํ์ด์ง ์ฝํ ์ธ )์ ์๋ธ ์ฌ์ด๋๋ฐ์ ํจ๊ป ๊ฐ๋ก๋ก ๋ฐฐ์นํ๋ flex ์ปจํ ์ด๋๋ก ๊ฐ์ธ๋ ๊ตฌ์กฐ๋ก ์ค๊ณ. ์ด๋ฅผ ํตํด ๋ฃจํธ ๋ ์ด์์์ ๋ฉ์ธ ์ฌ์ด๋๋ฐ๋ ํญ์ ๋ ๋๋ง๋๊ณ , ์ด๋ ธํ ํฌ ๊ฒฝ๋ก ์ง์ ์์๋ง ํด๋น ๋ ์ด์์์ด ์ถ๊ฐ๋ก ์ ์ฉ๋์ด ์ฝํ ์ธ ์์ญ ๋ด๋ถ์ ์๋ธ ์ฌ์ด๋๋ฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ํ๋๋ 2์ค ์ฌ์ด๋๋ฐ ๊ตฌ์กฐ ๊ตฌํ. ๋ํ ๋์ผํ ์ ์ฒด ๋ฐ์ดํฐ(์ฐ๊ตฌ์๊ธฐ์ ๋ฐฐ์ด, ๊ธฐ์ ์ด์ ๋ฐฐ์ด)์์ ITL ๋ด๋น ๊ฑด๊ณผ UAD ๋ด๋น ๊ฑด์ ๋ถ๋ฆฌํ์ฌ ์กฐํํ ๋, ๊ธฐ๊ด๋ณ ํ์ด์ง ์ง์ ์๋ง๋ค `researchCompanies.filter(c => c.assignedOrg === 'ITL')`์ฒ๋ผ ์ ์ฒด ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๋ด๋น๊ธฐ๊ด ํ๋๋ฅผ ๋น๊ตํ๋ ํํฐ๋ง ์ฐ์ฐ์ด ์คํ๋์ด, ๋ฐ์ดํฐ๊ฐ ์๋ฐฑ ๊ฑด ์ด์์ผ๋ก ๋์ด๋ ๊ฒฝ์ฐ ๊ธฐ๊ด๋ณ ํ์ด์ง ์ง์ ์ ๋์ ๋๋ ๋ ๋๋ง ์ง์ฐ(300ms ์ด์) ๋ฐ์. innotech-store ๋ด๋ถ์ ๊ธฐ๊ด๋ณ ์ธ๋ฑ์ค ๊ฐ์ฒด `orgIndex: { ITL: ['company-1', 'company-5', ...], UAD: ['company-2', 'company-3', ...] }`๋ฅผ ์ถ๊ฐํ์ฌ, ๋ฐ์ดํฐ ์ถ๊ฐ/์์ /์ญ์ ์ ํด๋น ๊ฑด์ ๋ด๋น๊ธฐ๊ด์ ๋ฐ๋ผ ์ธ๋ฑ์ค ๊ฐ์ฒด๋ ํจ๊ป ์ ๋ฐ์ดํธํ๊ณ , ๊ธฐ๊ด๋ณ ์กฐํ API์์๋ ์ธ๋ฑ์ค์์ ํด๋น ๊ธฐ๊ด์ ID ๋ชฉ๋ก์ O(1)์ผ๋ก ์ฆ์ ๊ฐ์ ธ์ ํด๋น ID์ ๋ฐ์ดํฐ๋ง ์กฐํํ๋๋ก ์ต์ ํ. O(n) ์ ์ฒด ๋ฐฐ์ด ํํฐ๋ง์ O(1) ์ธ๋ฑ์ค ์กฐํ + O(k) ํด๋น ๊ฑด๋ง ์กฐํ(k << n)๋ก ๋์ฒดํ์ฌ ๊ธฐ๊ด๋ณ ํ์ด์ง ์๋ต ์๊ฐ์ 50ms ์ด๋ด๋ก ๋ํญ ๊ฐ์ . --- ## 8์ **์์ฑ์ผ์: 25.08.22** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๊ธฐ๊ด๋ณ(ITL/UAD) ์ฃผ๊ฐ/์๊ฐ ๋ณด๊ณ ์ ๊ด๋ฆฌ ์์คํ ๋ฐ ๋ฐ์ดํฐ ์ค๋ ์ท ๊ธฐ๋ฐ ๋ณด๊ณ ์ ์๋ํ ์ฐ๊ตฌ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์ ์ฌ์ ์ ๊ธฐ๊ด๋ณ(ITL, UAD) ์ฃผ๊ฐ ๋ฐ ์๊ฐ ๋ณด๊ณ ์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์์ฑ, ์ ์ฅ, ๊ด๋ฆฌํ ์ ์๋ ๋ณด๊ณ ์ ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. ๋ณด๊ณ ์ ์ ํ(์ฃผ๊ฐ/์๊ฐ), ๊ธฐ๊ด, ๊ธฐ๊ฐ, ์์ฑ ์ํ ๋ฑ์ ๊ด๋ฆฌํ๋ ์ ์ฉ Zustand Store ์ค๊ณ. ๋ณด๊ณ ์ ๋ชจ๋ ์ ์ฉ ๋ ์ด์์๊ณผ ๊ธฐ๊ด๋ณ/์ฃผ๊ธฐ๋ณ ๋ค๋น๊ฒ์ด์ ๊ตฌ์กฐ ๊ตฌํ. ์ฌ์ ๊ด๋ฆฌ(innotech-store) ๋ฐ์ดํฐ์ ์ฐ๋ํ์ฌ ๋ณด๊ณ ์ ์ฝํ ์ธ ์ ์ค์ ์์น๋ฅผ ๋ฐ์๋์ผ๋ก ์ฑ์์ฃผ๋ ๊ธฐ๋ฅ ์ฐ๊ตฌ. ๋ณด๊ณ ์ ์์ฑ ์์ ์ ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ ์ท์ผ๋ก ์ ์ฅํ์ฌ ์์ฑ ์ค ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ํฅ๋ฐ์ง ์๊ณ , ์ถํ ๊ฐ์ฌ๋ ๊ฒ์ฆ ์์๋ ๋น์ ์๋ณธ ์์น๋ฅผ ํ์ธํ ์ ์๋ ๋ฐ์ดํฐ ๋ณด์กด ์ฒด๊ณ ๊ตฌ์ถ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๋ณด๊ณ ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์ง(report-store) ๊ฐ๋ฐ. Zustand ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ Store๋ก ๋ณด๊ณ ์ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ฝํ ์ธ ํตํฉ ๊ด๋ฆฌ. ๋ณด๊ณ ์ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ตฌ์กฐ: ๋ณด๊ณ ์ ID, ์ ํ(weekly/monthly), ๊ธฐ๊ด ์ฝ๋(ITL/UAD), ๋ณด๊ณ ๊ธฐ๊ฐ(์์์ผ~์ข ๋ฃ์ผ), ์์ฑ ์ํ(draft ์์ฑ์ค / completed ์๋ฃ / submitted ์ ์ถ), ์์ฑ์ ์ ๋ณด, ์ต์ด ์์ฑ์ผ์, ์ต์ข ์์ ์ผ์, ์ฝํ ์ธ ๊ฐ์ฒด(์น์ ๋ณ ํ ์คํธ ๋ด์ฉ ๋ฐ ์์น ๋ฐ์ดํฐ), ์ค๋ ์ท ๊ฐ์ฒด(์์ฑ ์์ ์์ ์ ์ฌ์ ๋ฐ์ดํฐ ์ ์ฒด ์ฌ๋ณธ). Store ์ก์ : ์ ๋ณด๊ณ ์ ์์ฑ(createReport), ์ฝํ ์ธ ์์ (updateContent), ์ํ ๋ณ๊ฒฝ(changeStatus), ์ค๋ ์ท ์บก์ฒ(captureSnapshot), ๋ณด๊ณ ์ ๋ชฉ๋ก ์กฐํ(getReportsByOrgAndType), ํน์ ๊ธฐ๊ฐ ๋ณด๊ณ ์ ์กฐํ(getReportByPeriod). - ๋ณด๊ณ ์ ์ ์ฉ ๋ ์ด์์(/reports/layout.tsx) ๋ฐ ๋ค๋น๊ฒ์ด์ ๊ฐ๋ฐ. ๋ณด๊ณ ์ ๋ชจ๋(/reports/*) ์ง์ ์ ์ฝํ ์ธ ์์ญ ์ข์ธก์ ๋ณด๊ณ ์ ์ ์ฉ ์ฌ์ด๋๋ฐ ํ์. ์ฌ์ด๋๋ฐ ๋ฉ๋ด ๊ตฌ์ฑ: ์ฃผ๊ฐ๋ณด๊ณ ์น์ (์ ์ฒด ํํฉ, ITL ์ฃผ๊ฐ๋ณด๊ณ , UAD ์ฃผ๊ฐ๋ณด๊ณ ), ์๊ฐ๋ณด๊ณ ์น์ (ITL ์๊ฐ๋ณด๊ณ , UAD ์๊ฐ๋ณด๊ณ ), ๋ณด๊ณ ์ ํํฉ(์ ์ฒด ๋ณด๊ณ ์ ๋ชฉ๋ก ๋ฐ ํต๊ณ). ํ์ฌ ์ ํ๋ ๋ณด๊ณ ์ ์ ํ/๊ธฐ๊ด ๋ฉ๋ด์ ํ์ฑํ ์คํ์ผ ์ ์ฉ. - ์ฃผ๊ฐ๋ณด๊ณ ์ ํ๋ฉด 3์ข ๊ฐ๋ฐ. (1) ์ ์ฒด ์ฃผ๊ฐ๋ณด๊ณ ํํฉ(/reports/weekly): ์ด๋ฒ ์ฃผ ITL/UAD ๋ณด๊ณ ์ ์ ์ถ ์ํ๋ฅผ ์นด๋๋ก ํ์(์ ์ถ์๋ฃ/๋ฏธ์ ์ถ/์์ฑ์ค), ์ต๊ทผ 4์ฃผ๊ฐ ์ ์ถ ์ด๋ ฅ ํ ์ด๋ธ(์ฃผ์ฐจ, ITL ์ํ, UAD ์ํ), ๋ฏธ์ ์ถ ๋ณด๊ณ ์์ ๋ํ ์๋ฆผ ๋ฉ์์ง. (2) ITL ์ฃผ๊ฐ๋ณด๊ณ (/reports/weekly/itl): ITL ๊ธฐ๊ด์ ํด๋น ์ฃผ์ฐจ ๋ณด๊ณ ์ ์์ฑ ๋ฐ ์กฐํ ํ๋ฉด. ๋ณด๊ณ ์ ์ฝํ ์ธ ์น์ ๊ตฌ์ฑ: [๊ธ์ฃผ ์ค์ ] ์ฐ๊ตฌ์๊ธฐ์ ์งํํํฉ(์ ๊ท N๊ฑด, ๋จ๊ณ์ด๋ N๊ฑด, ๋ฑ๋ก์๋ฃ N๊ฑด), ๊ธฐ์ ์ด์ ์งํํํฉ(์ ๊ท N๊ฑด, ๊ณ์ฝ์ฒด๊ฒฐ N๊ฑด), ์ฒจ๋จ๊ธฐ์ ๊ธฐ์ ํํฉ; [์ฃผ์ ํ๋] ๊ธฐ์ ์๋ด/๋ฏธํ , ๊ธฐ๊ด ๋ฐฉ๋ฌธ, ์ถ์ฅ, ์ธ๋ฏธ๋/๊ต์ก ๋ฑ ํ๋ ๋ด์ญ์ ๋ฆฌ์น ํ ์คํธ ์๋ํฐ๋ก ์ ๋ ฅ; [์ด์์ฌํญ] ๋ฐ์ํ ๋ฌธ์ ์ ๋ฐ ๋์/ํด๊ฒฐ ๋ฐฉ์ ๊ธฐ์ ; [์ฐจ์ฃผ ๊ณํ] ๋ค์ ์ฃผ ์์ ํ๋ ๊ณํ. ๊ฐ ์น์ ์ ์์น ํญ๋ชฉ ์์ "๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ" ๋ฒํผ์ ๋ฐฐ์นํ์ฌ ํด๋ฆญ ์ innotech-store์์ ํด๋น ์ฃผ๊ฐ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ฑ์์ฃผ๋ ๊ธฐ๋ฅ. (3) UAD ์ฃผ๊ฐ๋ณด๊ณ (/reports/weekly/uad): UAD ๊ธฐ๊ด์ ์ฃผ๊ฐ๋ณด๊ณ ์๋ฅผ ๋์ผํ ๊ตฌ์กฐ๋ก ์์ฑ/์กฐํ. - ์๊ฐ๋ณด๊ณ ์ ํ๋ฉด 2์ข ๊ฐ๋ฐ. (1) ITL ์๊ฐ๋ณด๊ณ (/reports/monthly/itl): ํด๋น ์์ ITL ์ค์ ์ข ํฉ ๋ณด๊ณ ์ ์์ฑ/์กฐํ ํ๋ฉด. ์ฝํ ์ธ ์น์ ๊ตฌ์ฑ: [์๊ฐ KPI ๋ฌ์ฑํํฉ] ์ฐ๊ตฌ์๊ธฐ์ /๊ธฐ์ ์ด์ /์ฒจ๋จ๊ธฐ์ ๋ชฉํ ๋๋น ์ค์ ์ ํ ์ด๋ธ ๋ฐ ๋ฌ์ฑ๋ฅ ์ฐจํธ๋ก ํ์; [์ฌ์ ๋ณ ์งํํํฉ] ์ฐ๊ตฌ์๊ธฐ์ /๊ธฐ์ ์ด์ /์ฒจ๋จ๊ธฐ์ ๊ฐ ์์ญ๋ณ ์๊ฐ ํ๋ ์์ฝ ๋ฐ ์ฃผ์ ์ฑ๊ณผ; [์์ฐ ์งํํํฉ] ์๊ฐ ์์ฐ ๋ฐฐ์ ๋๋น ์งํ ๊ธ์ก ํ ์ด๋ธ; [์ต์ ๊ณํ] ๋ค์ ๋ฌ ์ค์ ์ถ์ง ๊ณํ. (2) UAD ์๊ฐ๋ณด๊ณ (/reports/monthly/uad): UAD ๊ธฐ๊ด์ ์๊ฐ๋ณด๊ณ ์๋ฅผ ๋์ผ ๊ตฌ์กฐ๋ก ์์ฑ/์กฐํ. - ์ฌ์ ๊ด๋ฆฌ ๋ด๋ถ ๋ณด๊ณ ์ ํ๋ฉด 2์ข ๊ฐ๋ฐ. (1) ์ด๋ ธํ ํฌ ์ฃผ๊ฐ๋ณด๊ณ (/business-management/innotech-2025/reports/weekly): ์ฌ์ ๊ด๋ฆฌ ๋ฐ์ดํฐ(innotech-store)์์ ํด๋น ์ฃผ์ ๋ณ๋ ์ฌํญ(๋จ๊ณ ์ด๋ ๊ฑด, ์ ๊ท ๋ฑ๋ก ๊ฑด, ์๋ฃ ๊ฑด ๋ฑ)์ ์๋ ์ง๊ณํ์ฌ ๋ณด๊ณ ์ ์ด์์ ์์ฑํ๋ ๊ธฐ๋ฅ. (2) ์ด๋ ธํ ํฌ ์๊ฐ๋ณด๊ณ (/business-management/innotech-2025/reports/monthly): ํด๋น ์์ ์ฌ์ ๋ฐ์ดํฐ ์ค๋ ์ท์ ๊ธฐ๋ฐ์ผ๋ก ์๊ฐ ์ค์ ๋ณด๊ณ ์๋ฅผ ์๋ ์์ฑ. ๋ฉ์ธ ๋์๋ณด๋์ ๋ณด๊ณ ์ ์ ์ถํํฉ ์นด๋์ report-store ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ ์ฐ๋ํ์ฌ ์ ์ถ ์๋ฃ ์ ๋ น์ ์ฒดํฌ ํ์. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ฃผ๊ฐ๋ณด๊ณ ์๋ฅผ ๊ธ์์ผ ์ค์ ์ ์์ฑ ์์ํ์ฌ ๊ธ์์ผ ์คํ ๋๋ ์์์ผ์ ์ต์ข ์ ์ถํ๋ ์ ๋ฌด ํจํด์์, ์์ฑ ๊ธฐ๊ฐ ์ค์๋ ์ฌ์ ๊ด๋ฆฌ ๋ฐ์ดํฐ(์ฐ๊ตฌ์๊ธฐ์ ๋จ๊ณ ๋ณ๊ฒฝ, ๊ธฐ์ ์ด์ ์ ๊ท ๋ฑ๋ก, ๊ณ์ฝ ์ฒด๊ฒฐ ๋ฑ)๊ฐ ์ค์๊ฐ์ผ๋ก ๊ณ์ ๋ณ๊ฒฝ๋์ด, ๋ณด๊ณ ์ ์์ฑ ์์ ์์ ์ ํ์ธํ๋ ์ค์ ์์น์ ์ ์ถ ์ง์ ์ ํ์ธํ๋ ์์น๊ฐ ๋ฌ๋ผ์ง๋ ๋ฌธ์ ๋ฐ์. ๋ํ ์ ์ถ๋ ๋ณด๊ณ ์์ ์์น๋ฅผ ๋์ค์(๋ถ๊ธฐ ๊ฒํ , ์ฐ๊ฐ ๊ฐ์ฌ ๋ฑ) ๊ฒ์ฆํ๋ ค ํด๋ ๋น์ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋จ์์์ง ์์ ํด๋น ๋ณด๊ณ ์์ ์์น๊ฐ ์ ํํ๋์ง ํ์ธ ๋ถ๊ฐ. ๋ณด๊ณ ์ ์์ฑ ์์ ์ '์ค๋ ์ท ์ ์ฅ' ๋ฒํผ์ ํตํด ํด๋น ์์ ์ ์ฌ์ ๋ฐ์ดํฐ ์ ์ฒด(์ฐ๊ตฌ์๊ธฐ์ ๋ชฉ๋ก๊ณผ ๊ฐ ๊ธฐ์ ์ ํ์ฌ ๋จ๊ณ, ๊ธฐ์ ์ด์ ๋ชฉ๋ก๊ณผ ๊ฐ ๊ฑด์ ํ์ฌ ๋จ๊ณ, ์ฐ๊ฐ๋ชฉํ ๋ฌ์ฑํํฉ ๋ฑ)๋ฅผ JSON ํํ๋ก ์ง๋ ฌํํ์ฌ ๋ณด๊ณ ์ ๋ ์ฝ๋์ snapshot ํ๋์ ํจ๊ป ์ ์ฅํ๋ ์ค๋ ์ท ๊ธฐ๋ฅ ๊ตฌํ. ๋ณด๊ณ ์ ์ฝํ ์ธ ์ ํ์๋๋ ๋ชจ๋ ์์น๋ ์ค์๊ฐ Store ๋ฐ์ดํฐ๊ฐ ์๋ ์ ์ฅ๋ ์ค๋ ์ท ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐํ์ฌ ๋ ๋๋งํจ์ผ๋ก์จ, ์์ฑ ๊ธฐ๊ฐ ์ค ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ณด๊ณ ์ ๋ด์ฉ์๋ ์ํฅ ์์. ๋ณด๊ณ ์ ์ํ๊ฐ '์ ์ถ(submitted)'์ผ๋ก ๋ณ๊ฒฝ๋๋ฉด ํด๋น ๋ณด๊ณ ์์ ์ค๋ ์ท์ ์์ ๋ถ๊ฐ(Immutable)ํ๊ฒ ์ ๊ธ ์ฒ๋ฆฌํ์ฌ ์ถํ ๊ฐ์ฌ ์ ์ ์ถ ๋น์ ์๋ณธ ๋ฐ์ดํฐ ํ์ธ ๊ฐ๋ฅ. ๋ํ ITL๊ณผ UAD ๋ ๊ธฐ๊ด์ ๋ณด๊ณ ์ ์์์ด ๋๋ถ๋ถ(์ฝ 90%)์ ์น์ (๊ธ์ฃผ ์ค์ , ์ฃผ์ ํ๋, ์ด์์ฌํญ, ์ฐจ์ฃผ ๊ณํ)์์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง์ง๋ง, ๋๋จธ์ง 10%(๊ธฐ๊ด ๊ณ ์ ํนํ ์งํ, ๊ธฐ๊ด๋ณ ์์ ์ฐจ์ด)๊ฐ ๋ฌ๋ผ์, ๋ ๊ธฐ๊ด์ ๋ณด๊ณ ์ ์ปดํฌ๋ํธ๋ฅผ ์์ ํ ๋์ผํ๊ฒ ํตํฉํ๋ฉด ๊ธฐ๊ด ํน์ฑ์ ๋ฐ์ํ ์ ์๊ณ , ์์ ํ ๋ถ๋ฆฌ๋ 2๊ฐ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๋ฉด 90%์ ์ฝ๋๊ฐ ์ค๋ณต๋์ด ์ ์ง๋ณด์ ๋นํจ์จ ๋ฐ์. ๋ณด๊ณ ์ UI ์ปดํฌ๋ํธ๋ฅผ ๊ณตํต ์น์ ์ปดํฌ๋ํธ(CommonReportSections: ์ค์ ์์ฝ, ์ฃผ์ ํ๋, ์ด์์ฌํญ ์น์ )์ ๊ธฐ๊ด๋ณ ํ์ฅ ์น์ ์ปดํฌ๋ํธ(ITLExtensionSection, UADExtensionSection: ๊ธฐ๊ด ๊ณ ์ ๋ด์ฉ)๋ก ๋ถ๋ฆฌํ๋ ํฉ์ฑ(Composition) ํจํด ์ ์ฉ. ๊ธฐ๊ด๋ณ ๋ณด๊ณ ์ ํ์ด์ง ์ปดํฌ๋ํธ์์ ๊ณตํต ์น์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ณ , ๊ธฐ๊ด์ ๋ฐ๋ผ ํด๋น ํ์ฅ ์น์ ์ปดํฌ๋ํธ๋ง ์ถ๊ฐ๋ก ๋ ๋๋งํ์ฌ ์ฝ๋ ์ค๋ณต์ ์ต์ํํ๋ฉด์ ๊ธฐ๊ด๋ณ ํน์ฑ ๋ฐ์. --- ## 9์ **์์ฑ์ผ์: 25.09.19** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๊ธฐ์ ์ฌ์ ํ ์ง์ ๋ชจ๋ ๊ฐ๋ฐ (IP๊ฒ์, SMK AI ์์ฑ, ๊ธฐ์ ๊ฐ์นํ๊ฐ, ๊ณ์ฝ๊ด๋ฆฌ) ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์์ผํฐ์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ธ ๊ธฐ์ ์ฌ์ ํ ์ง์ ์ ๋ฌด๋ฅผ ์ํ 4๊ฐ ์๋ธ ๋ชจ๋ ํตํฉ ๊ฐ๋ฐ. (1) ํนํ์ฒญ ๋ฐ์ดํฐ ๋ฑ์ ํ์ฉํ์ฌ ๊ธฐ์ /ํนํ ์ ๋ณด๋ฅผ ๊ฒ์ํ ์ ์๋ IP(์ง์์ฌ์ฐ) ๊ฒ์ ์์คํ , (2) AI๋ฅผ ํ์ฉํ์ฌ ๊ธฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ํฌ์์/์์๊ธฐ์ ๋์ ๊ธฐ์ ์๊ฐ์(SMK: Smart Marketing Kit)๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋๊ตฌ, (3) ๊ธฐ์ ์ ๊ธฐ์ ์ฑ/์์ฅ์ฑ/์ฌ์ ์ฑ์ ์ ๋์ ์ผ๋ก ํ๊ฐํ์ฌ ๊ธฐ์ ๊ฐ์น๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ธฐ์ ๊ฐ์นํ๊ฐ ๋ชจ๋, (4) ์ฒด๊ฒฐ๋ ๊ธฐ์ ์ด์ ๊ณ์ฝ์ ํํฉ๊ณผ ๋ก์ดํฐ ์๋ฉ ๋ด์ญ์ ๊ด๋ฆฌํ๋ ๊ณ์ฝ๊ด๋ฆฌ ์์คํ ๊ตฌํ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๊ธฐ์ ์ฌ์ ํ ์ข ํฉ ๋์๋ณด๋ ํ๋ฉด(/commercialization) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ์ ๊ธฐ์ ์ฌ์ ํ ํต์ฌ ์งํ ์นด๋ 3์ข ๋ฐฐ์น: ๋ณด์ ๊ธฐ์ ์(๋ฑ๋ก๋ ์ด์ ๊ฐ๋ฅ ๊ธฐ์ ์ด N๊ฑด), ๊ธฐ์ ์ด์ ์๋ฃ ๊ฑด์(๊ณ์ฝ ์ฒด๊ฒฐ ์๋ฃ๋ ๊ธฐ์ ์ด์ N๊ฑด), ์ฐ๊ตฌ์๊ธฐ์ ์ค๋ฆฝ ์(๊ธฐ์ ์ด์ ์ ํตํด ์ค๋ฆฝ๋ ์ฐ๊ตฌ์๊ธฐ์ N๊ฐ). ํ๋ฉด ์ค์์ ๊ธฐ์ ์ด์ ์ถ์ด ์ฐจํธ(AreaChart: ์ต๊ทผ 12๊ฐ์ ์๋ณ ๊ธฐ์ ์ด์ ๊ณ์ฝ ์ฒด๊ฒฐ ๊ฑด์ ์ถ์ด)์ ๊ธฐ์ ๋ถ์ผ๋ณ ๋ถํฌ ์ฐจํธ(PieChart: IT/SW, BT/์๋ฃ, NT/์์ฌ, ET/์๋์ง, CT/๋ฌธํ ๋ฑ ๋ถ์ผ๋ณ ๋ณด์ ๊ธฐ์ ๋น์จ) ๋ฐฐ์น. ํ๋ฉด ํ๋จ์ 4๊ฐ ์๋ธ ๋ชจ๋(IP๊ฒ์, SMK์์ฑ, ๊ฐ์นํ๊ฐ, ๊ณ์ฝ๊ด๋ฆฌ)๋ก์ ๋ฐ๋ก๊ฐ๊ธฐ ์นด๋๋ฅผ ๊ฐ๋ก๋ก ๋ฐฐ์ด, ๊ฐ ์นด๋์ ๋ชจ๋ ์์ด์ฝ, ๋ชจ๋๋ช , ๊ฐ๋จํ ์ค๋ช ํ ์คํธ ํฌํจ. - IP ๊ฒ์ ํ๋ฉด(/commercialization/ip-search) ๊ฐ๋ฐ. ์๋จ ๊ฒ์ ์์ญ: ๊ฒ์ ๋ชจ๋ ์ ํ ๋ผ๋์ค(ํค์๋ ๊ฒ์ / ์ถ์์ธ ๊ฒ์ / ๋ฐ๋ช ์ ๊ฒ์ / ์ถ์๋ฒํธ ๊ฒ์), ๊ฒ์์ด ์ ๋ ฅ ํ๋, ๊ฒ์ ์คํ ๋ฒํผ. '๊ณ ๊ธ ๊ฒ์' ํ ๊ธ ๋ฒํผ ํด๋ฆญ ์ ํ์ฅ๋๋ ๊ณ ๊ธ ๊ฒ์ ํจ๋: IPC ๊ตญ์ ํนํ๋ถ๋ฅ ์ ํ(ํธ๋ฆฌ ํํ UI๋ก ์น์ (A~H) > ํด๋์ค > ์๋ธํด๋์ค ์์ผ๋ก drill-down ์ ํ), ์ถ์์ฐ๋ ๋ฒ์ ์ ํ(์์๋ ๋~์ข ๋ฃ๋ ๋ ์ด์ค ์ฌ๋ผ์ด๋), ๋ฑ๋ก ์ํ ํํฐ(์ถ์/๋ฑ๋ก/๊ฑฐ์ /์๋ฉธ/ํฌ๊ธฐ ๋ค์ค ์ ํ ์ฒดํฌ๋ฐ์ค). ๊ฒ์ ๊ฒฐ๊ณผ ์์ญ: ํ ์ด๋ธ ํํ๋ก ๊ฒฐ๊ณผ ๋ชฉ๋ก ํ์(์ปฌ๋ผ: ์ถ์๋ฒํธ, ๋ฐ๋ช ์ ๋ช ์นญ, ์ถ์์ธ, ์ถ์์ผ, IPC ๋ถ๋ฅ, ๋ฑ๋ก ์ํ), ํ ํด๋ฆญ ์ ํ๋ฉด ์ฐ์ธก์์ ์ฌ๋ผ์ด๋๋๋ ํนํ ์์ธ ์ ๋ณด ์ฌ์ด๋ ํจ๋ ์คํ(๋ฐ๋ช ์์ธ ๋ด์ฉ, ์ฒญ๊ตฌํญ, ์ถ์์ธ/๋ฐ๋ช ์ ์ ๋ณด, ํจ๋ฐ๋ฆฌ ํนํ ๋ฑ). ์ต๊ทผ ๊ฒ์ ์ด๋ ฅ ์๋ ์ ์ฅ ๊ธฐ๋ฅ: ์ต๊ทผ ๊ฒ์์ด 5๊ฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๊ณ ๊ฒ์์ฐฝ ํฌ์ปค์ค ์ ๋๋กญ๋ค์ด์ผ๋ก ํ์ํ์ฌ ์ํด๋ฆญ ์ฌ๊ฒ์ ์ง์. - SMK AI ์์ฑ ๋๊ตฌ ํ๋ฉด(/commercialization/smk) ๊ฐ๋ฐ. ํ๋ฉด ์ข์ธก์ ์ ๋ ฅ ํจ๋ ๋ฐฐ์น: ๊ธฐ์ ๋ช ์ ๋ ฅ ํ๋(ํ์), ๊ธฐ์ ๋ถ์ผ ์ ํ ๋๋กญ๋ค์ด(ํ์), ํต์ฌ ๊ธฐ์ ๋ด์ฉ ํ ์คํธ ์์ญ(ํ์, ๊ธฐ์ ์ ์๋ฆฌ์ ํน์ง์ ์์ธ ๊ธฐ์ ), ๊ด๋ จ ํนํ ๋ฒํธ ์ ๋ ฅ ํ๋(์ ํ), ์ ์ฉ ๊ฐ๋ฅ ๋ถ์ผ/์ฐ์ ํ๊ทธ ์ ๋ ฅ(์ ํ, ํ๊ทธ ํํ๋ก ๋ณต์ ์ ๋ ฅ), ๋ชฉํ ์์ฅ ๊ท๋ชจ ์ ๋ณด(์ ํ). ์ ๋ ฅ ์๋ฃ ํ 'AI ๊ธฐ์ ์๊ฐ์ ์์ฑ' ๋ฒํผ ํด๋ฆญ. ํ๋ฉด ์ฐ์ธก์ ์ถ๋ ฅ ํจ๋ ๋ฐฐ์น: AI๊ฐ ์์ฑํ ๊ธฐ์ ์๊ฐ์(SMK) ์ฝํ ์ธ ๋ฅผ ์น์ ๋ณ๋ก ํ์ - ๊ธฐ์ ๊ฐ์(1~2๋ฌธ๋จ์ผ๋ก ๊ธฐ์ ํต์ฌ ์์ฝ), ๊ธฐ์ ์ ์ฐ์์ฑ(๊ฒฝ์/๋์ฒด ๊ธฐ์ ๋๋น ์ฐจ๋ณ์ ๋ฐ ์ฅ์ ), ์์ฅ ๋ถ์(์ ์ฉ ์์ฅ ํํฉ, ์์ฅ ๊ท๋ชจ, ์ฑ์ฅ ์ ๋ง), ๊ฒฝ์ ๊ธฐ์ ๋น๊ต(ํ ํํ๋ก ์์ฌ ๊ธฐ์ vs ๊ฒฝ์ ๊ธฐ์ ๋น๊ต), ๊ธฐ๋ ํจ๊ณผ(๊ธฐ์ ๋์ ์ ์์ ํจ๊ณผ). ๊ฐ ์น์ ์ฐ์ธก์ '์ด ์น์ ๋ง ์ฌ์์ฑ' ๋ฒํผ์ ๋ฐฐ์นํ์ฌ ๋ถ๋ง์กฑ์ค๋ฌ์ด ์น์ ๋ง ์ ํ์ ์ผ๋ก AI ์ฌ์์ฑ ์์ฒญ ๊ฐ๋ฅ. ์์ฑ๋ ์ ์ฒด ๋ด์ฉ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ธ๋ผ์ธ ํธ์ง ๊ฐ๋ฅ. ์์ฑ๋ SMK๋ฅผ PDF ๋๋ Word ๋ฌธ์๋ก ๋ด๋ณด๋ด๊ธฐ ๋ฒํผ. - ๊ธฐ์ ๊ฐ์นํ๊ฐ ํ๋ฉด(/commercialization/valuation) ๊ฐ๋ฐ. 3๋จ๊ณ ์ ๋ ฅ ์์๋ ํํ: (1๋จ๊ณ) ๊ธฐ์ ์ฑ ํ๊ฐ - "ํด๋น ๊ธฐ์ ์ ์์ฑ๋๋ ์ด๋ ์์ค์ ๋๊น?", "ํนํ ๊ถ๋ฆฌ ๋ฒ์๊ฐ ๋์ต๋๊น?", "๊ธฐ์ ์๋ช ์ฃผ๊ธฐ์ ์ด๋ ๋จ๊ณ์ ๋๊น?" ๋ฑ ๊ธฐ์ ์ ์ธก๋ฉด์ ๋ํ ์ ์ฑ์ ์ง๋ฌธ 5๊ฐ์ 5์ ์ฒ๋(1: ๋งค์ฐ ๋ฎ์ ~ 5: ๋งค์ฐ ๋์)๋ก ์๋ต; (2๋จ๊ณ) ์์ฅ์ฑ ํ๊ฐ - "๋ชฉํ ์์ฅ ๊ท๋ชจ๋ ์ด๋ ์ ๋์ ๋๊น?", "์์ฅ ์ฑ์ฅ๋ฅ ์?", "๊ฒฝ์ ๊ฐ๋๋?" ๋ฑ ์์ฅ ์ธก๋ฉด ์ง๋ฌธ 5๊ฐ ์๋ต; (3๋จ๊ณ) ์ฌ์ ์ฑ ํ๊ฐ - "์์ต ๋ชจ๋ธ์ด ๋ช ํํฉ๋๊น?", "์ฌ์ ํ ์ญ๋(์ธ๋ ฅ, ์๊ธ)์ ์ถฉ๋ถํฉ๋๊น?", "์ถ๊ฐ ํฌ์ ํ์์ฑ์?" ๋ฑ ์ฌ์ ํ ์ธก๋ฉด ์ง๋ฌธ 5๊ฐ ์๋ต. ๋ชจ๋ ์ง๋ฌธ ์๋ต ์๋ฃ ํ 'ํ๊ฐ ๊ฒฐ๊ณผ ๋ณด๊ธฐ' ๋ฒํผ. ๊ฒฐ๊ณผ ํ๋ฉด: ๊ธฐ์ ์ฑ/์์ฅ์ฑ/์ฌ์ ์ฑ 3์ถ ์ ์๋ฅผ ๋ ์ด๋ ์ฐจํธ(Radar Chart)๋ก ์๊ฐํ, ์ข ํฉ ์ ์(100์ ๋ง์ ) ๋ฐ ๋ฑ๊ธ(A/B/C/D) ํ์, ๊ฐ ์ถ๋ณ ์์ธ ์ ์์ ๊ฐ์ /์ฝ์ ์ฝ๋ฉํธ, ํ๊ฐ ๊ฒฐ๊ณผ ๋ณด๊ณ ์ PDF ๋ด๋ณด๋ด๊ธฐ ๋ฒํผ. - ๊ธฐ์ ์ด์ ๊ณ์ฝ๊ด๋ฆฌ ํ๋ฉด(/technology-transfer/contract-management) ๊ฐ๋ฐ. ๊ณ์ฝ ๋ชฉ๋ก ํ ์ด๋ธ: ๊ณ์ฝ๋ฒํธ, ์ด์ ๊ธฐ์ ๋ช , ๊ธฐ์ ์ ๊ณต ๊ธฐ๊ด(์ถ์๊ธฐ๊ด), ๊ธฐ์ ๋์ ๊ธฐ์ , ๊ณ์ฝ ์ฒด๊ฒฐ์ผ, ๊ณ์ฝ ๊ธ์ก(์ ๊ธ๊ธ + ๊ฒฝ์๋ก์ดํฐ), ํ์ฌ ์ํ(ํ์์ค/์ฒด๊ฒฐ์๋ฃ/์ดํ์ค/์ข ๋ฃ) ์ปฌ๋ผ. ์๋จ์ ์ํ ํํฐ(์ ์ฒด/ํ์์ค/์ฒด๊ฒฐ์๋ฃ/์ดํ์ค/์ข ๋ฃ) ํญ, ๊ธฐ๊ฐ ํํฐ(๊ณ์ฝ์ผ ๊ธฐ์ค ์์์ผ~์ข ๋ฃ์ผ), ๊ฒ์(๊ธฐ์ ๋ช , ๊ธฐ๊ด๋ช ํค์๋). ํ ์ด๋ธ ํ ํด๋ฆญ ์ ๊ณ์ฝ ์์ธ ํ๋ฉด์ผ๋ก ์ด๋: ๊ณ์ฝ ๊ธฐ๋ณธ์ ๋ณด(๋น์ฌ์, ๊ณ์ฝ์ผ, ๊ณ์ฝ๊ธฐ๊ฐ), ๊ณ์ฝ ์กฐ๊ฑด(์ ๊ธ๊ธ ๊ธ์ก, ๊ฒฝ์ ๋ก์ดํฐ์จ, ์ต์ ๋ณด์ฅ ๋ก์ดํฐ), ๋ก์ดํฐ ์๋ฉ ์ด๋ ฅ ํ ์ด๋ธ(์๋ฉ์ผ, ์๋ฉ ๊ธ์ก, ์ฐ์ ๊ธฐ์ค, ๋น๊ณ ), ๊ณ์ฝ์ ์๋ณธ ํ์ผ ์ฒจ๋ถ ๋ฐ ๋ค์ด๋ก๋. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ IP ๊ฒ์์์ ํค์๋, ์ถ์์ธ, ๋ฐ๋ช ์, ์ถ์๋ฒํธ, IPC ๋ถ๋ฅ, ์ถ์์ฐ๋ ๋ฒ์, ๋ฑ๋ก ์ํ ๋ฑ ๋ค์ํ ์กฐ๊ฑด์ ์กฐํฉํ๋ฉด ๊ฒ์ ์ธํฐํ์ด์ค๊ฐ ๋ณต์กํด์ ธ ํนํ ๊ฒ์์ ์ต์ํ์ง ์์ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ณ , ํนํ IPC ๊ตญ์ ํนํ๋ถ๋ฅ ์ฝ๋(์: H04L 29/06)๋ ํนํ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋ฉด ์ฝ๋ ์๋ฏธ๋ฅผ ์ ์ ์์ด ์ง์ ์ ๋ ฅ์ด ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ UX ๋ฌธ์ ๋ฐ์. ๊ฒ์ ์ธํฐํ์ด์ค๋ฅผ 2๋จ๊ณ๋ก ๋ถ๋ฆฌํ์ฌ, ๊ธฐ๋ณธ ๊ฒ์ ๋ชจ๋์์๋ ๊ฒ์ ๋ชจ๋(ํค์๋/์ถ์์ธ/๋ฐ๋ช ์/์ถ์๋ฒํธ) ์ ํ๊ณผ ๊ฒ์์ด ์ ๋ ฅ๋ง์ผ๋ก ๋จ์ํ๊ฒ ๊ฒ์ํ๊ณ , '๊ณ ๊ธ ๊ฒ์' ๋ฒํผ ํด๋ฆญ ์์๋ง IPC, ์ฐ๋, ์ํ ๋ฑ ์ ์ฒด ์กฐ๊ฑด ํจ๋์ด ํผ์ณ์ง๋ ์ ์ง์ ๊ณต๊ฐ(Progressive Disclosure) ํจํด ์ ์ฉ. IPC ๋ถ๋ฅ ์ฝ๋๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ๋ ๋์ , ๊ณ์ธตํ ํธ๋ฆฌ UI๋ฅผ ์ ๊ณตํ์ฌ ์น์ (A: ์ํํ์ํ, B: ์ฒ๋ฆฌ์กฐ์, ..., H: ์ ๊ธฐ) ์ ํ โ ํด๋น ์น์ ์ ํด๋์ค ๋ชฉ๋ก ํ์ ๋ฐ ์ ํ โ ํด๋น ํด๋์ค์ ์๋ธํด๋์ค ๋ชฉ๋ก ํ์ ๋ฐ ์ ํ ์์ผ๋ก drill-down ๋ฐฉ์์ผ๋ก ์ ํํ๋๋ก ๊ตฌํ. ์ ํ๋ IPC ์ฝ๋๋ ์ฝ๋์ ํจ๊ป ์ฌ๋์ด ์ดํดํ ์ ์๋ ๋ช ์นญ(์: "H04L - ๋์งํธ ์ ๋ณด์ ์ ์ก")์ ํจ๊ป ํ์. ๋ํ ๊ธฐ์ ๊ฐ์นํ๊ฐ์์ ์ฌ์ฉ์๊ฐ ๊ธฐ์ ์ฑ/์์ฅ์ฑ/์ฌ์ ์ฑ ๊ฐ ์ถ์ ์ ์๋ฅผ 1~10์ ๋ฒ์์์ ์ฃผ๊ด์ ์ผ๋ก ์ง์ ์ ๋ ฅํ๋ฉด, ํ๊ฐ์์ ๊ฐ์ธ์ ์ฑํฅ(๋๊ด์ /๋น๊ด์ )์ ๋ฐ๋ผ ๋์ผํ ๊ธฐ์ ์ ๋ํด์๋ ์ ์ ํธ์ฐจ๊ฐ ํฌ๊ณ , ํ๊ฐ ๊ฒฐ๊ณผ์ ๊ฐ๊ด์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ด๋ณดํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฐ์. ๊ฐ ํ๊ฐ ์ถ์ ๋ํด ์ถ์์ ์ธ ์ ์ ๋์ ๊ตฌ์ฒด์ ์ธ ์ํฉ ๊ธฐ๋ฐ ์ ์ฑ์ ์ง๋ฌธ(์: "ํด๋น ๊ธฐ์ ์ ๋์ฒดํ ์ ์๋ ๊ฒฝ์ ๊ธฐ์ ์ด ์กด์ฌํฉ๋๊น?" โ 1: ๋ค์์ ๋์ฒด ๊ธฐ์ ์กด์ฌ, 2: ์ผ๋ถ ๋์ฒด ๊ฐ๋ฅ, 3: ์ ํ์ ๋์ฒด ๊ฐ๋ฅ, 4: ๋์ฒด ์ด๋ ค์, 5: ๋์ฒด ๋ถ๊ฐ๋ฅ)์ ์ ์ํ๊ณ , ์ฌ์ฉ์๋ ํ์ฌ ๊ธฐ์ ์ ๊ฐ๊ด์ ์ํฉ์ ๋ง๋ ์ ํ์ง๋ฅผ ๊ณ ๋ฅด๋๋ก ์ ๋. 15๊ฐ ์ง๋ฌธ(3๊ฐ ์ถ x 5๊ฐ ์ง๋ฌธ)์ ์๋ต ์กฐํฉ์ ๋ฐ๋ผ ์ฌ์ ์ ์๋ ๊ฐ์ค์น ๊ณต์์ผ๋ก ๊ฐ ์ถ ์ ์์ ์ข ํฉ ์ ์๋ฅผ ์๋ ์ฐ์ถํ์ฌ, ํ๊ฐ์์ ์ฃผ๊ด์ ํธํฅ์ ์ต์ํํ๊ณ ๋์ผ ์กฐ๊ฑด์ ๊ธฐ์ ์ด๋ฉด ๋๊ฐ ํ๊ฐํด๋ ์ ์ฌํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ๊ฐ๊ด์ฑ ํ๋ณด. --- ## 10์ **์์ฑ์ผ์: 25.10.17** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๋ณตํฉ ์์ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ ๋ฐ ์ธ๋ผ์ธ ํธ์ง ์คํ๋ ๋์ํธํ ์์ฐ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ ๊ธฐ์ ์ง์ ์ฌ์ ์ ์์ฐ ํธ์ฑ, ๋ฐฐ์ , ์งํ, ์์ก ๊ด๋ฆฌ, ๋ถ์์ ํตํฉ ๊ด๋ฆฌํ๋ ์์ฐ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. ๊ตญ๊ฐ R&D ์ฌ์ ์์ฐ ๊ตฌ์กฐ์ ๋ณต์ก์ฑ(์ฐ์ฐจ๋ณ ์ ๋ถ์ถ์ฐ๊ธ, ์ปจ์์์ ๊ธฐ๊ด๋ณ ๋ถ๋ด๊ธ, ์ง์ ๋น 9๊ฐ ์ธ๋ถ๋น๋ชฉ ๋ฑ)์ ๋ฐ์ํ ๋ค๊ณ์ธต ๋ณตํฉ ์์ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ. ํ์ ์์ ์ต์ํ ์์ ์ฒ๋ผ ํ ์ด๋ธ ์ ์ ํด๋ฆญํ์ฌ ์ฆ์ ์ซ์๋ฅผ ํธ์งํ ์ ์๋ ์ธ๋ผ์ธ ํธ์ง ์คํ๋ ๋์ํธํ ์์ฐ ํ ์ด๋ธ UI ์ฐ๊ตฌ ๋ฐ ๊ฐ๋ฐ. ์ฌ์ ๋ณ ์์ฐ ์์ธ, ์๋ณ ์งํ ์ถ์ด, ๋น๋ชฉ๋ณ ๊ตฌ์ฑ๋น ๋ฑ ์์ฐ ํํฉ์ ๋ค๊ฐ๋๋ก ๋ถ์ํ๋ ๋์๋ณด๋ ๊ฐ๋ฐ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๋ณตํฉ ์์ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ ๋ฐ ์ํ๊ด๋ฆฌ ์์ง(budget-store) ๊ฐ๋ฐ. 5๊ฐ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์์ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค๊ณ: (1๊ณ์ธต) BudgetItem - ์ต์์ ์ฌ์ ๋จ์, ์ฌ์ ID, ์ฌ์ ๋ช , ์ด ์์ฐ ๊ธ์ก, ์ผํฐ ๋ฐฐ์ ์ก, ์ผํฐ ์งํ์ก, ์ํ๊ธฐ๊ด ๋ฐฐ์ ์ก, ์ํ๊ธฐ๊ด ์งํ์ก. (2๊ณ์ธต) YearlyFunding - ์ฐ์ฐจ๋ณ ์ฌ์ ๊ตฌ์ฑ, 1์ฐจ๋ ๋~5์ฐจ๋ ๋ ๊ฐ๊ฐ์ ์ ๋ถ์ถ์ฐ๊ธ, ๊ธฐ๊ด๋ถ๋ด๊ธ(ํ๊ธ ๊ธฐ์ฌ๋ถ, ํ๋ฌผ ๊ธฐ์ฌ๋ถ). (3๊ณ์ธต) ConsortiumOrganization - ์ปจ์์์ ์ฐธ์ฌ๊ธฐ๊ด๋ณ ๋ถ๋ด, ๊ธฐ๊ด๋ช , ์ญํ (์ฃผ๊ด/์ฐธ์ฌ), ํ๊ธ ๋ถ๋ด๊ธ, ํ๋ฌผ ๋ถ๋ด๊ธ(์ธ๋ ฅ, ์ฅ๋น, ์์ค ๋ฑ). (4๊ณ์ธต) YearlyBudgetDetail - ์ฐ์ฐจ๋ณ ์ธ๋ถ ์์ฐ ๋ฐฐ๋ถ, ํด๋น ์ฐ์ฐจ ์ด์์ฐ, ์ ๋ถ์ถ์ฐ๊ธ, ๊ธฐ๊ด๋ถ๋ด๊ธ ํญ๋ชฉ๋ณ ๋ฐฐ๋ถ. (5๊ณ์ธต) DirectCostItem - ์ง์ ๋น 9๊ฐ ๋น๋ชฉ ์์ธ, ์ธ๊ฑด๋น(๋ด๋ถ ์ฐ๊ตฌ์), ํ์์ธ๊ฑด๋น(์ฐธ์ฌ ํ์), ์ฐ๊ตฌ์ฅ๋น๋น(๊ตฌ์ ๋น, ์์ฐจ๋น), ์ฐ๊ตฌ์ฌ๋ฃ๋น(์๋ชจํ, ์์ฝ ๋ฑ), ์ํ์ฐ๊ตฌ๋น(์ธ๋ถ ์ํ), ๊ตญ์ ๊ณต๋์ฐ๊ตฌ๋น(ํด์ธ ํ๋ ฅ), ์ฐ๊ตฌํ๋๋น(์ฌ๋น, ํ์๋น ๋ฑ), ์ฐ๊ตฌ์๋น(์ฑ๊ณผ๊ธ), ๊ธฐํ(๊ฐ์ ๋น ๋ฑ). Zustand Store ์ก์ : ์ฌ์ ๋ณ ์์ฐ ์ ์ฒด ์กฐํ, ํน์ ๋น๋ชฉ ๊ธ์ก ์์ (updateDirectCostItem), ์งํ ๋ด์ญ ๋ฑ๋ก(addExpenditure), ํฉ๊ณ ์๋ ๊ณ์ฐ(computed getter). - ์ธ๋ผ์ธ ํธ์ง ์ (EditableCell) ์ปดํฌ๋ํธ ๊ฐ๋ฐ. ํ์์(์ฝ๊ธฐ ๋ชจ๋): ์ ์ ๊ธ์ก์ ์ฒ ๋จ์ ์ฝค๋ง๊ฐ ์ ์ฉ๋ ํํ(์: 150,000,000)์ ์ฝ๊ธฐ ์ ์ฉ ํ ์คํธ๋ก ํ์, ๋ฐฐ๊ฒฝ์์ ํ ์ด๋ธ ๊ธฐ๋ณธ์. ์ ํด๋ฆญ ์(ํธ์ง ๋ชจ๋): ํด๋น ์ ์ด input ์์๋ก ๋ณํ๋๊ณ ํ ๋๋ฆฌ ์์์ด ๊ฐ์กฐ์์ผ๋ก ๋ณ๊ฒฝ๋์ด ํธ์ง ์ค์์ ์๊ฐ์ ์ผ๋ก ํ์, ํ์๋๋ ๊ฐ์ ์ฝค๋ง๊ฐ ์ ๊ฑฐ๋ ์์ ์ซ์(์: 150000000)๋ก ๋ณํํ์ฌ ์ซ์ ์์ ์ด ์ฉ์ดํ๋๋ก ํจ. ํธ์ง ์ค ์ค์๊ฐ ์ ๋ ฅ ๊ฒ์ฆ: ์ซ์(0-9)์ ๋ง์ด๋์ค(-), ์์์ (.) ์ธ์ ๋ฌธ์ ์ ๋ ฅ ์ ์ฆ์ ์ฐจ๋จ. Enter ํค ์ ๋ ฅ ๋๋ ๋ค๋ฅธ ์ ํด๋ฆญ์ผ๋ก ํฌ์ปค์ค ์์ ์: ํธ์ง ์๋ฃ ์ฒ๋ฆฌ, ์ ๋ ฅ๋ ์ซ์์ ์ฒ ๋จ์ ์ฝค๋ง๋ฅผ ์๋ ์ ์ฉํ์ฌ ํ์ ๋ชจ๋๋ก ๋ณต๊ท, ๋ณ๊ฒฝ๋ ๊ฐ์ budget-store์ ์ฆ์ ์ ๋ฐ์ดํธ(์๋ ์ ์ฅ). Esc ํค ์ ๋ ฅ ์: ํธ์ง ์ทจ์, ์๋ ๊ฐ์ผ๋ก ๋ณต์ํ๊ณ ํ์ ๋ชจ๋๋ก ๋ณต๊ท. - ์์ฐ ํํฉ ๋ฉ์ธ ํ๋ฉด(/budget) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ์ ์ ์ฒด ์์ฐ ์์ฝ ์ ๋ณด ์นด๋ ์์ญ: ์ด ๋ฐฐ์ ์์ฐ(์ ์ฒด ์ฌ์ ๋ฐฐ์ ์ก ํฉ๊ณ), ์ด ์งํ ์์ฐ(์ ์ฒด ์ฌ์ ์งํ์ก ํฉ๊ณ), ์ด ์์ก(๋ฐฐ์ -์งํ), ์ ์ฒด ์งํ๋ฅ (%)์ ์ํ ๊ฒ์ด์ง ์ฐจํธ๋ก ์๊ฐํ. ํ๋ฉด ์ค์์ ์ฌ์ ๋ณ ์์ฐ ํํฉ ํ ์ด๋ธ: ์ฌ์ ๋ช , ๋ฐฐ์ ์ก, ์งํ์ก, ์์ก, ์งํ๋ฅ ์ปฌ๋ผ. ์งํ๋ฅ ์ปฌ๋ผ์ ํด๋น ๊ฐ์ ๋ฐ๋ฅธ ์์ ํ๋ก๊ทธ๋ ์ค๋ฐ ํ์(50% ๋ฏธ๋ง: ๋นจ๊ฐ์ ๊ฒฝ๊ณ , 50~80%: ๋ ธ๋์ ์ฃผ์, 80% ์ด์: ๋ น์ ์ ์). ํ ์ด๋ธ ํ ํด๋ฆญ ์ ํด๋น ์ฌ์ ์ ์์ฐ ์์ธ ํ์ด์ง๋ก ์ด๋. - ์ฌ์ ๋ณ ์์ฐ ์์ธ ํ๋ฉด(/budget/[id]) ๊ฐ๋ฐ. ๋์ ๋ผ์ฐํ ์ผ๋ก ์ฌ์ ID์ ๋ฐ๋ผ ํด๋น ์ฌ์ ์ ์์ฐ ์์ธ ์ ๋ณด ์กฐํ ๋ฐ ํธ์ง. ํญ ๊ธฐ๋ฐ ์์ธ ์ ๋ณด ๊ตฌ์ฑ: (1) ์ฐ์ฐจ๋ณ ์์ฐ ํญ - 1์ฐจ๋ ๋~5์ฐจ๋ ๋ ์ ๋ถ์ถ์ฐ๊ธ/๊ธฐ๊ด๋ถ๋ด๊ธ(ํ๊ธ/ํ๋ฌผ) ํ ์ด๋ธ, ๋ชจ๋ ์ ์ธ๋ผ์ธ ํธ์ง ๊ฐ๋ฅ; (2) ์ธ๋ถ๋น๋ชฉ ํญ - ์ง์ ๋น 9๊ฐ ๋น๋ชฉ๋ณ ๋ฐฐ์ ์ก/์งํ์ก/์์ก ํ ์ด๋ธ, ๋ฐฐ์ ์ก ์ ์ธ๋ผ์ธ ํธ์ง ๊ฐ๋ฅ; (3) ์งํ ์ด๋ ฅ ํญ - ๊ฐ๋ณ ์งํ ๊ฑด ์ด๋ ฅ ํ ์ด๋ธ(์งํ์ผ, ๋น๋ชฉ, ๊ธ์ก, ์ ์/์ฌ์ , ์ฆ๋น์๋ฅ ์ฒจ๋ถ ์ฌ๋ถ), ์ ๊ท ์งํ ๋ฑ๋ก ๋ฒํผ; (4) ์ถ์ด ๋ถ์ ํญ - ์ฐ์ฐจ๋ณ ๋ฐฐ์ /์งํ ์ถ์ด๋ฅผ Bar+Line ๋ณตํฉ ์ฐจํธ๋ก ์๊ฐํ. - ์๋ณ ์์ฐ ๋ถ์ ํ๋ฉด(/budget/monthly-analysis) ๊ฐ๋ฐ. ํ๋ฉด ์๋จ์ ๋ถ์ ๋์ ์ ์ ํ ๋๋กญ๋ค์ด(์ต๊ทผ 12๊ฐ์ ๋ชฉ๋ก). ์ ํ๋ ์์ ์งํ ํํฉ ๋ถ์: ๋น๋ชฉ๋ณ ์งํ ๊ธ์ก ๊ตฌ์ฑ๋น ์ํ ์ฐจํธ(๊ฐ ๋น๋ชฉ์ด ํด๋น ์ ์งํ์ก์์ ์ฐจ์งํ๋ ๋น์จ), ์ต๊ทผ 12๊ฐ์ ์๋ณ ์งํ ์ถ์ด ๊บพ์์ ์ฐจํธ(์๋ณ ์งํ์ก ๋ณํ ์ถ์ด), ์ ์ ๋๋น ์ฆ๊ฐ ๋ถ์ ํ ์ด๋ธ(๋น๋ชฉ๋ณ๋ก ์ ์ ์งํ์ก, ๋น์ ์งํ์ก, ์ฆ๊ฐ์ก, ์ฆ๊ฐ๋ฅ ํ์). ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ง์ ๋น 9๊ฐ ๋น๋ชฉ ๊ธ์ก โ ํด๋น ์ฐ์ฐจ ๋น๋ชฉ ์๊ณ โ ์ฐ์ฐจ๋ณ ํฉ๊ณ โ ์ฌ์ ์ ์ฒด ํฉ๊ณ โ ํ๋ซํผ ์ด ํฉ๊ณ๋ก ์ด์ด์ง๋ 5๊ณ์ธต ํฉ์ฐ ๊ตฌ์กฐ์์, ์ฌ์ฉ์๊ฐ ์ตํ์ ๋น๋ชฉ(์: 3์ฐจ๋ ๋ ์ฐ๊ตฌ์ฌ๋ฃ๋น) ๊ธ์ก์ ์์ ํ๋ฉด ๊ทธ ์์ ๋ชจ๋ ๊ณ์ธต(3์ฐจ๋ ๋ ์ง์ ๋น ์๊ณ, 3์ฐจ๋ ๋ ์ด๊ณ, ํด๋น ์ฌ์ ์ด๊ณ, ์ ์ฒด ์์ฐ ์ด๊ณ)์ ํฉ๊ณ๊ฐ ์ฆ์ ์ฐ์์ ์ผ๋ก ์ฌ๊ณ์ฐ๋์ด์ผ ํ๋๋ฐ, ๊ฐ ๊ณ์ธต์ ํฉ๊ณ ๊ฐ์ Store์ ๊ฐ๋ณ ํ๋๋ก ์ ์ฅํ๊ณ ํ์ ๊ฐ ๋ณ๊ฒฝ ์ ์์ ํฉ๊ณ ํ๋๋ค์ ์ผ์ผ์ด ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ ์ด๋ ํ ๊ณ์ธต์ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฝ๋๊ธฐ ์ฝ๊ณ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ์ด ์ด๋ ค์ด ๊ตฌ์กฐ์ ๋ฌธ์ ๋ฐ์. ์ตํ์ ๋น๋ชฉ ๊ธ์ก๋ง ์๋ณธ ๋ฐ์ดํฐ(Source of Truth)๋ก ์ ์ฅํ๊ณ , ๋ชจ๋ ์์ ๊ณ์ธต์ ํฉ๊ณ(๋น๋ชฉ ์๊ณ, ์ฐ์ฐจ ํฉ๊ณ, ์ฌ์ ํฉ๊ณ, ์ ์ฒด ํฉ๊ณ)๋ ํ์ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ๋ ํ์ ๋ฐ์ดํฐ(Derived Data / Computed) ํจํด ์ ์ฉ. Zustand Store์ ํฉ๊ณ ๊ฐ์ ์ํ getter ํจ์๋ฅผ ์ ์ํ์ฌ, ์๋ฅผ ๋ค์ด `get yearly3Total() { return this.directCosts.year3.reduce((sum, item) => sum + item.amount, 0) }`์ฒ๋ผ ํ์ ๋ฐ์ดํฐ์ ํฉ์ ์ฆ์ ๊ณ์ฐํ์ฌ ๋ฐํ. ์ปดํฌ๋ํธ์์ ํฉ๊ณ๋ฅผ ์กฐํํ ๋ ์ด getter๋ฅผ ํธ์ถํ๋ฉด ํญ์ ์ต์ ํ์ ๋ฐ์ดํฐ ๊ธฐ์ค์ ์ ํํ ํฉ๊ณ๊ฐ ๋ฐํ๋์ด, ์ด๋ค ๋น๋ชฉ์ ์์ ํ๋ ๋ชจ๋ ์์ ํฉ๊ณ๊ฐ ์๋์ผ๋ก ์ผ๊ด์ฑ ์๊ฒ ๊ฐฑ์ ๋จ์ ๋ณด์ฅ. ๋ํ ์ธ๋ผ์ธ ํธ์ง ๋ชจ๋์์ ํ์ฌ ํ์๋ "150,000,000"(์ฒ ๋จ์ ์ฝค๋ง ํฌํจ) ํํ์ ์ซ์ ์ค๊ฐ์ ์ปค์๋ฅผ ๋๊ณ ์ซ์๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ๋ฉด, ์ฝค๋ง์ ์์น ๋๋ฌธ์ ์ปค์๊ฐ ์์๊ณผ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ํํ๊ฑฐ๋, ์ฝค๋ง๊ฐ ์ซ์๋ก ์ธ์๋์ด ์๋ชป๋ ๊ฐ์ด ์ ๋ ฅ๋๋ UX ๋ฌธ์ ๋ฐ์. ํธ์ง ๋ชจ๋์ ํ์ ๋ชจ๋๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํ๋ 2๋ชจ๋ ์ ํ ๋ฐฉ์ ๊ตฌํ: ์ ํด๋ฆญ์ผ๋ก ํธ์ง ๋ชจ๋ ์ง์ ์ ์ ์ฅ๋ ์๋ณธ ์ซ์ ๊ฐ(150000000)์ ์ฝค๋ง ์์ด ์์ ์ซ์๋ก ํ์ํ์ฌ ์ผ๋ฐ์ ์ธ ์ซ์ ์ ๋ ฅ์ฒ๋ผ ์์ฐ์ค๋ฝ๊ฒ ํธ์ง ๊ฐ๋ฅํ๊ฒ ํ๊ณ , Enter ํค ๋๋ ํฌ์ปค์ค ์์์ผ๋ก ํธ์ง ์๋ฃ ์ ์ ๋ ฅ๋ ์ซ์์ toLocaleString() ๋ฑ์ผ๋ก ์ฒ ๋จ์ ์ฝค๋ง๋ฅผ ์๋ ์ ์ฉํ ๋ฌธ์์ด(150,000,000)์ ํ์ ๋ชจ๋์์ ๋ ๋๋ง. --- ## 11์ **์์ฑ์ผ์: 25.11.21** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช ๋ฌธ์๊ด๋ฆฌ ์์คํ , ์ญํ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ ๊ทผ์ ์ด, ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์๊ฐ ์๋ฆผ ์์คํ ๊ฐ๋ฐ ### 2. ์ฐ๊ตฌ ๊ฐ์ A-WORKS ํ๋ซํผ์ ์ด์ ๊ด๋ฆฌ ๋ฐ ์ง์์ ์ํ 3๊ฐ ํต์ฌ ๋ชจ๋ ํตํฉ ๊ฐ๋ฐ. (1) ๊ณ์ฝ์, ์ ์์, ๋ณด๊ณ ์ ๋ฑ ์ ๋ฌด ๋ฌธ์๋ฅผ ๋ถ๋ฅ๋ณ๋ก ์ฒด๊ณ์ ์ผ๋ก ์ ์ฅํ๊ณ ๋ฒ์ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ ๋ฌธ์๊ด๋ฆฌ ์์คํ , (2) ์ฌ์ฉ์ ์ญํ (๊ด๋ฆฌ์/๋งค๋์ /์ผ๋ฐ ์ฌ์ฉ์)์ ๋ฐ๋ผ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ๋ด์ ๊ธฐ๋ฅ์ ์ฐจ๋ณํํ์ฌ ๋ณด์์ ๊ฐํํ๋ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ์ ์ด(RBAC) ์์คํ , (3) ์ ๋ฌด ๋ง๊ฐ์ผ, ๋ณด๊ณ ์ ์ ์ถ, ํ์ ์ผ์ , ์ ๊ฒ ์์ ๋ฑ ์ค์ ์ด๋ฒคํธ๋ฅผ ์ฐ์ ์์์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ์ค์๊ฐ์ผ๋ก ์๋ ค์ฃผ๋ ์๋ฆผ ์์คํ ๊ตฌํ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - ๋ฌธ์๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. document-store(Zustand) ์ค๊ณ ๋ฐ ๊ตฌํ: ๋ฌธ์ ID, ๋ฌธ์ ์ ๋ชฉ, ๋ถ๋ฅ ์ฝ๋(contract ๊ณ์ฝ์ / proposal ์ ์์ / report ๋ณด๊ณ ์ / other ๊ธฐํ), ํ์ผ ์ ๋ณด(ํ์ผ๋ช , ํ์ผ ํฌ๊ธฐ, MIME ํ์ , ์ ์ฅ ๊ฒฝ๋ก), ํ์ฌ ๋ฒ์ ๋ฒํธ, ์์ฑ์ ์ ๋ณด, ์ต์ด ์์ฑ์ผ์, ์ต์ข ์์ ์ผ์, ๋ฒ์ ์ด๋ ฅ ๋ฐฐ์ด(๊ฐ ๋ฒ์ ๋ณ ์์ ์ผ, ์์ ์, ๋ณ๊ฒฝ ๋ด์ฉ ์์ฝ, ํด๋น ๋ฒ์ ํ์ผ ๊ฒฝ๋ก). Store ์ก์ : ๋ฌธ์ ๋ฑ๋ก, ๋ฌธ์ ์ ๋ณด ์์ , ์ ๋ฒ์ ์ ๋ก๋, ๋ฌธ์ ์ญ์ , ๋ถ๋ฅ๋ณ/๊ธฐ๊ฐ๋ณ ์กฐํ. ๋ฌธ์ ๋ฉ์ธ ํ๋ฉด(/documents): ์ ์ฒด ๋ฌธ์ ํํฉ ์์ฝ ์นด๋(๋ถ๋ฅ๋ณ ๋ฌธ์ ์: ๊ณ์ฝ์ N๊ฑด, ์ ์์ N๊ฑด, ๋ณด๊ณ ์ N๊ฑด, ๊ธฐํ N๊ฑด), ์ต๊ทผ ๋ฑ๋ก/์์ ๋ ๋ฌธ์ 5๊ฑด ๋ฆฌ์คํธ. ๋ถ๋ฅ๋ณ ๋ฌธ์ ๋ชฉ๋ก ํ๋ฉด 3์ข (/documents/contracts ๊ณ์ฝ์, /documents/proposals ์ ์์, /documents/recent ์ต๊ทผ๋ฌธ์): ํ ์ด๋ธ ํํ๋ก ๋ฌธ์ ๋ชฉ๋ก ํ์(๋ฌธ์๋ช , ๋ฒ์ , ์์ฑ์, ์์ฑ์ผ, ํ์ผํฌ๊ธฐ, ๋ค์ด๋ก๋ ๋ฒํผ), ๊ฒ์(๋ฌธ์๋ช ํค์๋), ์ ๋ ฌ(์์ฑ์ผ์, ๋ฌธ์๋ช ์). ๋ฌธ์ ์์ธ ํ๋ฉด(/documents/[id]): ๋์ ๋ผ์ฐํ ์ผ๋ก ๋ฌธ์ ID์ ๋ฐ๋ฅธ ์์ธ ์ ๋ณด ์กฐํ, ๋ฌธ์ ๊ธฐ๋ณธ์ ๋ณด(์ ๋ชฉ, ๋ถ๋ฅ, ํ์ฌ ๋ฒ์ , ์์ฑ์, ์์ฑ์ผ), ๋ฒ์ ์ด๋ ฅ ํ์๋ผ์ธ ๋๋ ํ ์ด๋ธ(๋ฒ์ ๋ฒํธ, ์์ ์ผ์, ์์ ์, ๋ณ๊ฒฝ ๋ด์ฉ, ํด๋น ๋ฒ์ ๋ค์ด๋ก๋ ๋ฒํผ), ์ต์ ๋ฒ์ ํ์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(์ด๋ฏธ์ง/PDF์ธ ๊ฒฝ์ฐ) ๋๋ ๋ค์ด๋ก๋ ๋ฒํผ. - ์ฌ์ฉ์๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ. user-store(Zustand) ์ค๊ณ ๋ฐ ๊ตฌํ: ์ฌ์ฉ์ ID, ์ด๋ฆ, ์ด๋ฉ์ผ(๋ก๊ทธ์ธ ID), ์ญํ ์ฝ๋(admin ๊ด๋ฆฌ์ / manager ๋งค๋์ / user ์ผ๋ฐ์ฌ์ฉ์), ์์ ๋ถ์, ํ๋กํ ์ด๋ฏธ์ง URL, ๋ฉ๋ด๋ณ ์ ๊ทผ ๊ถํ ๋ฐฐ์ด. Store ์ก์ : ์ฌ์ฉ์ ๋ฑ๋ก, ์ ๋ณด ์์ , ์ญํ ๋ณ๊ฒฝ, ๊ถํ ์์ , ๋ชฉ๋ก ์กฐํ(์ญํ ๋ณ/๋ถ์๋ณ ํํฐ). ์ฌ์ฉ์ ๋ชฉ๋ก ํ๋ฉด(/users): ์ ์ฒด ์ฌ์ฉ์ ํ ์ด๋ธ(์ด๋ฆ, ์ด๋ฉ์ผ, ์ญํ ๋ฑ์ง, ๋ถ์, ๋ฑ๋ก์ผ), ๊ฒ์(์ด๋ฆ/์ด๋ฉ์ผ), ํํฐ(์ญํ ๋ณ, ๋ถ์๋ณ). ์ญํ ๋ณ ์กฐํ ํ๋ฉด(/users/by-role): ์ญํ (๊ด๋ฆฌ์ / ๋งค๋์ / ์ผ๋ฐ)๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ์์ฝ๋์ธ ํํ๋ก ํ์. ๋ถ์๋ณ ์กฐํ ํ๋ฉด(/users/by-department): ๋ถ์๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ํ์. ๊ถํ ์ค์ ํ๋ฉด(/users/permissions): ์ญํ ๋ณ ๋ฉ๋ด ์ ๊ทผ ๊ถํ์ ๋งคํธ๋ฆญ์ค ํ ์ด๋ธ๋ก ํ์ ๋ฐ ํธ์ง. ํ ์ด๋ธ ํ: ์ญํ (admin, manager, user), ํ ์ด๋ธ ์ด: ๊ฐ ๋ฉ๋ด(๋์๋ณด๋, ๊ธฐ์ ๊ด๋ฆฌ, ์ ๋ฌธ๊ฐ๊ด๋ฆฌ, ์ฌ์ ๊ด๋ฆฌ, ..., ์ฌ์ฉ์๊ด๋ฆฌ), ์ : ์ ๊ทผ ํ์ฉ ์ฌ๋ถ ์ฒดํฌ๋ฐ์ค. ์ฒดํฌ๋ฐ์ค ๋ณ๊ฒฝ ์ ํด๋น ์ญํ ์ ๊ถํ ์ฆ์ ์ ๋ฐ์ดํธ. ์ฌ์ฉ์ ์์ธ ํ๋ฉด(/users/[id]): ๋์ ๋ผ์ฐํ ์ผ๋ก ์ฌ์ฉ์ ์์ธ ์ ๋ณด ๋ฐ ํ๋ ์ด๋ ฅ(์ต๊ทผ ๋ก๊ทธ์ธ, ์ต๊ทผ ์์ ๋ด์ญ) ์กฐํ. ํ๋กํ ๊ด๋ฆฌ ํ๋ฉด 3์ข : ๋ด ์ ๋ณด(/profile) - ๋ด ํ๋กํ ์ ๋ณด ์กฐํ ๋ฐ ์์ (์ด๋ฆ, ์ด๋ฉ์ผ, ํ๋กํ ์ฌ์ง); ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ(/profile/password) - ํ์ฌ ๋น๋ฐ๋ฒํธ ํ์ธ ํ ์ ๋น๋ฐ๋ฒํธ ์ค์ ; ํ๊ฒฝ์ค์ (/profile/settings) - ์๋ฆผ ์์ ์ค์ (์ด๋ฉ์ผ/ํธ์/ํ๋ซํผ๋ด ์๋ฆผ on/off), ํ ๋ง ์ค์ (๋ผ์ดํธ/๋คํฌ/์์คํ ), ์ธ์ด ์ค์ . - ์๋ฆผ ์์คํ ๊ฐ๋ฐ. notification-store(Zustand) ์ค๊ณ ๋ฐ ๊ตฌํ: ์๋ฆผ ID, ์๋ฆผ ์ ํ ์ฝ๋(deadline ๋ง๊ฐ์๋ฐ / report ๋ณด๊ณ ์๊ด๋ จ / meeting ํ์์ผ์ / inspection ์ ๊ฒ์์ / alert ์ผ๋ฐ๊ฒฝ๊ณ ), ์๋ฆผ ์ ๋ชฉ, ์๋ฆผ ๋ด์ฉ ์์ธ, ์ฐ์ ์์(high ๋์ / medium ๋ณดํต / low ๋ฎ์), ๋ฐ์ ์ผ์, ์ฝ์ ์ฌ๋ถ(boolean), ๊ด๋ จ ํ์ด์ง ๋งํฌ URL. Store ์ก์ : ์๋ฆผ ์์ฑ, ์ฝ์ ์ฒ๋ฆฌ(markAsRead), ์ ์ฒด ์ฝ์ ์ฒ๋ฆฌ(markAllAsRead), ์๋ฆผ ์ญ์ , ์กฐํ(์ ํ๋ณ/์ฐ์ ์์๋ณ/์ฝ์์ํ๋ณ ํํฐ). ์๋ฆผ ํ๋ฉด(/notifications): ์ ์ฒด ์๋ฆผ ๋ชฉ๋ก์ ์นด๋ ๋๋ ๋ฆฌ์คํธ๋ก ํ์, ์๋จ์ ํํฐ ํญ(์ ์ฒด / ์ ํ๋ณ: ๋ง๊ฐ/๋ณด๊ณ ์/ํ์/์ ๊ฒ/๊ฒฝ๊ณ / ์ฐ์ ์์๋ณ: ๋์/๋ณดํต/๋ฎ์ / ์ฝ์์ํ: ์์ฝ์/์ฝ์), ์ ์ฒด ์ฝ์ ์ฒ๋ฆฌ ๋ฒํผ. ๊ฐ ์๋ฆผ ํญ๋ชฉ ํ์ ์ ๋ณด: ์ ํ๋ณ ์์ด์ฝ, ์๋ฆผ ์ ๋ชฉ(๊ตต์ ๊ธ์จ, ์์ฝ์์ผ ๊ฒฝ์ฐ ๋ ๊ตต๊ฒ), ๋ด์ฉ ์์ฝ(1์ค, ๋ง์ค์), ๋ฐ์ ์๊ฐ(n๋ถ ์ / n์๊ฐ ์ / n์ผ ์ ํ์), ์ฐ์ ์์์ ๋ฐ๋ฅธ ์ข์ธก ์์ ๋ฐ(high: ๋นจ๊ฐ์, medium: ๋ ธ๋์, low: ํ์). ์๋ฆผ ํญ๋ชฉ ํด๋ฆญ ์ ํด๋น ๊ด๋ จ ํ์ด์ง๋ก ์ด๋ ๋ฐ ์๋ ์ฝ์ ์ฒ๋ฆฌ. ์๋จ ๋ฉ๋ด(TopMenu) ์๋ฆผ ์์ด์ฝ ์์ญ: ๋ฒจ ์์ด์ฝ์ ๋ฏธ์ฝ์ ์๋ฆผ ์ ๋นจ๊ฐ์ ๋ฑ์ง ์ค์๊ฐ ํ์(notification-store์ unreadCount ๊ตฌ๋ ), ์์ด์ฝ ํด๋ฆญ ์ ์ต๊ทผ ์๋ฆผ 5๊ฑด์ ๋๋กญ๋ค์ด ํ์ค๋ฒ๋ก ํ์, ๋๋กญ๋ค์ด ํ๋จ์ "์ ์ฒด ์๋ฆผ ๋ณด๊ธฐ" ๋งํฌ(/notifications๋ก ์ด๋). ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ ์ฌ์ฉ์ ์ญํ (admin/manager/user)์ ๋ฐ๋ผ ์ฌ์ด๋๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐํ ๋ฉ๋ด ํญ๋ชฉ์ ๋ ๋๋งํ์ง ์๊ฑฐ๋ ๋นํ์ฑํ(disabled) ์ฒ๋ฆฌํ๋ UI ๋ ๋ฒจ ์ ๊ทผ์ ์ด๋ฅผ ๊ตฌํํ์ผ๋, ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ URL(์: ์ผ๋ฐ ์ฌ์ฉ์๊ฐ /users/permissions ์ ๋ ฅ)์ ์ง์ ์ ๋ ฅํ๋ฉด ์ฌ์ด๋๋ฐ ๋ฉ๋ด์๋ ๋ณด์ด์ง ์์ง๋ง ํด๋น ํ์ด์ง์ ์ ๊ทผํ ์ ์๋ ๋ณด์ ์ทจ์ฝ์ ๋ฐ์. UI ๋ ๋ฒจ์ ๋ฉ๋ด ์จ๊น/๋นํ์ฑํ์ ๋ณ๋๋ก, ๋ณดํธ๊ฐ ํ์ํ ๊ฐ ํ์ด์ง์ ๋ ์ด์์ ์ปดํฌ๋ํธ ๋๋ ํ์ด์ง ์ปดํฌ๋ํธ ์ต์๋จ์์ ํ์ฌ ๋ก๊ทธ์ธ ์ฌ์ฉ์์ ์ญํ ์ ๊ฒ์ฆํ๊ณ , ํด๋น ์ญํ ์ ํด๋น ํ์ด์ง ์ ๊ทผ ๊ถํ์ด ์์ผ๋ฉด ํ์ด์ง ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ์ง ์๊ณ "์ ๊ทผ ๊ถํ์ด ์์ต๋๋ค" ์๋ด ๋ฉ์์ง์ ํจ๊ป ๋์๋ณด๋ ๋๋ ์ด์ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ 2์ค ์ ๊ทผ์ ์ด ๊ฐ๋ ๋ก์ง ๊ตฌํ. ์ด๋ฅผ ํตํด URL ์ง์ ์ ๋ ฅ์ผ๋ก๋ ๊ถํ ์๋ ํ์ด์ง ์ ๊ทผ ์ฐจ๋จ. ๋ํ ์๋ฆผ ๋ฐ์ดํฐ๊ฐ ์๋จ ๋ฉ๋ด์ ์๋ฆผ ๋ฑ์ง(๋ฏธ์ฝ์ ์), ์๋ฆผ ๋๋กญ๋ค์ด(์ต๊ทผ 5๊ฑด), ์๋ฆผ ์ ์ฒด ๋ชฉ๋ก ํ์ด์ง(/notifications) ๋ฑ 3๊ณณ ์ด์์ UI์์ ๋์์ ์ฌ์ฉ๋๋๋ฐ, ์๋ฆผ ๋ชฉ๋ก ํ์ด์ง์์ ํน์ ์๋ฆผ์ ํด๋ฆญํ์ฌ ์ฝ์ ์ฒ๋ฆฌํ๋ฉด ํด๋น ํ์ด์ง์ UI๋ ์ฆ์ ๊ฐฑ์ ๋์ง๋ง ์๋จ ๋ฉ๋ด ๋ฑ์ง์ ๋ฏธ์ฝ์ ์๋ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ ๊น์ง ์ด์ ๊ฐ(๊ฐฑ์ ์ ๋ฏธ์ฝ์ ์)์ ์ ์งํ๋ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฌธ์ ๋ฐ์. notification-store๋ฅผ ํ๋ซํผ ์ ์ฒด์ ์๋ฆผ ๋ฐ์ดํฐ์ ๋ํ ๋จ์ผ ์ง์ค ์์ฒ(Single Source of Truth)์ผ๋ก ๋๊ณ , ์๋ฆผ ๋ฑ์ง ์ปดํฌ๋ํธ, ์๋ฆผ ๋๋กญ๋ค์ด ์ปดํฌ๋ํธ, ์๋ฆผ ๋ชฉ๋ก ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋์ผํ notification-store๋ฅผ ๊ตฌ๋ ํ๋๋ก ์ค๊ณ. ์ด๋ ํ๋ฉด์์๋ ์ฝ์ ์ฒ๋ฆฌ ์ก์ (markAsRead)์ ์คํํ๋ฉด Store ์ํ๊ฐ ๋ณ๊ฒฝ๋๊ณ , ์ด Store๋ฅผ ๊ตฌ๋ ํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ Zustand์ ๋ฐ์์ฑ์ ์ํด ์๋์ผ๋ก ๋ฆฌ๋ ๋๋ง๋์ด ๋๊ธฐํ. ํนํ ์๋จ ๋ฉ๋ด ๋ฑ์ง๋ `const unreadCount = useNotificationStore(state => state.notifications.filter(n => !n.isRead).length)` ์ ํ์๋ก ๋ฏธ์ฝ์ ์๋ง ๊ตฌ๋ ํ์ฌ ์๋ฆผ ๋ด์ฉ ๋ณ๊ฒฝ(์ ๋ชฉ, ๋ด์ฉ ์์ ๋ฑ)์๋ ๋ฐ์ํ์ง ์๊ณ ์ฝ์ ์ํ ๋ณ๊ฒฝ์๋ง ๋ฐ์ํ๋๋ก ์ต์ ํ. --- ## 12์ **์์ฑ์ผ์: 25.12.19** ### 1. ์ฐ๊ตฌ๊ณผ์ ๋ช A-WORKS ํ๋ซํผ ์ ์ฒด ๋ชจ๋ ํตํฉ ํ ์คํธ, ์ฑ๋ฅ ์ต์ ํ ๋ฐ ์ฐ๊ตฌ๊ฐ๋ฐ ๊ฒฐ๊ณผ ์ข ํฉ ### 2. ์ฐ๊ตฌ ๊ฐ์ 2025๋ 1์๋ถํฐ 11์๊น์ง ๊ฐ๋ฐ๋ A-WORKS ํ๋ซํผ์ ์ ์ฒด ๊ตฌ์ฑ์์(78๊ฐ ํ๋ฉด, 61๊ฐ ์ฌ์ฌ์ฉ ์ปดํฌ๋ํธ, 7๊ฐ Zustand ์ํ๊ด๋ฆฌ Store, 7๊ฐ ์ฃผ์ ๋ชจ๋)๋ฅผ ๋์์ผ๋ก ์ข ํฉ ํตํฉ ํ ์คํธ ์ํ. ๊ฐ๋ณ ๋ชจ๋ ๋จ์ ํ ์คํธ๋ฅผ ๋์ด ๋ชจ๋ ๊ฐ ๋ฐ์ดํฐ ์ฐ๋ ์ ํฉ์ฑ ๊ฒ์ฆ, ์ค์ ์ ๋ฌด ์๋๋ฆฌ์ค ๊ธฐ๋ฐ End-to-End ํ ์คํธ ์ค์. ์ด๊ธฐ ๋ก๋ฉ ์๋ ๊ฐ์ , ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ์ ๊ฑฐ ๋ฑ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํ ์ฑ๋ฅ ์ต์ ํ ์์ ์ํ. ๋ฐ์คํฌํฑ/ํ๋ธ๋ฆฟ/๋ชจ๋ฐ์ผ 3๊ฐ ํ๊ฒฝ ๋ฐ Chrome/Safari/Firefox/Edge 4๊ฐ ๋ธ๋ผ์ฐ์ ์์์ ๋ฐ์ํ ๋์์ธ ๋ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๊ฒ์ฆ. WCAG ์น ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ ๊ธฐ๋ฐ ์ ๊ทผ์ฑ ๊ฐ์ ์์ ์ํ. 12๊ฐ์๊ฐ์ ์ฐ๊ตฌ๊ฐ๋ฐ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉ ์ ๋ฆฌํ์ฌ ์ต์ข ์ฐ๊ตฌ๊ฐ๋ฐ ๋ณด๊ณ ์ ์์ฑ. ### 3. ์ฐ๊ตฌ ๋ด์ฉ - 78๊ฐ ํ๋ฉด ์ ์ ํตํฉ ํ ์คํธ ์ํ. ๊ฐ ํ๋ฉด์ ์ ์ ๋ ๋๋ง ํ์ธ(๋น ํ๋ฉด, ๋ ์ด์์ ๊นจ์ง, ์๋ฌ ๋ฉ์์ง ์์ด ์๋ํ ์ฝํ ์ธ ํ์), ๋ฐ์ดํฐ ๋ก๋ฉ ํ์ธ(Store์์ ๋ฐ์ดํฐ ์กฐํ ๋ฐ UI ๋ฐ์), ์ฌ์ฉ์ ์ธํฐ๋์ ๋์ ํ์ธ(๋ฒํผ ํด๋ฆญ, ํผ ์ ๋ ฅ, ๋๋กญ๋ค์ด ์ ํ, ํญ ์ ํ, ๋ชจ๋ฌ/์ฌ์ด๋ํจ๋ ์คํ/๋ซ๊ธฐ, ๋ค๋น๊ฒ์ด์ ์ด๋ ๋ฑ). ๋ชจ๋ ๊ฐ ๋ฐ์ดํฐ ์ฐ๋ ์ ํฉ์ฑ ํ ์คํธ: ์ฌ์ ๊ด๋ฆฌ(innotech-store)์์ ์ฐ๊ตฌ์๊ธฐ์ ๋จ๊ณ๋ฅผ "๋ฑ๋ก์๋ฃ"๋ก ๋ณ๊ฒฝ โ ๋ฉ์ธ ๋์๋ณด๋์ ์ฐ๊ตฌ์๊ธฐ์ KPI ์นด๋ ๋ฌ์ฑ ์ ์ฆ์ +1 ๋ฐ์ โ ๋ณด๊ณ ์ ๋ชจ๋์์ ๋ฐ์ดํฐ ์ค๋ ์ท ์ ํด๋น ๋ณ๊ฒฝ ํฌํจ โ ์์ฐ ๋ชจ๋์ ํด๋น ์ฌ์ ์งํ ํํฉ๊ณผ ์ ํฉ์ฑ ์ ์ง. 6๊ฐ ์นดํ ๊ณ ๋ฆฌ ๊ฐ ๋ค๋น๊ฒ์ด์ ์ ํ ํ ์คํธ: ๊ฐ ์นดํ ๊ณ ๋ฆฌ(ํ, ์ฌ์ ๊ด๋ฆฌ, ๊ธฐ์ ๊ด๋ฆฌ, ๊ธฐ์ ์ฌ์ ํ, ๋ณด๊ณ ์, ์ด์๊ด๋ฆฌ) ๊ฐ ์ด๋ ์ ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํธ๋ฆฌ, ์๋จ ๋ฉ๋ด ๋ฒํผ, ๋นต๊ฐ๋ฃจ ๋ค๋น๊ฒ์ด์ ์ด ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ๋ง๊ฒ ์ ํํ ์ ํ๋๋์ง ํ์ธ. ๋์ ๋ผ์ฐํ ([id]) ํ์ด์ง์ ์ ํจ/๋ฌดํจ ID ์ฒ๋ฆฌ ํ ์คํธ: ์กด์ฌํ๋ ID ์ ๊ทผ ์ ์ ์ ๋ฐ์ดํฐ ํ์, ์กด์ฌํ์ง ์๋ ID ์ ๊ทผ ์ ์๋ฌ ์๋ด ํ๋ฉด ํ์ ํ์ธ. - ์ฑ๋ฅ ์ต์ ํ ์ํ. (1) Skeleton ๋ก๋ฉ UI 15์ข ์ ์ฒด ํ๋ฉด ์ ์ฉ: ๋ฐ์ดํฐ ๋ก๋ฉ ๋๊ธฐ ์ค ํ์ ํ๋ ์ด์คํ๋๋ฅผ ๋จผ์ ํ์ํ์ฌ ๋ ์ด์์ ๊ณจ๊ฒฉ ์ฆ์ ํ์ , Layout Shift ๋ฐฉ์ง ๋ฐ ์ฌ์ฉ์ ์ฒด๊ฐ ๋ก๋ฉ ์๋ ๊ฐ์ . (2) Zustand Store ๊ตฌ๋ ์ต์ ํ: 7๊ฐ Store(innotech, company, expert, budget, report, document, notification, user) ์ ์ฒด์ ์ ํ์(Selector) ํจํด ์ ์ฉ, ์ปดํฌ๋ํธ๊ฐ ํ์ํ ๋ฐ์ดํฐ ์กฐ๊ฐ๋ง ๊ตฌ๋ ํ์ฌ ๊ด๋ จ ์๋ Store ๋ณ๊ฒฝ ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ์ ๊ฑฐ. (3) ์ฝ๋ ์คํ๋ฆฌํ ๋ฐ ๋์ ์ํฌํธ: 7๊ฐ ์ฃผ์ ๋ชจ๋์ Next.js dynamic()์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ด๊ธฐ ๋ฒ๋ค์ ๋ชจ๋ ์ฝ๋๋ฅผ ํฌํจํ์ง ์๊ณ , ํด๋น ๋ชจ๋ ๊ฒฝ๋ก ์ง์ ์์๋ง ๊ด๋ จ ์ฝ๋๋ฅผ ๋ก๋ฉํ๋๋ก ์ต์ ํ, ์ด๊ธฐ ๋ฒ๋ค ์ฌ์ด์ฆ ์ฝ 40% ๊ฐ์. (4) ์ด๋ฏธ์ง ์ต์ ํ: Next.js Image ์ปดํฌ๋ํธ ํ์ฉ์ผ๋ก ์๋ ์ด๋ฏธ์ง ์ต์ ํ(WebP ๋ณํ, ํฌ๊ธฐ ์กฐ์ ), ๋ทฐํฌํธ ๋ฐ ์ด๋ฏธ์ง lazy loading ์ ์ฉ. - ๋ฐ์ํ ๋์์ธ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํ ์คํธ ์ํ. 3๊ฐ ๋ํ ํด์๋(๋ฐ์คํฌํฑ 1920x1080, ํ๋ธ๋ฆฟ 768x1024, ๋ชจ๋ฐ์ผ 375x667)์์ ์ ์ฒด 78๊ฐ ํ๋ฉด์ ๋ ์ด์์ ์ ์ ํ์ ํ์ธ: ์ฌ์ด๋๋ฐ ์ถ์/์จ๊น ๋์, ๊ทธ๋ฆฌ๋ ์ปฌ๋ผ ์ ๋ณ๊ฒฝ, ํฐํธ ํฌ๊ธฐ ๊ฐ๋ ์ฑ, ๋ฒํผ/๋งํฌ ํฐ์น ์์ญ ์ ์ ์ฑ(๋ชจ๋ฐ์ผ์์ ์ต์ 44x44px). 4๊ฐ ์ฃผ์ ๋ธ๋ผ์ฐ์ (Chrome, Safari, Firefox, Microsoft Edge) ๊ฐ ์ต์ ๋ฒ์ ์์ ๋ ๋๋ง ์ผ๊ด์ฑ ํ์ธ: CSS Flexbox/Grid ๋์, JavaScript ES6+ ๊ธฐ๋ฅ ๋์, CSS ๋ณ์(Custom Properties) ๋์, ์ ๋๋ฉ์ด์ /ํธ๋์ง์ ๋ถ๋๋ฌ์. ๋ฐ๊ฒฌ๋ ํธํ์ฑ ์ด์(์: Safari์์ ํน์ CSS gap ์์ฑ ๋ฏธ์ง์) ์๋ณ ๋ฐ ๋์ฒด ์คํ์ผ ์ ์ฉ์ผ๋ก ํด๊ฒฐ. - ์น ์ ๊ทผ์ฑ ๊ฐ์ ์ํ. ARIA(Accessible Rich Internet Applications) ์์ฑ ์ ๊ฒ: ๋ฒํผ์ ๋ช ํํ aria-label, ๋ชจ๋ฌ/๋ค์ด์ผ๋ก๊ทธ์ aria-modal ๋ฐ ์ญํ (role="dialog"), ํผ ์ ๋ ฅ ํ๋์ ๋ ์ด๋ธ ์ฐ๊ฒฐ(htmlFor-id ๋๋ aria-labelledby), ๋ก๋ฉ ์ํ์ aria-busy ์ ์ฉ. ์๋งจํฑ HTML ๊ฒ์ฆ: ํ์ด์ง ๊ตฌ์กฐ์ header, nav, main, aside, section, article, footer ๋ฑ ์๋งจํฑ ํ๊ทธ ์ ์ ์ฌ์ฉ, ์ ๋ชฉ ๊ณ์ธต(h1~h6) ์ฌ๋ฐ๋ฅธ ์์ ์ ์ง. ํค๋ณด๋ ๋ค๋น๊ฒ์ด์ ํ ์คํธ: Tab ํค๋ก ๋ชจ๋ ์ธํฐ๋ํฐ๋ธ ์์(๋งํฌ, ๋ฒํผ, ํผ ํ๋, ๋ฉ๋ด ํญ๋ชฉ) ์์ฐจ ์ ๊ทผ ๊ฐ๋ฅ, Enter/Space ํค๋ก ํ์ฑํ ๊ฐ๋ฅ, ๋ชจ๋ฌ ์คํ ์ ํฌ์ปค์ค ํธ๋ฉ(๋ชจ๋ฌ ๋ด๋ถ์์๋ง Tab ์ด๋) ๋์ ํ์ธ. ์์ ๋๋น ๊ฒ์ฆ: ํ ์คํธ์ ๋ฐฐ๊ฒฝ ๊ฐ ์์ ๋๋น์จ WCAG AA ๊ธฐ์ค(์ผ๋ฐ ํ ์คํธ 4.5:1, ๋ํ ํ ์คํธ 3:1) ์ถฉ์กฑ ํ์ธ, ์์๋ง์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์์(์: ์ํ ํ์)์ ์์ด์ฝ ๋๋ ํ ์คํธ ๋ ์ด๋ธ ๋ณํ. - ์ฐ๊ตฌ๊ฐ๋ฐ ๊ฒฐ๊ณผ ์ข ํฉ ๋ฐ ์ต์ข ๋ณด๊ณ ์ ์์ฑ. 12๊ฐ์๊ฐ(1์~12์) ์๋ณ ์ฐ๊ตฌ๊ฐ๋ฐ ๋ด์ฉ, ๊ฐ๋ฐํ ํ๋ฉด/๊ธฐ๋ฅ/์ปดํฌ๋ํธ, ํด๊ฒฐํ ๊ธฐ์ ์ ๋์ ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌ. ๊ฐ๋ฐ๋ A-WORKS ํ๋ซํผ ์ต์ข ์คํ ๋ฌธ์ํ: 78๊ฐ ํ๋ฉด, 61๊ฐ ์ปดํฌ๋ํธ, 7๊ฐ Zustand Store, 7๊ฐ ์ฃผ์ ๋ชจ๋, 7์ข ๋ฐ์ดํฐ ์๊ฐํ ์ฐจํธ, 15์ข Skeleton ๋ก๋ฉ UI. ํฅํ ํ๋ซํผ ๊ณ ๋ํ ๋ฐฉํฅ ์ ์ธ: ์ค์ ๋ฐฑ์๋ ์๋ฒ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋, ์ฌ์ฉ์ ์ธ์ฆ/์ธ๊ฐ ์์คํ ๊ณ ๋ํ, AI ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์์ธก ๊ธฐ๋ฅ, ๋ชจ๋ฐ์ผ ์ฑ(React Native ๋๋ PWA) ํ์ฅ ๋ฑ. ### 4. ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์ 78๊ฐ ํ๋ฉด ๋ฐ 7๊ฐ Store๋ฅผ ๋์์ผ๋ก ํ ํตํฉ ํ ์คํธ ๊ณผ์ ์์, innotech-store(์ฌ์ ๊ด๋ฆฌ ๋ฐ์ดํฐ)์ report-store(๋ณด๊ณ ์ ๋ฐ์ดํฐ)๊ฐ ์ํธ ์ฐธ์กฐํ๋ ์ํ ์์กด์ฑ(Circular Dependency) ๊ตฌ์กฐ ๋ฐ๊ฒฌ. innotech-store์์ ๋ณด๊ณ ์ ์ ์ถ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด report-store์ ์ํ๋ฅผ ์ฐธ์กฐํ๊ณ , report-store์์ ๋ณด๊ณ ์ ์์ฑ ์ ์ฌ์ ๋ฐ์ดํฐ ์ค๋ ์ท์ ์ํด innotech-store์ ์ํ๋ฅผ ์ฐธ์กฐํ๋ ๊ตฌ์กฐ์์, ์์ชฝ Store๊ฐ ๊ฑฐ์ ๋์์ ์ ๋ฐ์ดํธ๋๋ ํน์ ์๋๋ฆฌ์ค(์: ์ฌ์ ๋จ๊ณ ๋ณ๊ฒฝ ์งํ ๋ณด๊ณ ์ ์๋ ์์ฑ ํธ๋ฆฌ๊ฑฐ)์์ Store A ์ ๋ฐ์ดํธ โ Store B ๊ตฌ๋ ์ฝ๋ฐฑ ์คํ โ Store B ์ ๋ฐ์ดํธ โ Store A ๊ตฌ๋ ์ฝ๋ฐฑ ์คํ โ ... ๋ฌดํ ๋ฃจํ๊ฐ ๋ฐ์ํ์ฌ ๋ธ๋ผ์ฐ์ ํญ์ด ์๋ต ์์ ์ํ๊ฐ ๋๋ ์น๋ช ์ ๋ฒ๊ทธ ๋ฐ์. Store ๊ฐ ์ง์ ์ฐธ์กฐ(Store A ๋ด๋ถ์์ useStoreB.getState() ํธ์ถ)๋ฅผ ์ ๋ฉด ์ ๊ฑฐํ๊ณ , ์ฌ๋ฌ Store์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง ์ปดํฌ๋ํธ ๋ ๋ฒจ์์ ๊ฐ Store๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ตฌ๋ (useStoreA(), useStoreB())ํ ํ, ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ก์ปฌ ๋ก์ง์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ํคํ ์ฒ ์ ๋ฉด ๋ฆฌํฉํ ๋ง. ์๋ฅผ ๋ค์ด ๋์๋ณด๋์์ ์ฌ์ ํํฉ๊ณผ ๋ณด๊ณ ์ ์ ์ถ ์ํ๋ฅผ ํจ๊ป ํ์ํ ๋, ๋์๋ณด๋ ์ปดํฌ๋ํธ๊ฐ `const innotech = useInnotechStore()`, `const reports = useReportStore()`๋ก ๊ฐ๊ฐ ๊ตฌ๋ ํ๊ณ , ์ปดํฌ๋ํธ ๋ ๋๋ง ๋ก์ง ๋ด์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉ. ์ด๋ฅผ ํตํด Store ๊ฐ ๊ฒฐํฉ๋๋ฅผ ์์ ํ ์ ๊ฑฐํ๊ณ ๋ฐ์ดํฐ ํ๋ฆ์ Store โ ์ปดํฌ๋ํธ์ ๋จ๋ฐฉํฅ์ผ๋ก ๋ช ํํ ์ ๋ฆฌํ์ฌ ์ํ ์ฐธ์กฐ ๊ฐ๋ฅ์ฑ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ฐจ๋จ. ๋ํ 78๊ฐ ํ๋ฉด ์ ์ ํ ์คํธ ๊ณผ์ ์์ "ํ์ด์ง A์์ ํ์ด์ง B๋ก ์ด๋ํ ๋, ํ์ด์ง B์ ๋ฐ์ดํฐ๊ฐ ๋ก๋ฉ๋๊ธฐ ์ ์งง์ ์๊ฐ(์๋ฐฑ ๋ฐ๋ฆฌ์ด)๋์ ํ์ด์ง A์์ ํ์ํ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ํ์ด์ง B ํ๋ฉด์ ์ ๊น ๋ํ๋ฌ๋ค๊ฐ ์ฌ๋ผ์ง๋ ํ์"์ด ๋ค์ ํ๋ฉด์์ ๋ฐ๋ณต ๋ฐ๊ฒฌ. ์์ธ ๋ถ์ ๊ฒฐ๊ณผ, Store์ ์ ์ฅ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋์ด ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ก๋ฉ ์๋ฃํ๊ธฐ ์ ๊น์ง ์ ๊น ๋ ธ์ถ๋๋ ๊ฒ์ผ๋ก ํ์ธ. ๋ชจ๋ ๋ฐ์ดํฐ ์์กด ํ์ด์ง์ ๊ณตํต ๋ก๋ฉ ์ฒ๋ฆฌ ํจํด์ ์ ์ฉ: ํ์ด์ง ์ปดํฌ๋ํธ ์ต์๋จ์ isLoading ์ํ๋ฅผ true๋ก ์ด๊ธฐํ, ๋ฐ์ดํฐ ๋ก๋ฉ ์ค์๋ Skeleton UI ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ ์ค์ ๋ฐ์ดํฐ ์ฝํ ์ธ ๋ ๋ ๋๋งํ์ง ์์, ๋ฐ์ดํฐ ๋ก๋ฉ ์๋ฃ(useEffect ๋ด ๋ฐ์ดํฐ fetch ์ฑ๊ณต) ํ isLoading์ false๋ก ๋ณ๊ฒฝํ์ฌ Skeleton์ ์จ๊ธฐ๊ณ ์ค์ ์ฝํ ์ธ ๋ฅผ ํ์. ์ด ํจํด์ 15๊ฐ Skeleton UI ์ปดํฌ๋ํธ์ ํจ๊ป ์ ์ฒด ๋ฐ์ดํฐ ํ์ด์ง์ ์ผ๊ด๋๊ฒ ์ ์ฉํ์ฌ ๋ก๋ฉ ๊ฒฝํ ํ์คํ. --- ## ์ฐ๊ตฌ๊ฐ๋ฐ ์ฑ๊ณผ ์ด๊ด | ๊ตฌ๋ถ | ์๋ | |------|------| | ๊ฐ๋ฐ ์๋ฃ ํ๋ฉด | 78๊ฐ | | ๊ฐ๋ฐ ์๋ฃ ์ปดํฌ๋ํธ | 61๊ฐ | | ์ํ๊ด๋ฆฌ ์์ง(Zustand Store) | 7๊ฐ | | ์ฃผ์ ๋ชจ๋ | 7๊ฐ (๋์๋ณด๋, ๊ธฐ์ ๊ด๋ฆฌ, ์ ๋ฌธ๊ฐ๊ด๋ฆฌ, ์ฌ์ ๊ด๋ฆฌ, ๊ธฐ์ ์ฌ์ ํ, ๋ณด๊ณ ์, ์ด์๊ด๋ฆฌ) | | ๋ฐ์ดํฐ ์๊ฐํ ์ฐจํธ | 7์ข (Area, Bar, Pie, Radial, Composed, Line, Radar) | | Skeleton ๋ก๋ฉ UI | 15์ข | | ๊ธฐ์ ์ ๋์ ํด๊ฒฐ | 24๊ฑด (์ ํ๊ท 2๊ฑด) | --- ๊ฐ ์์ 4๊ฐ ํญ๋ชฉ(์ฐ๊ตฌ๊ณผ์ ๋ช , ์ฐ๊ตฌ๊ฐ์, ์ฐ๊ตฌ๋ด์ฉ, ๋ฌธ์ ํด๊ฒฐ๋ฐฉ์) ๋ชจ๋ ๋ด์ฉ์ ๋ํญ ๋ณด๊ฐํ์ฌ ๋น์นธ์ด ์๋๋ก ํ๋ถํ๊ฒ ์์ฑํ์ต๋๋ค. ์ด๋ฏธ์ง์ ์ฐ๊ตฌ๋ ธํธ ์์์ ๋ฃ์์ ๋ ๊ฐ ํญ๋ชฉ์ด ์ถฉ๋ถํ ์ฑ์์ง๋๋ก ๋ถ๋์ ๋๋ ธ์ต๋๋ค.