loader, 데이터는 어디서 오는가웹 페이지를 보여주기 전에 필요한 데이터를 미리 준비하는 아주 편리한 방법이 있다.
React Router에서는 이 역할을 loader라는 함수에게 맡기는 것이다.
loader는 우리가 설정한 각 라우트(경로)에 붙어있는 '데이터 준비 담당자'와 같다.
사용자가 특정 페이지로 이동하면, 그 페이지가 화면에 그려지기 전에 담당 loader가 먼저 실행되어 데이터를 가져온다.
이렇게 미리 준비된 데이터 덕분에 우리는 로딩으로 인한 화면 깜빡임 없이 쾌적한 사용자 경험을 만들 수 있다.
loader가 준비한 데이터를, 실제로 화면에 그리는 여러 하위 컴포넌트들은 해당 데이터를 어떻게 사용할 수 있는지 알아볼 것이다.
useLoaderData()loader 데이터를 사용useRouteLoaderData(id)loader 데이터를 사용id를 인자로 전달해야 한다.
useLoaderData는 '나의 데이터',useRouteLoaderData는 '부모의 공유 데이터'를 꺼낼 때 사용한다.

/login 페이지에 있을 때rootLayout → authLayout → /loginloader: root의 loader, auth의 loader이 페이지(LoginPage.jsx) 안에서는 다음과 같이 데이터를 사용할 수 있다.
useLoaderData()를 쓰면, /login 경로 자체에 설정된 loader의 값을 가져온다.useRouteLoaderData('auth')를 쓰면, 바로 위 부모인 authLayout의 loader 값을 가져올 수 있다.useRouteLoaderData('root')를 쓰면, 가장 위 조상인 rootLayout의 loader 값을 가져올 수 있다.publicLayout의 loader 값은 사용할 수 없다. (auth와 public은 서로 남남인 '형제' 관계이기 때문)/main 페이지에 있을 때rootLayout → authLayout → protectLayout → /mainloader: root의 loader, auth의 loader이 페이지(MainPage.jsx) 안에서는 다음과 같이 데이터를 사용할 수 있다.
useLoaderData()를 쓰면, /main 경로 자체의 loader 값을 가져온다.useRouteLoaderData('auth')를 쓰면, 조상인 authLayout의 loader 값을 가져올 수 있다. (로그인 정보를 여기서 얻는다.)useRouteLoaderData('root')를 쓰면, 가장 위 조상인 rootLayout의 loader 값을 가져올 수 있다.publicLayout의 loader 값은 사용할 수 없습니다./about 페이지에 있을 때rootLayout → publicLayout → /aboutloader: root의 loader, public의 loader이 페이지(AboutPage.jsx) 안에서는 다음과 같이 데이터를 사용할 수 있다.
useLoaderData()를 쓰면, /about 경로 자체의 loader 값을 가져온다.useRouteLoaderData('public')를 쓰면, 바로 위 부모인 publicLayout의 loader 값을 가져올 수 있다.useRouteLoaderData('root')를 쓰면, 가장 위 조상인 rootLayout의 loader 값을 가져올 수 있다.authLayout의 loader 값은 절대 사용할 수 없다. (/about 페이지는 authLayout을 전혀 거치지 않았기 때문)내가 있는 페이지는 '나 자신'과 '내가 거쳐온 길(부모, 조상)'의 데이터만 사용할 수 있다.