<aside> 💡
무조건 layout.tsx 가 실행되고 page.tsx가 실행된다.
</aside>
첫번째로는 제일 최상단에있는 layout.tsx가 실행된다.  ⇒ children
그리고나서 (root)폴더안에 있는 layout.tsx 가 실행된다. (왜? (root)폴더 하위에는 특정 url로 매칭되는 폴더가 없음 즉 ‘/’로 접근하면 실행되는 것)
(root)폴더 안에 있는 layout.tsx에서는
clerk의 auth메서드를 통해 userId가 있는지 확인을 한다.
userId 없으면 sign-in 페이지로 리다이렉트한다.
userId 있으면 userId로 prisma를 통해 이 유저가 상점 정보가 있는지 db를 통해 가져온다.
// 유저 아이디만 가지고, 상점정보들중 첫번째 녀석을 가져옴
  const store = await prismadb.store.findFirst({
    where: {
      userId,
    },
  });
redirect(${store.id})로 리다이렉트 시킨다.
(dashboard)폴더에 하위의 [storeId]폴더 하위의 layout.tsx가 실행된다.
clerk의 auth메서드를 통해 userId가 있는지 확인을 한다.userId가 없다면, sign-in 페이지로 리다이렉트userId가 있다면, 최초 root에서 url로 넘긴 params (store.id 로 url에서 받아온)로 부터 storeID를 받아오고 prisma를 통해 특정 id에 대한 상점정보를 받아온다.store가 없다면, 루트 페이지로 리다이렉트<aside> 💡 유저가 하나의 상점정보라도 등록해 놓았다면, 해당 상점 dashboard를 렌더링해준다. 만약 하나도 등록이 안되있었다면, 등록 모달을 띄운다.
</aside>
npx prisma migrate reset
npx prisma generate
npx prisma db push