로토
한줄로 요약하면
SSR 중심의 React Framework
JAMStack과는 결이 완전히 반대라고 볼 수 있습니다.
SSG
SSR
SSG의 단점을 보완하기 위해 next.js에는
ISR이라는 컨셉이 있습니다.
아무래도 복잡한 부분이 좀 있는데, 그에 비해 remix는 SSR 렌더링 중심으로 생각하면 되어서
렌더링 플로우가 좀 더 간단해보이는 장점이
있습니다.
설치하기
npx create-remix@latest
데이터 불러오기
컴포넌트 밖에 loader 함수를 정의하고 export
컴포넌트 내에서 useLoaderData hooks로 불러옴
import { useLoaderData } from "remix";
import type { LoaderFunction } from "remix";
export let loader: LoaderFunction = () => {
return [{ name: "Pants" }, { name: "Jacket" }];
};
export default function Products() {
let products = useLoaderData();
return (
<div>
<h1>Products</h1>
{products.map(product => (
<div>{product.name}</div>
))}
</div>
);
}
데이터를 불러오는 시점이 매우 명확하기
때문에 구조가 간단해집니다.
데이터 보내기
태초부터 사용하던 Form 전송 방식을 사용합니다.
데이터 보내기
생각해보면, ajax가 급부상한 이후 데이터 보내는 요청은 ajax로
처리하는 것이 보편화 되었습니다.
remix는 이것을 Form 전송 기반으로 처리합니다. (복고풍?)
데이터 보내기
export default function Index() {
return (
<div>
<form method="post" action="/post-test">
<input name="name" type="text" placeholder="name" />
<button type="submit">보내기</button>
</form>
</div>
);
}
index.tsx
post-test.tsx
import { ActionFunction, redirect } from "remix";
export const action: ActionFunction = async ({
request
}) => {
const formData = await request.formData();
console.log(formData)
return redirect('/')
};
export default function PostTestPage() {
}
데이터 보내기
import { Form } from "remix";
export default function Index() {
return (
<div>
<Form method="post" action="/post-test">
<input name="name" type="text" placeholder="name" />
<button type="submit">보내기</button>
</Form>
</div>
);
}
index.tsx
결과적으로 사용 경험은 과거의 form base
데이터 전송이지만, 실제 작업은 ajax로 일어납니다.
이걸로 간단한 웹 페이지를 만들어봤습니다.
vercel 배포 기준으로 lambda warm up하는 시간 + 리젼 차이
때문에 생각보다 속도가 빠르게 느껴지진 않습니다.
(로컬로 작업할 때가 훨씬 빨라요.)
또한 SSG+ ISR과는 다르게 첫 렌더링 시도에 무조껀 서버를
거치기 때문에, 이점을 고려하여 서버를 관리해야합니다.
결국 각 엣지서버에 애플리케이션을 다량 배포하는
것으로 해결하자.. 인 것 같네요
감사합니다!