앞서 1편 포스팅에서 _document.js 파일에 대해 설명할 때 reset.css 와 common.css를 적용하는 법을 함께 언급하였다. _document.js는 HTML 초기설정 파일정도로 생각하면 될것 같다. Next, react에서는 HTML문서를 작성 하지 않기 때문에 (xx.js 컴포넌트를 만들지 xx.html문서를 직접 편집하지 않는다) HTML <head>
에 속하는 메타, 링크 정보는 어떻게 넣어야 하는지 고민하게 된다. 간단하게 _document.js 파일에 작성하게 된다.(결론은 HTML작성이 아닌 JSX 문법!) next가 제공하는 <HEAD>
태그 안에 <meta>
태그와 <link>
태그 등을 사용한다.
처음 작성하였던 코드가 문제가 있어 내용수정
redux 폴더는 루트 바로 아래에 위치하자, 수정 전에는 components폴더에 두고 작업하였는데 이 방법 보다는 root이하에 redux만 담을 폴더를 생성하는 것이 좋다. 폴더의 기준이 모호해 지기 때문
- 공통style은 사람마다 다르지만 전체에 먹이고 싶을땐 _document.js, 각각 먹이고 싶으면 page폴더 하위 pagename.js에 next가 제공하는 <HEAD>
넣어 활용하도록 하자.
next에서 기본으로 제공하는 기능을 찾아보기
components.js에서 리액트를 통해 이루어지는 것은 모두 CSR(client side rendering)이다. 그럼 next로 초기 설정을하고 서버단에서 처리하는 것은 무엇인가? page폴더안의 pagename.js 파일들이 SSR(getInitialProps를 쓰자)으로 구성되는 파일이다. 서버에서 처리하고 보여주기 위해서는 pagename.js에 두어야 한다.
nextjs 공식문서 - getInitialProps 설명
위 문서를 읽고 getInitialProps에 대해 꼭 이해하자. 서버에서 처리하기 위해 사용하는 라이프사이클?이라고 알고있는데(아직 공부전임으로 지금보다 더 잘 알게되면 내용을 수정하도록 하겠다) API서버에서 내용을 가져와 뿌려줄때 꼭 필요한 작업이며, fetch함수의 경우 SSR에서 사용할 수 없음으로. 이를 대체하여 패치하는 방식을 찾아야 한다. 대략 알고있는 키워드는 axios
, isomorphic
이 있다. 역시 공부하기..
fetch()의 경우 브라우저, window객체에서 제공되는 함수다. 서버단(node)에서는 window.fetch()가 없어 사용이 불가능 하기 때문에 fetch()대신 그와 같은 기능을 찾아 교체해야 한다.
NODE서버단과 Brouser화면에서 함께 사용 가능한 fetch 기능
import fetch from 'isomorphic-unfetch';
const Index = (props) => {
return (
{
prop.data.map((li)=>{
<p>{li}<p>
})
}
)
}
Index.getInitialProps = async function() {
const res = await fetch('https://api.tvmaze.com/search/shows?q=batman');
// 여기서 사용하는 fetch는 isomorphic에서 가져온 fetch함수다!
const data = await res.json();
console.log(`Show data fetched. Count: ${data.length}`);
return {
shows: data.map(entry => entry.show)
};
};
프로젝트 진행 중 FrontEnd next를 통해 SSR을 사용한다 하니 BackEnd에서 그럼 Back에서 처리해야할 것은 무었이 있나는 질문이 나왔따. 대답은? 아무것도 달라지는 것이 없다. 지금까지와 같이 동일하게 작업하면 된다는 것이었다.
BackEnd에서 사용하는 API server와 FrontEnd에서 사용하는 server는 위치가 다르기 때문이다.
배우는 단계입니다! 제가 잘못알고 있는 부분은 댓글로 알려주세요!!