console.log

[Next.js] Next.js + TypeScript ํด๋”๊ตฌ์กฐ ๋ณธ๋ฌธ

๊ฐœ๋ฐœ๊ณต๋ถ€/Next.js

[Next.js] Next.js + TypeScript ํด๋”๊ตฌ์กฐ

foresight 2023. 9. 10. 21:07
๐Ÿ’ก React ๋‹จ์ 

- CSR์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌํ„ธ์‚ฌ์ดํŠธ ํฌ๋กค๋ง ๋ด‡๋“ค์ด React ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ๋ชปํ•จ
- SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”) ์ ์šฉ ๋ถˆ๊ฐ€

๋”ฐ๋ผ์„œ SSR์„ ์ง€์›ํ•˜๋Š” Next.js ์‚ฌ์šฉ !

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • yarn create next-app
  • yarn dev

 

Next.js ์— Typescript ์ ์šฉ

  • next-env.d.ts ํŒŒ์ผ ์ƒ์„ฑ
  • yarn add --dev typescript @types/react @types/node

 

ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

apis

  • API๋ฅผ ๋ชจ์•„ ๋†“์€ ํด๋”
  • *.ts ํ˜•ํƒœ์˜ ํŒŒ์ผ ๊ด€๋ฆฌ
  • ํŽ˜์ด์ง€ ๋˜๋Š” ๋„๋ฉ”์ธ ๋ณ„๋กœ ts ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
apis
- main.ts
- auth.ts
...

components

  • ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ์ ์šฉ
components
- common
	- Alert
    	- index.tsx
        - styles.tsx
- main
	- Acomponent
    	- index.tsx
        - styles.tsx
- auth
	- Bcomponent
    	- index.tsx
        - styles.tsx
// pages ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํŽ˜์ด์ง€๋ณ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

components
- common
	- Alert
    	- index.tsx
        - styles.tsx
        
- pages
	- main
        - Acomponent
            - index.tsx
            - styles.tsx
    - auth
        - Bcomponent
            - index.tsx
            - styles.tsx

constants

  • ์ƒ์ˆ˜๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
    • API ๋„๋ฉ”์ธ ์ฃผ์†Œ
    • ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ URL
    • ์Šคํ† ๋ฆฌ์ง€ Key ๊ฐ’
    • ๋“ฑ๋“ฑ ….

containers

  • ์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • components ํด๋”์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ

fixtures (optional)

  • ์ƒํƒœ์˜ ์ดˆ๊ธฐ๊ฐ’์ด๋‚˜ Mock ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

hooks

  • hooks ํ•จ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • use~.ts ํ˜•ํƒœ์˜ ํŒŒ์ผ ๊ด€๋ฆฌ
hooks
- common
	- useAlert.ts
    - useAuth.ts
    
- useName1.ts
- useName2.ts

interfaces

  • ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํƒ€์ž…์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • ํŽ˜์ด์ง€ ๋˜๋Š” ๋„๋ฉ”์ธ ๋ณ„๋กœ *.ts ํŒŒ์ผ๋“ค ๊ด€๋ฆฌ

pages

  • Next.js์—์„œ ํ•„์ˆ˜๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋”
  • ํ•˜์œ„ ํด๋” & ํŒŒ์ผ๋“ค์€ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • ํŽ˜์ด์ง€ ํŒŒ์ผ์€ *.page.tsx ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ
pages
- main
	- index.page.tsx
    - styles.tsx
- auth
	- index.page.tsx
    - styles.tsx

styles.tsx๋ฅผ ํŽ˜์ด์ง€๋กœ ์ธ์‹ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด *.page.tsx ๋„ค์ด๋ฐ ๋ฃฐ ์‚ฌ์šฉ

  • ํŽ˜์ด์ง€ ํŒŒ์ผ ํ˜•ํƒœ ์„ค์ •

next.config.js: Custom Page Extensions | Next.js

 

next.config.js Options: pageExtensions | Next.js

Using Pages Router Features available in /pages

nextjs.org

public

  • ์ •์  ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • css, font, image ํŒŒ์ผ๋“ค ๊ด€๋ฆฌ
public
- normalize.css
- images
	- image1.png
    - image2.png
// page๋ณ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

public
- pages
	- main
    	- image1.png
        - image2.png
    - auth
    	- image1.png
        - image2.png

slices (optional)

  • Redux-toolKit ์˜ slice๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • recoil ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ƒํƒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋งž๊ฒŒ ํด๋”๋ช… & ๊ตฌ์กฐ ๋ณ€๊ฒฝ

styles

  • ์Šคํƒ€์ผ ํŒŒ์ผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ€์ผ ๊ด€๋ฆฌ

utils

  • util๋“ค์„ ๋ชจ์•„๋†“์€ ํด๋”
  • ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ จ ํ•จ์ˆ˜, ๋‚ ์งœ ๋ณ€ํ™˜ ํ•จ์ˆ˜, ๋“ฑ๋“ฑ …