๐Ÿ˜† My name is Ez : ์‰ฝ๋‹ค ์‰ฌ์›Œ ๊ฐœ๋ฐœlife

[NextJs] : App Router ? Server Component? ๋ณธ๋ฌธ

โŒจ๏ธ Web Front-End/NextJs

[NextJs] : App Router ? Server Component?

์ด์ง€ํ‚˜ 2023. 7. 27. 20:50

https://nextjs.org/blog/next-13-4

 

๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Next.js 13 ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•˜๋Š” App Router ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค... (๊ถŒ๊ณ ์‚ฌํ•ญ์ด๋ผ๊ณ  ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•จ)

์‚ฌ์‹ค ๋งŽ์€ ์ž๋ฃŒ๋‚˜ ์ฐธ๊ณ ํ• ๋งŒํ•œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์•„์ง๊นŒ์ง€ ๊ฑฑ์ •์ด ๋˜๊ธด ํ•œ๋‹ค. ๊ธฐ์กด์˜ Page Router ๋ฐฉ์‹์ด ๋” ์ต์ˆ™ํ•ด์„œ ๊ทธ๋Ÿฐ ๊ฑธ๊นŒ?..

 

13 ๋ฒ„์ „์—์„œ๋Š” ์ผ๋‹จ Page ํด๋” ์•ˆ์—์„œ ์›ํ•˜๋Š” ____. tsx๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ผ์šฐํŒ… ํ–ˆ๋‹ค๋ฉด App Router๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— page.tsx๋ฅผ ๋งŒ๋“ค์–ด์•ผ์ง€ ๊ฒฝ๋กœ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ํ•œ๋‹ค. 

 

 

App Router - page.js

 

์‚ฌ์‹ค ๋ผ์šฐํŒ…์ •๋„์•ผ ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์ง€๋‹ˆ๊น....

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ํด๋”๋งˆ๋‹ค ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ File Convention์ด ์กด์žฌํ–ˆ๋‹ค. (๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ !!)

https://nextjs.org/docs/app/api-reference/file-conventions

์ง์ ‘ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์„œ ํ•ด๋ณด๊ฑด layout, loading, error, page ์ •๋„ ๊ตฌํ˜„ํ•ด ๋ดค๋‹ค. 

 

layout ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ๊ณ ์ •์ ์œผ๋กœ ๊ณ„์† ์œ ์ง€๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๊ทธ ํ•˜์œ„๋กœ page์—์„œ ์ž‘์„ฑํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋‚˜์™”๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด search๋ผ๋Š” ํด๋” ๋‚ด์— ํ•˜์œ„ ํด๋”๋กœ [searchParam]์ด๋ผ๊ณ  ์ž‘์„ฑํ•˜๊ณ  ์ด ํด๋” ๋‚ด์— ๋˜‘๊ฐ™์ด page, loading ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น page์•ˆ์—์„œ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ ํ†ต์‹ ์„ ํ•˜๋‹ˆ๊น loading์ด ์ž๋™์œผ๋กœ ๋‚˜์™”๋‹ค. ( ์ด์ „์—๋Š” react-query๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด isLoading์„ ์‚ฌ์šฉํ–ˆ์„ ํ…๋ฐ) 

 

์•„๋ฌดํŠผ ์‹ ๊ธฐ!  

 

* ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ ํ•ด ๋ณด๋ฉด ์ข€ ๋” ์ดํ•ด๊ฐ€ ํŽธํ•  ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๊ทธ๋Ÿญ์ €๋Ÿญ ํ•  ๋งŒ!


Server Component๋ผ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ ธ๋‹ค. ( ์ฐพ๋‹ค ๋ณด๋‹ˆ React18 ๋ฒ„์ „ ์ž๋ฃŒ๋ฅผ ๋ณด๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์•˜๋‹ค. ) 

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ Client component๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋น„๊ตํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์ข€ ๋” ํŽธํ–ˆ๋‹ค. 

 

 

๊ฐ„๋‹จํ•˜๊ฒŒ Client component๋ฅผ ์‚ดํŽด๋ณด๋ฉด 

  • onClick๊ณผ ๊ฐ™์€ ์ƒํ˜ธ์ž‘์šฉ 
  • React  lifecycle hooks๋ฅผ ์‚ฌ์šฉ (useEffect, useState...) 
  • ์ตœ์ƒ๋‹จ์— 'use client'๋ฅผ ์„ ์–ธ ( ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ ์–ธํ•ด์ค˜์•ผ ํ•จ!)

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ Client Component๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 


 

Sever Componet๋Š” ์ƒํ˜ธ์ž‘์šฉ์ด ์—†๊ณ  , ๋‹จ์ˆœํ•˜๊ฒŒ ํ…์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์„œ๋ฒ„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์„œ ์„ฑ๋Šฅ์ด ์˜ฌ๋ผ๊ฐ€๊ณ  ๋กœ๋”ฉ์†๋„๋„ ๋นจ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์˜ˆ์‹œ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์กฐํšŒํ•˜๋Š” api๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ •๋„์˜ ์ฝ”๋“œ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ๋‹ค. 

(์•„๋ฌดํŠผ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ํŽ˜์ด์ง€๋Š” ์—†์–ด์„œ... ์ดํ•ด์ •๋„๋งŒ ํ•˜๊ณ  ๋„˜๊ฒผ๋‹ค.)

 

Server Componet Vs Client Componet

 

 

Sever Componet๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ํ™•์‹คํ•˜๊ฒŒ ๊ฐ์ด ์žกํžˆ์ง€๋Š” ์•Š๋Š”๋‹ค. ๋‚ด๊ฐ€ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ๋Š” Client Compoent๋กœ ๋ฐ–์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค... ๋Œ€๋ถ€๋ถ„ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ณ , ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…๋„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 


 

 

์ง€๊ธˆ์€ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•œ ๋ถ€๋ถ„๋งŒ ์“ด ๊ฑฐ๋ผ์„œ ์ดํ›„์— ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ดํ•ดํ•œ ๋ฐ”๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค. 

 

์–ด๋ ต๋‹ค๐Ÿฅฒ

 

 

 

์ฐธ๊ณ ๋งํฌ

https://nextjs.org/blog/next-13-4

 

Next.js 13.4

Next.js 13.4 moves App Router to stable, Turbopack to beta, and introduces experimental support for Server Actions.

nextjs.org

 

'โŒจ๏ธ Web Front-End > NextJs' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Design Pattern] : Atomic Design (์•„ํ† ๋ฏน ๋””์ž์ธ)  (1) 2023.07.20