Next.js를 배워보자

EBinY·2022년 11월 9일
0

시작의 계기

  • Next.js를 사용하기로 함
  • 사용하기도 편하고, SSR과 혼용하여 구현할 수 있다고 함
  • 한번도 써보지 않아서 예전에 노마드코더에서 듣던 강의가 있어 그걸로 학습하기로 함

Nextjs의 특징(react.js VS next.JS)


  • 주요 기능
    • hot reloading: 개발 중 저장되는 코드가 생기면 자동으로 새로고침을 실행한다
    • automatic routing: pages dir 또는 app dir에 생성하는 파일 또는 폴더에 따라 자동적으로 라우팅이 된다
    • single file components: 'style jsx'를 사용하여 컴포넌트 내부 스코프만을 가지는 css를 만들 수 있다
    • globals.css를 통한 전역적인 css의 적용도 가능함
    • server side landering이 가능함
    • code splitting이 손쉽게 가능함(dynamic import)
    • typescript의 적용이 자동적으로 된다
  • library VS framework, framework를 사용함(reactjs는 library)
    • 자율성보단 짜여진 규칙에 따라야 함
    • 라우팅을 index.js에서 따로 하는 것이 아닌 pages의 폴더에 생성하는 파일의 이름이 자동으로 라우팅되어 페이지명이 됨
    • 컴포넌트를 적절한곳에 잘 넣어서 사용하면 됨
  • 정적 프리 랜더링(static pre-rendering)
    • reactjs는 CSR ONLY, nextjs는 SSR로 프리랜더링 후 CSR로 전환
    • react는 느린 인터넷 상에서 js가 로딩될때까지 어떤 코드도 보여주지 않고, 백지의 페이지로 시작된다
    • nextjs는 기초적인 html이 소스코드에 들어 있어 api요청 부분을 제외한 페이지는 보여지고, 이것은 ux에서 강점으로 작용한다
      • react와 js가 로딩되기 전이더라도, 페이지에 설정된 초기값(useState등 hook의 초기값을 기초로 한 내용)을 기초로 랜더링된 페이지를 보여준다
      • 이후 로딩이 완료되면 우리가 작성한 페이지가 보여지게 됨
  • pages
    • 컴포넌트를 export하고 있는 파일을 넣으면 자동으로 라우팅되어 파일 이름으로 페이지가 추가됨
    • 라우팅을 하고, 라우터를 설계하고, 랜더를 하는 일련의 과정을 대신 해줌
    • 기본페이지인 '/'은 index.js로 적용됨
    • 404 페이지도 샘플 페이지가 적용되어 있음, 디자인만 수정하여 사용하면 됨
    • 페이지 내에서 jsx타입의 코딩도 가능함

실제 사용 실습


  • Link, 링크부분을 감싸는 전용 태그가 존재함(import Link from 'next/link')
    • 링크로 이동시 전체 리랜더링을 막는 역할을 함(Link의 child로 a tag 사용 불가)
  • css modules 사용
    • '*.module.css'식의 이름으로 작성된 파일에서의 class속성을 전역으로 사용할 수 있음
    • 중복되는 class의 경우라도 html상에 임의의 str을 추가하여 중복에러가 나지 않음
    • 크게 선호되지는 않음
  • styles JSX
    • return 최하단에
    • css modules와 마찬가지로 현재 적용한 컴포넌트 내에서 독립적인 className을 갖는다(전역 사용시 jsx global)
  • App Component
    • _app.js, 일종의 App blueprint로 nextjs pages의 파일 중 가장 먼저 확인하는 파일
    • 어떻게 페이지가 있어야 하는지, 어떤 컴포넌트가 어떤 페이지에 있어야 하는지를 표시함
    • 또는 style jsx global과 같은 값들을 여기에서 적용함
    • globals.css 또한 여기에서 import해서 사용해야 함(다른 컴포넌트에서는 불가)
  • Layout Component
    • Layout을 작성하여 App에 적용하고 NavBar나 Footer같은 항상 보이는 글로벌 컴포넌트들을 여기서 배치함
  • Head Component
    • app의 head를 관리하는 전용 태그가 존재(import Head from 'next/head')
    • return의 div 최상단에 적용함
    • Head 내 title의 경우 단일 str로 이루어져야 한다
      • {${title} | Next Movies}등의 방식으로 변수를 단일 str화해서 적용한다
  • public 폴더 내의 이미지파일 경로 간소화
    • /~~ 사용: src에 일일이 경로 지정 없이 src='/이미지이름.확장자'로 사용
  • Route 관련
    • '/about'의 경우 뒤에 추가적인 페이지가 없을 경우는 'page이름.js'로 구성하면 된다
    • '/'에 추가분기가 필요한 url, 예로 '/movies/all'과 같은 구성을 하고자 한다면
    • pages의 폴더 안에 movies라는 폴더를 추가로 생성하고 그 안에 all.js를 작성하면 된다
    • '/movies'의 페이지는 폴더 안에 index.js를 작성하면 된다
    • 추가분기가 아이디와 같은 변수일 경우 [변수].js(예: [id].js)를 작성하면 된다
    • 위와 같은 식으로 라우팅을 자유롭게 구성할 수 있다
    • useRouter를 사용해 추가분기로 선택한 변수를 적용하여 라우팅할 수 있다
      • const router = useRouter()와 같이 사용한다
      • router.push()를 통해 사용할 주소를 자유롭게 세팅할 수 있다
      • router를 통하여 api를 통해 받은 데이터들을 활용할 수 있다
    • catch All
      • [변수].js에서 [...변수]를 적용하면 변수에 담긴 여러값들을 전부 받아서 사용할 수 있다
      • id나 title등 여러 값을 받아와 그 중 아무거나 입력을 해도 같은 곳으로 접속된다
  • 404page는 404.JS 파일을 작성하여 사용하면 된다

0개의 댓글