npx create-next-app
으로 프로젝트를 세팅을 시작하는데, 터미널 창에서 이런 물음이 나왔다.
Use App Router (recommended)? No / Yes
App Router가 무엇인가에 대해 찾아보니, Next13부터는 기존의 page 디렉토리 기반의 라우팅이 아닌 app디렉토리를 기반으로 하는 라우팅을 지원 한다는 것이다.
새로운 기능이라 다른 라이브러리와 호환이 안되지 않을까 고민을 많이 하였는데, 나온 시기와, 안정화 되었다는 Next,js 블로그 의 글을 보고 한 번 써보자! 하여 위의 물음에 “yes”를 선택 하였다. (하… 여기서 부터 꼬인 것인가)
그 뒤로 기존의 패턴 대로 사용하다가 여러 문제들을 직면했다. 이번 포스트는 그 문제들에 대해 이야기 하겠다.
next/router
가 아닌 next/navaigation
으로 불러와야 한다. 'use client';
를 넣어 줘야 한다. 반응형으로 Image 사용하기
img
태그가 아닌 Next에서 제공하는 Image
태그를 사용해야 한다. 이 태그의 특이점이 있는데, 속성 값으로 width, height 값을 반드시 넣어줘야 한다. 안 그러면 에러가 발생한다.➡️ 그럴 경우, width, hegiht 속성 대신 fill 속성을 추가 하면 된다.
position :absolute ; width:100%; height100%;
가 붙는다. 그렇기 때문에 Image 태그 사용 시, 부모 태그에 position: relative
속성을 추가 해야 한다.➕ 위와 같은 경우, 부모 태그의 높이값을 width 값에 따라 퍼센티지로 적용하려면 padding 값으로 잡아줘야 한다.
@use 'sass:math';
@mixin resposive-height($hor, $ver) {
// math.round 함수 이용하여 반올림 적용
padding-top: math.round($ver/$hor * 100%);
}
외부 이미지 불러오기
// next.config
const nextConfig = {
images: {
// 도메인들을 array 형태로 나열
domains: ['image.tmdb.org','lh3.googleusercontent.com']
}
}
module.exports = nextConfig
SSR(Server Side Rendering) 적용을 처음 부터 하지 않고 프로젝트 중반에 적용하였는데, 여기서 부터 문제가 시작 되었다.
app 라우팅도 getServerSideProps를 사용할 수 있는 줄 알았는데, 아니었다. 안된다. app 라우팅 시스템에서는 SSR을 fetch 함수를 이용하여 적용한다고 한다.
공식문서 참고
컴포넌트가 rendering 되기 전에 state를 바꿔야하는데( + RTK로 state를 관리하는 상황), fetch 함수를 이용하여 그런 패턴을 구현 할 수 없었다. ( 사용하는 패턴이 있을 것 같은데, 그건 차차 더 알아봐야 될 것 같다. ) 그래서 다시 page 라우팅으로 바꿨다….😢
app 라우팅 방식을 사용한 초반 동안 Next 13의 새로운 기능들을 접해 볼 수 있었다. (dynamic routing 적용하는 방식, param, query 불러오는 방법, layout.js , meta …….) 끝까지 적용하는데 무리가 있었지만 직접 부딪히면서 잘 배운 것 같다. 사전에 좀 더 꼼꼼히 찾아봤어야 했는데, 그 부분이 미숙했던 것 같다.
Next 13 많은 변화가 있는 것 같다. 좀 더 스터디 해서 다음 프로젝트는 app라우팅, fetch 시스템 적용해서 구현해 보고 싶다.