개발자
안녕하세요. Next.js를 공부하던 중 궁금한점이 생겨 질문드립니다 ! 제가 app/page.js 파일에 사용자가 로그인했다면 메인화면 컴포넌트를 보여주고, 로그인하지 않았다면 로그인 컴포넌트를 보여주도록 작성해두었습니다. 그런데 궁금한 점이 로그인을 했는지 유무를 getserversession을 통해 세션을 확인해서 판단합니다. 그런데 이때 비동기처리를 위해 await를 붙여줘야하는데, 그렇다면 page.js의 Home() 자체에 async를 붙여주어야합니다. 그래서 해당 방법을 사용해 제가 생각한 로직은 구현했습니다. 그런데 궁금한 점이 page.js에서 export default async function Home() 이런식으로 작성해도 되나요? 제가 page.js의 역할을 정확히 이해하지 못한 느낌이 들어 질문드립니다. (챗 지피티에게 물어보니 13버전 이전의 내용만 알고 있는 듯합니다. 또한 컴포넌트 자체에 async를 붙이면 안된다고 답변이 옵니다 !)
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 03월 18일
Next.js의 모든 페이지는 React 컴포넌트입니다. 이들 컴포넌트는 서버 사이드 렌더링, 정적 생성, 클라이언트 사이드 렌더링 등의 다양한 데이터 가져오기 전략을 지원합니다. 하지만 질문으로부터 언급하신것 처럼 일반적인 React 컴포넌트나 페이지를 async 함수로 선언하는 것은 권장되지 않습니다. 왜냐하면 React 컴포넌트는 동기식으로 실행되며, 비동기적인 로직은 useEffect 훅 내에서 처리해야하기 때문입니다. 로그인 상태를 확인하려면 Next.js의 getServerSideProps 또는 getInitialProps와 같은 데이터 가져오기 메소드를 사용하는 것이 좋습니다. 이런 함수들은 서버측에서 실행되어 초기 페이지 로딩 시 필요한 데이터를 가져옵니다. 아래 예제와 같이 사용할 수 있습니다: ```js export async function getServerSideProps(context) { const session = await getSession(context); return { props: { session } } } export default function Home({ session }) { if (!session) { return <LoginComponent /> } return <MainPageComponent /> } ``` 위 코드로 수정하면 Home() 자체에 async를 붙일 필요가 없으며, getServerSideProps 안에서 세션 확인 후 로그인 상태에 따라 해당 컴포넌트를 반환하게 됩니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!