최근에 NextJS 공부를 시작했습니다. Next.js + Typescript + Styled-components를 한번 직접 세팅을 해보면서 궁금했던것들을 정리한 글입니다. 브이로그 잘 찾아보면 그냥 세팅하는 방법들은 잘 나와있습니다. 이 글은 NextJS 내부적으로 어떻게 돌아가는지 살펴본 글입니다.
_document.tsx 파일에서 sheet.collectStyles이 부분을 보시면 서버사이드에서 랜더링을 할때 스타일 태그들을 다 뽑아서 head태그 안쪽에 직렬화해서 넣어줍니다.
객체(Object) => 문자열(string) 로 변환하는 것 = 직렬화(Serialization)
문자열(string) => 객체(Object)로 반환하는 것 = 역직렬화(Deserialization) or 파싱(Parsing)
👉🏻직접눈으로 체감해봅시다.
sheet.collectStyles을 App컴포넌트에 넣어주고 빌드를 해보겠습니다.
yarn build
그럼 .next/server/pages/index.html 으로 이동해서 파일을 열어서 보면 다음과 같이 style 초기화했던 css 들이 head태그 안쪽으로 들어가 있는것을 확인 할수 있습니다.
이번에는 반대로 sheet.collectStyles을 App컴포넌트에서 빼고 빌드를 해보겠습니다. 그럼 위랑 똑같은 파일에가서 .next/server/pages/index.html 열어서 보면 다음과 같이 style 초기화했던 css 들이 없어진것을 확인 할수가 있습니다. 🔥🔥
🙋🏻 그럼 어디로 간걸까요?
바로 위에 이미지에서 강조한 빨간색 박스 부분 head 태그 안쪽에 style 태그로 감싸져서 들어가 있습니다. 그 안쪽에 css 속성들은 우리 눈에는 보이진 않지만 저기에 다 들어가 있는것입니다.
// .babelrc
{
"presets": ["next/babel"],
"plugins": [
[
"babel-plugin-styled-components",
{
"fileName": true, //코드가 포함된 파일명을 알려줌
"displayName": true, //클래스명에 해당 스타일 정보 추가
"pure": true, //사용하지 않은 속성 제거
"ssr": false //클라이언트 측에서 구성 요소를 동적으로 로드하려할때 서버 렌더링을 비활성화할 수 있습니다.
}
]
]
}