이전 node.js의 ejs 또는 java spring의 jsp 등이 SSR 방식이다. SSR 방식은 동적으로 페이지를 구성하기 어려워 CSR 방식이 주목받게 되었지만, 검색 엔진 최적화와 초기 로딩 시간 문제로 인하여 페이지의 일부를 프리 렌더링 하는 SSR on SPA 방식이 유행하게 되었다.
api/path
로 접근할 경우, data를 전달할 수 있는 api 서버 역할을 한다.babel 관련 이슈
create-next-app --typescript
만으로도 충분했으며, 기본적으로 필요한 플러그인들 (env, scss 등등)은 모두 깔려있어서 그것은 너무 편했다. 또한, webpack.config.js 처럼 babel.config.js 세팅 파일을 통해 좀 더 필요한 플러그인이나 alias 등을 간단히 추가해 주는 것만으로 webpack을 정의한 것과 동일하게 동작하는 점이 맘에 들었다.ex) 폴더 구조가 @pages/hello/index.tsx
일 경우, 실제 주소창에 검색하는 주소는 https://localhost:8080/hello
가 됨
뒤에 동적 주소를 사용하고 싶다면 파일이름을 [id].tsx
형식으로 이름을 짓고, 컴포넌트 내부에서 다음과 같이 작성하면 된다.
// @pages/posts/[id].tsx
import { useRouter } from 'next/router';
import React from 'react';
import { Post as PostInterface } from '@/interfaces';
import { NextPageContext } from 'next';
import axios from 'axios';
// getServerSideProps에서도 해당 id를 사용할 수 있다.
export const getServerSideProps = async (ctx: NextPageContext) => {
try {
const postId = ctx.query.id;
const { data: post } = await axios.get<PostInterface>(
`https://someapi.com/posts/${postId}`,
);
return {
props: { post },
};
} catch (error) {
if (axios.isAxiosError(error) && error.response?.status === 404) {
// ANCHOR: not found시 404page로 자동으로 이동한다.
return {
notFound: true,
};
}
}
return {
props: {},
};
};
const Post: React.FC<Props> = ({ post }) => {
const router = useRouter(); // router.query.id로 접근
return (
<div>
<h1>{post.title}</h1>
<p>{post.body}</p>
</div>
);
};
export default Post;
초보 웹 개발자를 위한 자바스크립트 빌드 툴과 SWC
swc-disabled | Next.js
PowerPoint 프레젠테이션 (deview.kr)