생활코딩 Next.js 13 강의를 듣고 정리한 내용입니다.
강의 링크 : Next.js 13
Full Stack Web Application Framework !
React
로, 백엔드는 Express.js
와 비슷한 시스템으로 구현> npx create-next-app@latest .
↑ 세팅은 위와 같이 진행함
layout.js
파일이 기본적인 웹 페이지의 골격을 구성함layout.js
, page.js
, global.css
에서 필요없는 부분 제거...
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
...
build
: 배포판을 빌드하는 명령어start
: 배포판을 서비스하는 명령어npm run build
커맨드를 입력하면, .next
폴더 아래에 배포판이 만들어짐npm run start
커맨드를 입력하면, .next
폴더 아래에 저장된 내용이 서비스되기 시작path
를 이루는 각각의 요소를 segment
라고 함
라우팅은 경로에 따라서 어떤 컨텐츠를 어떤 방식으로 보여줄 것인지 결정하는 것!
/create
경로에 들어갈 페이지를 만들고 싶으면, app
폴더 아래에 create
폴더를 생성하고, 그 아래에 page.js
라는 약속된 이름의 파일 생성
→ Next.js 라우팅은 폴더 경로로 이루어지기 때문에👀
/create
경로로 들어가면, app
폴더 아래에 create
폴더를 찾고, 그 아래 있는 page.js
와 결합될 layout.js
가 있는지 찾음
create
폴더 아래에 layout.js
가 없으면, 부모 폴더로 나가서 layout.js
를 찾음
layout.js
을 찾으면 {children}
위치에 들어가게 된다!
// src/app/create/layout.js
export default function Layout(props) {
return (
<form>
<h2>Create</h2>
{props.children}
</form>
);
}
layout.js
에 적용됨💡 다이나믹 라우팅(Dynamic Routing) : 경로를 동적으로 설정하는 것
read/1
, read/2
와 같은 경로의 숫자에 id
라는 이름을 붙이고 싶다면, 폴더 이름을 [id]
이런 식으로 설정함!page.js
를 만듦export default function Read(props) {
return(
<>
<h2>Read</h2>
{props.params.id}
</>
)
}
props.params.id
를 통해 폴더명에 해당하는 [id]
값을 가져올 수 있음React
는 JavaScript
기술이기 때문에 JavaScript
가 동작하지 않으면 아예 페이지가 렌더링 되지 않음Disable JavaScript
를 실행해 보자!Next.js가 서버 쪽에서 React를 실행해서, 그 응답 결과를
.next
에 저장해서, 그것을 응답하기 때문에!
fast 3G
를 설정하면, 인위적으로 네트워크 속도를 지연시킬 수 있음import Link from 'next/link'
import './globals.css'
export const metadata = {
title: 'Web tutorials',
description: 'Generated by hyehye',
}
export default function RootLayout({ children }) {
return (
<html>
<body>
<h1><Link href='/'>WEB</Link></h1>
<ol>
<li><Link href='/read/1'>html</Link></li>
<li><a href='/read/2'>css</a></li>
</ol>
{children}
<ul>
<li><a href='/create'>Create</a></li>
<li><a href='/update/1'>Update</a></li>
<li><input type="button" value="delete" /></li>
</ul>
</body>
</html>
)
}
a
태그를 Link
태그로 바꾸면 "Single Page Application"처럼 동작함!public
폴더를 통해 사용 가능global.css
: 전역적인 디자인 적용Routing
> Route Handlers
항목 참고npx json-server --port 9999 --watch db.json
--watch
옵션을 주면, db.json
이 변경되었을 때 자동으로 서버 재실행{
"posts": [
{
"id": 1,
"title": "json-server",
"author": "typicode"
}
],
"comments": [
{
"id": 1,
"body": "some comment",
"postId": 1
}
],
"profile": {
"name": "typicode"
}
}
db.json
파일이 생성됨{
"topics": [
{
"id": 1,
"title": "html",
"body": "html is ..."
},
{
"id": 2,
"title": "css",
"body": "css is ..."
}
],
"posts": [
{
"id": 1,
"title": "json-server",
"author": "typicode"
}
],
"comments": [
{
"id": 1,
"body": "some comment",
"postId": 1
}
],
"profile": {
"name": "typicode"
}
}