osamhack2022 / WEB_AI_MILIROUTINE_MILIROUTINE

๋ฐ€๋ฆฌ๋ฃจํ‹ด(MILIROUTINE) - ๊ตฐ์ƒํ™œ ๋ฃจํ‹ด ๊ณต์œ  ์„œ๋น„์Šค | ์ง€ํ‚ค๊ณ  ์‹ถ์€ ๋ฐ€๋ฆฌ๋ฃจํ‹ด์„ ๋งŒ๋“ค๊ณ , ํ•จ๊ป˜ ์ธ์ฆํ•ด๋ณด์„ธ์š”!
MIT License
5 stars 6 forks source link

๐Ÿ˜ขํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ FE ๊ฐœ๋ฐœ ํŒจํ„ด ๊ณต๋ถ€ ๋ฐ ์ดํ•ดํ•˜๊ธฐ #22

Closed silverttthin closed 1 year ago

silverttthin commented 1 year ago

์ „๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ๋“ค์ด๋ž‘ ๊ณต๋ถ€ํ•œ๊ฒƒ๋“ค์ด๋ž‘ ๋งŽ์ด ๋‹ฌ๋ผ ์ˆจ์ด ํ„ฑ ๋ง‰ํ˜€ ์ผ๋‹จ ์ œ๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ๋“ค์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ๋จผ์ € ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉํ–ฅ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ ๋ฐฐ๊ฒฝ์„ ์ž˜ ๋ชจ๋ฅด๋Š” ํŒŒ์ผ ๋ฐ ๊ฒฝ๋กœ๋“ค์ด ๋งŽ์•„ ์ผ๋‹จ ์ง๊ด€์ ์œผ๋กœ ๋ถ„์„ํ•ด๋ณด์•˜๋‹ค.

    assets: ๋ฐ€๋ฆฌ๋ฃจํ‹ด ๋กœ๊ณ  ์‚ฌ์ง„

    components ํด๋”

    • Element : Button, Header, Footer, Jumbotron, Navitem ์ปดํฌ๋„ŒํŠธ ์ €์žฅ์†Œ

      โ†’ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด์•ผ ํ•  Category ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ์—ฌ๊ธฐ์— ๋„ฃ์–ด๋†”์•ผ ํ• ๋“ฏ?

    • Layout :

      • index.ts : ๋ชจ๋ฅด๊ฒ ์Œ
      • MainLayout.tsx : ํ™”๋ฉด ์ „๋ฐ˜์ ์ธ ๋ ˆ์ด์•„์›ƒ์ธ๋“ฏ
    • features ํด๋”

      • auth
        • routes
          • index.tsx : ๊ฒฝ๋กœ๊ฐ€ login or signup์ผ ๋•Œ ๋กœ๋“œํ•  element ์ด๋Œ๊ธฐ
        • types
          • index.ts : ํƒ€์ž… ์ง€์ •ํ•ด๋‘” ๊ฒƒ๋“ค
        • index.ts : routes์™€ type๋ฅผ export..? ์ž˜๋ชจ๋ฅด๊ฒ ์Œ
      • misc
        • routes
          • index.tsx : ์ ๋ณดํŠธ๋ก  ๊ด€๋ จ๋œ landing.tsx๋ฅผ export..?
          • landing.tsx : ์ ๋ณดํŠธ๋ก  ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ
        • index.ts : routes ์ „๋ถ€ export..?
    • routes ํด๋”

      • index.tsx : ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋กœ๋“œํ•  ๊ฒƒ๋“ค ์ง€์ •ํ•˜๋Š” ํ•ต์‹ฌ ํŒŒ์ผ. ํ—ค๋”, ํ‘ธํ„ฐ, ๋‚ด๋ถ€ content(์˜ˆ์ •) ๋ฆฌํ„ดํ•˜๋„๋ก ๋ผ์žˆ์Œ

    .. ๋“ฑ๋“ฑ ์ด์™ธ๋Š” ๊ธฐ๋ณธ ์„ธํŒ…ํŒŒ์ผ์ด๋‚˜ ์œ„๋ณด๋‹ค ์ฐจ์„ ์ˆœ์œ„์ธ๋“ฏ

    ๊ฐ๊ธฐ ๋งŒ๋“ค์–ด๋‘” ์š”์†Œ๋“ค์„ index๋ผ๋Š” ๋™์ผํ•œ ํŒŒ์ผ๋ช…์˜ ํŒŒ์ผ๋“ค์ด exportํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ํ•œ๋ฒˆ์— index๋ฅผ ์ž„ํฌํŠธํ•ด์„œ ๊ทธ๋Ÿฐ๊ฑด๊ฐ€ ์ถ”์ธกํ•˜๋Š”๋ฐ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ

  2. ์ˆœ์ˆ˜ํ•œ css๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ css framework๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ด์„œ tailwind css ์‚ฌ์šฉ๋ฒ•์ด ๋‚ฏ์„ค๊ธดํ•œ๋ฐ.. ์ผ๋‹จ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด์„œ ์‹œํ–‰์ฐฉ์˜ค ๊ฒช์–ด๋ด์•ผํ• ๋“ฏ?

  3. React Route ์ฒ˜์Œ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ <Route path="signup/more"element = {<signupmore / >} /> ์ด๋ ‡๊ฒŒ ํ•ด๋‘๊ณ  signupmore ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆฌ๋Š” ์‹์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

    โ†’ ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋„ ์ผ๋‹จ auth ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์žˆ๋Š” index.tsx์—์„œ <Route path="signup/more" element = {<signupMore />}/>๋กœ ์ผ๋‹จ ๋งŒ๋“ค์–ด๋‘๊ณ  ํ•ด๋‹น path๋กœ ๋“ค์–ด๊ฐ€์„œ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค ๋ณด๋ฉด์„œ ์ž‘์—…ํ•˜๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ƒ๊ฐํ•ด๋‘” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋กœ๋“œ ๋˜์ง€ ์•Š๊ณ  no routes matched location ์˜ค๋ฅ˜๋กœ ํ™•์ธ๋˜๋Š”๋ฐ ๊ตฌ๊ธ€๋งํ•ด์„œ ๋ด๋„ ์ €ํฌ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰์ด ์•ˆ๋˜๋‹ˆ css ์‹ค์Šต๋„ ๋ชปํ•ด๋ณด๊ณ  ๋งก์€ ๋ถ„๋Ÿ‰์ด ์‹œ์ž‘ ์ „ ์„ธํŒ…๋ถ€ํ„ฐ ๋ง‰ํ˜€๋ฒ„๋ฆฌ๋‹ˆ..ใ… 

์‚ฌ์‹ค์ƒ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๋ฉ”์ธ ๋ฌธ์ œ๊ฐ€ 3๋ฒˆ. ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ํ™”๋ฉด์œผ๋กœ ๋ณด๋ฉด์„œ ๊ณต๋ถ€์™€ ๋™์‹œ์— ๊ตฌํ˜„ํ•ด ์ง„ํ–‰๋„๋ฅผ ์กฐ๊ธˆ์”ฉ ๋Š๋ฆฌ๊ฒŒ๋ผ๋„ ๋Š˜๋ ค๋‚˜๊ฐ€๊ณ  ์‹ถ์€๋ฐ ์‹œ์ž‘๋„ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ ๊ณต๋ถ€ํ•˜๋˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ˜‘์—… ํ”Œ์ ์œผ๋กœ ๋„˜์–ด๊ฐ€๋‹ˆ ์ˆ˜์ค€์ด ๋„ˆ๋ฌด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ ธ์„œ ํ˜ผ์ž๋กœ๋Š” ํ•ด๊ฒฐ์ด ์–ด๋ ค์›Œ ์ด์Šˆ๋กœ ๋„์›€์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

springkjw commented 1 year ago

๊ธฐ์กด์— ๊ณต๋ถ€ํ•˜์‹œ๋˜ React Route ๊ฐ€ V6์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์‚ฌ์šฉ๋ฒ•์ด ์กฐ๊ธˆ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ ํŠœํ† ๋ฆฌ์–ผ ๋ณด์‹œ๊ณ  ๊ฐ์„ ์ตํ˜€๋ณด์‹œ๋ฉด ์ข‹์„๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ์‚ฌ์šฉํ•  Router ์„ค์ •์€ ์ œ๊ฐ€ ํ•ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

silverttthin commented 1 year ago

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค! ์ผ๋‹จ #23 ์™„๋ฃŒํ•˜์‹ค๋•Œ๊นŒ์ง€๋Š” ๋ผ์šฐํ„ฐ ๋‹ค์‹œ ๊ณต์‹๋ฌธ์„œ๋กœ ์งš์–ด๋ณด๋ฉด์„œ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

springkjw commented 1 year ago

23 ๋กœ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

yoopark commented 1 year ago

๊ณต๋ถ€ ๋‚ด์šฉ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค!

AppRoutes (/routes/index.tsx)

const commonRoutes = [
    { path: "/", element: <LandingPage /> },
    { path: "/popular", element: <PopularPage /> },
  ];

const element = useRoutes([
    ...protectedRoutes,
    ...publicRoutes,
    ...commonRoutes,
  ]);

  return (
    <>
      <Header />
      <div className="flex-1">{element}</div>
      <Footer />
    </>
  );

๋ผ์šฐํŒ… ํ‘œ

path ํƒ€์ž… ์ปดํฌ๋„ŒํŠธ๋ช… ํŒŒ์ผ
/ Common <LandingPage /> features/misc/routes/Landing.tsx
/popular Common <PopularPage /> features/misc/routes/Popular.tsx
/user/my Protected <MyPage /> features/my/routes/MyPage.tsx
/user/my/routine/:routineId/auth Protected <MyRoutineAuthPage /> features/my/routes/MyRoutineAuth.tsx
/user/setting Protected <SettingPage /> features/my/routes/Setting.tsx
/user/pointshop Protected <PointShopPage /> features/my/routes/PointShop.tsx
/routine/make Protected <RoutineMakePage /> features/routine/RoutineMake.tsx
/routine/:routineId Protected <RoutineDetailPage /> features/routine/RoutineDetail.tsx
/auth/login Public <LoginPage /> features/auth/routes/Login.tsx
/auth/signup Public <SignupPage /> features/auth/routes/Signup.tsx