๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

sparta/Trouble Shooting

[NEXT]์ตœ์ข…ํ”„๋กœ์ ํŠธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…(2) - ๋ฏธ๋””์–ด์ฟผ๋ฆฌ

๐Ÿž Trouble Shooting

 

 

๋ฏธ๋””์–ด์ฟผ๋ฆฌ ์ ์šฉ์ด ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

 

๋ฌธ์ œ ์ •์˜

  • sign-in, sign-up ํŽ˜์ด์ง€์—์„œ ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ํฐ์ƒ‰ ํ—ค๋”, ๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” ๊ธฐ์กด ํ—ค๋”๊ฐ€ ์ ์šฉ๋˜์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ชจ๋ฐ”์ผ์—์„œ๋„ ๊ธฐ์กด(๊ฒ€์ •) ํ—ค๋”๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • md:hidden์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ ๋ถ„์„

 

(1) ์ „์—ญ ๋ ˆ์ด์•„์›ƒ์—์„œ ํ—ค๋”๊ฐ€ ํ•ญ์ƒ ๋ Œ๋”๋ง

  • RootLayout.tsx์—์„œ ๋ชจ๋“  ํŽ˜์ด์ง€์— Header.tsx(๊ฒ€์ • ํ—ค๋”)๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰, auth ํŽ˜์ด์ง€์—์„œ๋„ Header.tsx๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด์„œ ๋ชจ๋ฐ”์ผ์—์„œ๋„ ๊ฒ€์ • ํ—ค๋”๊ฐ€ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

(2)๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์ ์šฉ์ด ์˜๋„๋Œ€๋กœ ์ž‘๋™ ์•ˆ๋จ

  • md:hidden์„ ์‚ฌ์šฉํ•˜์—ฌ AuthHeader.tsx(ํฐ์ƒ‰ ํ—ค๋”)๋ฅผ ๋ชจ๋ฐ”์ผ์—์„œ ๋ณด์ด๊ฒŒ ํ–ˆ์ง€๋งŒ, ์ „์—ญ์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜๋Š” Header.tsx๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” md:hidden์ด ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ •์ƒ์ ์œผ๋กœ ๊ธฐ์กด ํ—ค๋”๊ฐ€ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ์ „์—ญ์ ์œผ๋กœ ๋ Œ๋”๋ง๋œ ํ—ค๋”๊ฐ€ ์ตœ์ƒ์œ„์—์„œ ์œ ์ง€๋˜๋ฉด์„œ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๊ณผ์ •

 

(1) RootLayout.tsx์—์„œ auth ํŽ˜์ด์ง€ ์—ฌ๋ถ€ ์ฒดํฌํ•˜์—ฌ ๊ธฐ์กด ํ—ค๋” ์ œ์™ธ

  • headers().get("next-url")์„ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ sign-in ๋˜๋Š” sign-up์ธ์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • isAuthPage๊ฐ€ true๋ฉด Header.tsx(๊ธฐ์กด ํ—ค๋”)๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
const pathname = headers().get("next-url") || "";
const isAuthPage = pathname.startsWith("/sign-in") || pathname.startsWith("/sign-up");

return (
  <body className="font-pretendard">
    {!isAuthPage && <Header />} 
    {children}
    <Footer />
    <InquiryFloatingButton />
  </body>
);

 

 

 

(2) auth ํŽ˜์ด์ง€์— ๋ณ„๋„ ๋ ˆ์ด์•„์›ƒ(AuthLayout.tsx) ์ ์šฉ

  • AuthHeader.tsx(ํฐ์ƒ‰ ํ—ค๋”)๋ฅผ ๋ชจ๋ฐ”์ผ์—์„œ๋งŒ ๋ณด์ด๋„๋ก ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” ๊ธฐ์กด ํ—ค๋”๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
import AuthHeader from "@/components/layout/AuthHeader";
import Header from "@/components/layout/Header";
import { headers } from "next/headers";

export default function AuthLayout({ children }: { children: React.ReactNode }) {
  const pathname = headers().get("next-url") || "";
  const isAuthPage = pathname.startsWith("/sign-in") || pathname.startsWith("/sign-up");

  return (
    <>
      <div className="md:hidden">
        <AuthHeader />
      </div>
      <div className="hidden md:block">
        <Header />
      </div>
      <main>{children}</main>
    </>
  );
}

 

 

์ตœ์ข… ๊ฒฐ๊ณผ

  •  ๋ชจ๋ฐ”์ผ์—์„œ๋Š” AuthHeader.tsx(ํฐ์ƒ‰ ํ—ค๋”)๋งŒ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  •  ๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” ๊ธฐ์กด Header.tsx(๊ฒ€์ • ํ—ค๋”) ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • auth ํŽ˜์ด์ง€์—์„œ๋งŒ ๊ธฐ์กด ํ—ค๋”๋ฅผ ์ œ์™ธํ•˜๋„๋ก RootLayout.tsx ์ˆ˜์ • ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.