/react-ts-diet-frontend

A simple, visualized guide to plan and review one's diet

Primary LanguageTypeScriptMIT LicenseMIT

ko en

๐Ÿ“’ NutriNotes



ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ๊ธฐํš ๋ฐฐ๊ฒฝ: ์ปดํ“จํ„ฐ์™€ ํ•จ๊ป˜ ์˜ค๋žœ ์‹œ๊ฐ„ ์ž๋ฆฌ์— ์•‰์•„์„œ ๋งค์ผ ํ–„๋ฒ„๊ฑฐ(๐Ÿ”)๋ฅผ ๋จน๊ณ  ์žˆ๋Š” ์ €๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ , ์ผ์ž๋ณ„๋กœ ์‹๋‹จ์„ ๊ธฐ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

  • ํ•œ ์ค„ ์„ค๋ช…: ์‹๋‹จ์„ ๊ฒ€์ƒ‰/๊ธฐ๋ก/๋ถ„์„ํ•˜์—ฌ ํšจ๊ณผ์ ์œผ๋กœ ์‹์Šต๊ด€์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ: ์‹๋‹จ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šด ์‚ฌ๋žŒ๋“ค

  • ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ

  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: 2023/07 ~ ์ง„ํ–‰ ์ค‘

  • ๋ฐฐํฌ ์ฃผ์†Œ: https://nutrinotes.net


์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿฅ— ์‹๋‹จ ๋‘˜๋Ÿฌ๋ณด๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์‹๋‹จ์„ ์บ๋Ÿฌ์…€๋กœ ๋‘˜๋Ÿฌ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๊ฐ ์‹๋‹จ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ƒ์„ธ ์˜์–‘ ์„ฑ๋ถ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. recipes

๐Ÿ”Ž ์‹๋‹จ ๊ฒ€์ƒ‰

์™ธ๋ถ€ API(EDAMAM)์—์„œ ๊ฐ€์ ธ์˜จ ์‹๋‹จ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์ƒ์„ธ ์˜์–‘ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. search


โœ๏ธ ์‹๋‹จ ๊ธฐ๋ก

์บ˜๋ฆฐ๋”์—์„œ ์ผ์ž๋ฅผ ์ง€์ •ํ•ด ์‹๋‹จ์„ ์ €์žฅํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ•ด๋‹น ์ผ์ž์— ์ €์žฅ๋œ ์‹๋‹จ๊ณผ ์˜์–‘ ์„ฑ๋ถ„์„ ๋ถ„์„ํ•ด ์‹œ๊ฐํ™”ํ•œ ์ฐจํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dashboard


๐Ÿ“ƒ ํšŒ์› ๊ฐ€์ž… & ๋กœ๊ทธ์ธ

JWT๋ฅผ ํ™œ์šฉํ•œ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. React Hook Form๊ณผ Zod๋ฅผ ์‚ฌ์šฉํ•ด ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํผ์„ ๊ด€๋ฆฌํ•˜๊ณ , debounce๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฒคํŠธ ์ค‘๋ณต ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. register login

๊ณ ๋ฏผํ–ˆ๋˜ ์ง€์ ๋“ค

๐Ÿ“’ (๋…ธ์…˜์—์„œ ๋ณด๊ธฐ)

1. ์›น ์‚ฌ์ดํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”

ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ , ๊ฐœ์„ ์ ์„ ์ฐพ๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค. (๋ธ”๋กœ๊ทธ)

  • ์ดˆ๊ธฐ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ๊ฐ์†Œ๋ฅผ ํ†ตํ•œ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒ

    • ๋ถˆํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์ •๋ฆฌ. ํฐ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋˜ Lodash์˜ ๊ฒฝ์šฐ, ํŠธ๋ฆฌ์‰์ดํ‚น์„ ์œ„ํ•ด default import๋กœ ํ•„์š”ํ•œ ํ•จ์ˆ˜๋งŒ ๋ฐ›์•„์˜ค๋„๋ก ์ˆ˜์ •.

    • ํŽ˜์ด์ง€ ๊ธฐ๋ฐ˜ dynamic import๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์‹œ์ ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์ดˆ๊ธฐ์— ๋กœ๋“œํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ์†Œ.

  • ์ด๋ฏธ์ง€ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ์„ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ตœ์ ํ™”

    • loading=lazy๋ฅผ ํ™œ์šฉํ•˜๊ณ , ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•ด IntersectionObserver๋ฅผ ์‚ฌ์šฉํ•œ LazyImg ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ. useObserver ํ›…์—์„œ ์˜ต์ €๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ณต์œ ํ•˜๊ณ , ๋ทฐํฌํŠธ์™€ intersectingํ•˜๋Š” ๊ฒฝ์šฐ, ์ €ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€๋ฅผ ๊ณ ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ.

    • ์ด๋•Œ, ์œ ์˜ํ•  ์ ์€ ์ดˆ๊ธฐ ํ™”๋ฉด์— ๋‚˜์˜ค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ด์ง€ ๋กœ๋”ฉํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ ์ง€์—ฐ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์บ๋Ÿฌ์…€์˜ ์ฒซ ํŽ˜์ด์ง€์—๋Š” EagerLoad ์ด๋ฏธ์ง€๋ฅผ, ์ดํ›„์—๋Š” LazyLoad ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉ.

  • ๋ฐ์ดํ„ฐ Prefetch ๋ฐ Preload๋ฅผ ํ†ตํ•œ render-as-you-fetch

    • React Router์˜ loader๋ฅผ ํ™œ์šฉํ•ด ๋ผ์šฐํŠธ ์ง„์ž… ์ „ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ prefetchํ•˜๊ณ , ์ดํ›„ TanStack Query์˜ useQuery๋ฅผ ํ™œ์šฉํ•ด ์บ์‹ฑ ๋ฐ ๋ฌดํšจํ™”.

    • prefetchQuery๋ฅผ ํ†ตํ•ด ์œ ์ € ์ธํ„ฐ๋ž™์…˜(e.g. ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ hover) ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ prefetchํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉ์„ ์‹œ์ž‘ํ•˜๊ณ , useQuery์—์„œ ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ

๐Ÿ’ญ ์›น ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ํ†ตํ•ด FCP 0.6์ดˆ, LCP 1.5์ดˆ ๊ฐœ์„ ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋‹จ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‹œ ๋กœ๋”ฉ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•  ์š”์†Œ๋“ค์„ ์•Œ๊ณ , ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์•„์‰ฌ์› ๋˜ ์ ์€ ํ˜„์žฌ third-party api๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€ ์••์ถ•, WebP, AVIF์™€ ๊ฐ™์€ ์›น ํŽ˜์ด์ง€์— ์ตœ์ ํ™”๋œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ ์ž…๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ฐฑ์—”๋“œ์—์„œ ๊ฐ„๋‹จํ•œ ์ž‘์—… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ๋” ํšจ์œจ์ ์ธ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

2. ์ ‘๊ทผ์„ฑ ๋ฐ SEO ์ตœ์ ํ™”

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

  • ์‹œ๋งจํ‹ฑ ๋งˆํฌ์—… ์ ์šฉ (๋ธ”๋กœ๊ทธ)

    header, h, section, article, button๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ด๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆํฌ์—….

  • aria ๋ฐ image alt ํƒœ๊ทธ ์‚ฌ์šฉ

    section๊ณผ article ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ ๋ณด์—ฌ์ง€๋Š” ์ œ๋ชฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ aria-labelledby๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ aria-label์„ ์‚ฌ์šฉํ•ด ์—ญํ• ์„ ๋ช…์‹œ.

  • Open Graph ๋ฐ ๋ฉ”ํƒ€ ํƒœ๊ทธ ํ™œ์šฉ

    title, description, author, keywords ๋“ฑ์˜ ๋ฉ”ํƒ€ ํƒœ๊ทธ ๋ฐ OpenGraph๋ฅผ ํ™œ์šฉํ•˜์—ฌ SEO๋ฅผ ์ตœ์ ํ™”.

์›น ํ‘œ์ค€ ๋ฐ ์›น ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ ๋งˆํฌ์—… ๋ฐ SEO ๊ฐœ์„  ์ž‘์—…์„ ํ†ตํ•ด ์›น ์ ‘๊ทผ์„ฑ๊ณผ SEO์˜ ์ค‘์š”์„ฑ์„ ์ดํ•ดํ•˜๊ณ , LightHouse ๊ธฐ์ค€ ํ‰๊ท  ์ง€ํ‘œ 19.76% ํ–ฅ์ƒ์ด๋ผ๋Š” ์„ฑ๊ณผ๋ฅผ ๋„์ถœํ•˜์˜€์Šต๋‹ˆ๋‹ค.

3. AWS ๋ฐฐํฌ

  • ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋ฌธ์ œ

    • CORS ์—๋Ÿฌ
      • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญ์„ redirectํ–ˆ์ง€๋งŒ, ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋ฒ„์—์„œ cors ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•ด CORS ํ—ค๋” ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐ.
    • Mixed Content:
      • ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„ ์š”์ฒญ์„ CloudFront๋ฅผ ์‚ฌ์šฉํ•ด HTTPS๋กœ redirectํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์š”์ฒญ๋„ LoadBalancer์— SSL/TLS๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐ.
  • S3 ๋ฒ„ํ‚ท ์—…๋ฐ์ดํŠธ์™€ ๋ฐฐํฌ ํ™˜๊ฒฝ ๋ถˆ์ผ์น˜

    • ๋™์  importํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ–ˆ์„ ๋•Œ, Failed to fetch dynamically loaded module ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ.

    • ๋ฒ„ํ‚ท์˜ ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๊ณ  ๋‚ด์šฉ์„ ์—…๋ฐ์ดํŠธํ–ˆ์ง€๋งŒ, ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. CloudFront์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์บ์‹ฑ ๋ฌธ์ œ์ธ ๊ฒƒ์„ ํ™•์ธํ–ˆ๊ณ , ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์‚ญ์ œ ๋ฐ ๊ฐ•์ œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Œ.

    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋ถ„ํ• ์ด ๋˜์ง€ ์•Š์€ ์ด์ „ ๋ฒ„์ „์„ ๋จผ์ € ์—…๋กœ๋“œํ•˜๊ณ  CloudFront์—์„œ ์บ์‹œ๋ฅผ ์ „์ฒด ๋ฌดํšจํ™”ํ•œ ํ›„ ์ฝ”๋“œ ๋ถ„ํ• ํ•œ ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜์—ฌ ํ•ด๊ฒฐ.

  • ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ๋ฐฑ์—”๋“œ HTTPS ๊ตฌ์„ฑ

    • Route53์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์œผ๋กœ ์„œ๋ฒ„ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑ์˜ ์–ด๋ ค์›€.

    • [ํ”„๋ก ํŠธ] Route53์˜ ๋„๋ฉ”์ธ์€ S3๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , CloudFront์—์„œ https๋กœ redirect.

    • [๋ฐฑ์—”๋“œ] ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋„๋ฉ”์ธ์˜ ์„œ๋ธŒ ๋„๋ฉ”์ธ์„ ๋งŒ๋“ค์–ด LoadBalancer์—์„œ https๋กœ redirectํ•˜๊ณ , ์ด๋ฅผ target group์— ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  EC2 ํฌํŠธ๋ฅผ ๋ช…์‹œํ•ด ์—ฐ๊ฒฐ.

SSL/TLS๋ฅผ ์ ์šฉํ•œ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ์„ ๋ณด์žฅํ•˜๊ณ , ์พŒ์ ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ๊ณผ์ •์—์„œ ์บ์‹œ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ์„ ์ดํ•ดํ•˜๊ณ , ๋กœ๊ทธ ๋ถ„์„์„ ํ†ตํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ํ‚ค์› ์Šต๋‹ˆ๋‹ค.


์„ค์น˜ ๊ฐ€์ด๋“œ

NutriNotes๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ:

์š”๊ตฌ์‚ฌํ•ญ

  • Node 20.5.1
  • Npm 10.0.0

ํ”„๋ก ํŠธ์—”๋“œ

  1. ํด๋ก  git clone https://github.com/minjidev/react-ts-diet-frontend.git

  2. ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ cd react-ts-diet-frontend

  3. ์˜์กด์„ฑ ์„ค์น˜ npm install

  4. .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”.

    VITE_EDAMAM_APP_ID = YOUR_EDAMAM_APP_ID;
    VITE_EDAMAM_APP_KEY = YOUR_EDAMAM_APP_KEY;
    VITE_API_BASE_URL = BACKEND_ENDPONT;
  5. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘: npm run dev

๋ฐฑ์—”๋“œ

  1. ํด๋ก  git clone https://github.com/minjidev/react-ts-diet-backend.git

  2. ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ cd react-ts-diet-backend

  3. ์˜์กด์„ฑ ์„ค์น˜ npm install

  4. .env ํŒŒ์ผ์„ ์ƒ์„ฑ

    PORT = BACKEND_PORT;
    JWT_SECRET_KEY = YOUR_JWT_SECRET_KEY;
  5. nodemon ์‹คํ–‰: npm start


๊ธฐ์ˆ  ์Šคํƒ

ํ™˜๊ฒฝ

Visual Studio Code Git GitHub

ํ”„๋ก ํŠธ์—”๋“œ

Vite React TypeScript

React Router React Query Recoil Axios styled-components React Hook Form Zod Chart.js

๋ฐฑ์—”๋“œ

Node.js Express JSON Web Tokens MongoDB Mongoose

๋ฐฐํฌ

Amazon S3 Amazon EC2 Amazon Route 53


๊ธฐํƒ€

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

Type ์„ค๋ช…
Feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
Fix ๋ฒ„๊ทธ ์ˆ˜์ •
Refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง, ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ, ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ
Style CSS ๋ฐ ๋ ˆ์ด์•„์›ƒ ์ž‘์—…์ˆ˜์ •
Docs ๋ฌธ์„œ ์ˆ˜์ •
Chore ์œ ์ง€๋ณด์ˆ˜