본문 바로가기

prev/NextJS

NestJS 해보기

맨날 react 기반 클라이언트 사이드 렌더링을 해보다가 문득 궁금했다.

"서버 사이드 랜더링은 뭘까, 뭐가 다를까" 하는 생각이 들었는데, Nestjs를 하면 서버사이드렌더링을 할 수 았다고?!!

바로 시작해보기로했다.

 

 

설치

npx create-next-app@latest

설치는 간단했다. 다음과 같이 입력하고 엔터누르면 프로젝트가 생성됬다. 

다음 선택은 자기가 원하는대로 하면된다. 남자답게 눌러버려라. 

나는 일단 간단한 테스트만 진행할 예정이기 때문에 다음과같이 router 를 제외하고는 다 'NO'를 눌렀다. 

 

다음과같이 프로젝트 파일들이 있고,

 

app폴더 : 내가 코드를 짤 폴더라고 생각하면되고,

page.js: 메인페이지

layout.js : 메인페이지 감싸는 용도의 페이지

public 폴더 : 이미지나 static 파일 보관용

next.config.js : nextjs 설정 파일

node_modules 폴더 : 설치한 라이브러리 보관용 폴더 

package.json : 설치한 라이브러리 버전 기록용 파일

 

등등 이 있네... 

 

작동방식은 react랑 거의 똑같다. 아니 그냥 80% 이상 똑같다. 

 

import Image from 'next/image'
import styles from './page.module.css'


export default function Home() {
  let name = 'park'; 
  return (
    <div>
        <div className='title'>
        <h4>애플후레시</h4>
        {/* 데이터 바인딩 문법 {} */}
        <h4>by dev {name}</h4> 
        </div>

    </div>
  )
}

간단하게 다음과같이 코드를 작성했고, 데이터 바인딩 문법을 써서, 변수의 값을 태그안으로 넣을 수 도 있다. 

짠. 생각보다 간단하네 

 

근데 신기한건 다른 페이지를 만들때다. react에서는 react-router-dom 이라는 라이브러리를 활용해서 각각의 Router를 설정해줘야 페이지 이동을 할 수 있었는데, 여기서는 그냥 app/(내가원하는 페이지명) 폴더를 만들고, 그안에 .js 파일을 생성하면 그 페이지를 이동할 수 있게된다.

Next.js 의 자동 라우팅

url로 페이지 나누는걸 라이팅이라고 하는데, 라이팅하려면 일반적인 웹서버들은 "누가/list로 접속하면 상품목록 html을 보여주세요~" 라고 서버에 코드를 짜놔야하는데, Next.jss를 쓰면 그런 코드를 짤  필요가 없이 파일 하나만 만들면 자동으로 된다고 한다. 

 

import React from 'react'

export default function List() {
    let 상품 = ['Tomatos','Pasta']
  return (
    <div className='title'>
        <h4>상품목록</h4>
        <div className='food'>
            <h4>상품1 $40</h4>
        </div>
        <div className='food'>
            <h4>상품2 $40</h4>
        </div>
    </div>
  )
}

페이지 이동이 간단하게 된다. (아니 편하네 ) 

 

 

Navbar 만들기 

모든페이지에 navbar를 띄우게 만들어야하는데, 여기서 모든 페이지에 navbar를 띄우게 할려면 작성되는 곳이 중요하다. 

 

중복되는 html은 layout.js 파일에서...

Next.js는 실은  page.js를 보여줄 때 옆에 layout.js 파일이 있으면 layout.js 내용안에 page.js 내용을 담아서 보여줍니다. 

 

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body className={inter.className}>
        <div className='navbar'>
            <Link href="/">홈</Link>
            <Link href="/list">List</Link>
        </div>
        {children}
      </body>
    </html>
  )
}

 

코드를 확인해 보면 {children}이라고 표기된 부분이 있는데, 이게 page.js 넣을 곳을 표시하는 문법입니다.  그렇기에 모든 페이지에 navbar를 입력하려면 다음과 같이 layout에 {children}위에 넣으면 됩니다.(나중에 navbar를 컴포넌트로 빼서 써도 될듯?)

 

 

 

일단 오늘은 이것까지 구현해봤는데, 확실히 react를 공부한 뒤에 next를 접한거라 사용하기에는 크게 어렵지는 않았다. 아직 초반부라 그럴수도... 더 좋고 재밌는 기능들을 지속적으로 해봐야겠다. 

 

참고
https://codingapple.com/