Skip to content

๐ŸŒฆ๏ธ ๋‚ ๊พธ - ๋‚˜๋งŒ์˜ ๋‚ ์”จ ๊พธ๋ฏธ๊ธฐ

Notifications You must be signed in to change notification settings

ganeodolu/nal-ggu-revision

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

96 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒฆ๏ธ๋‚ ๊พธ

์ตœ์ข… ๊ตฌํ˜„ ํ™”๋ฉด ์ด๋ฏธ์ง€

์‹œ์ž‘ํ™”๋ฉด ๋ฉ”์ธํ™”๋ฉด ์„ค์ •ํ™”๋ฉด
์‹œ์ž‘ํ™”๋ฉด ๋ฉ”์ธํ™”๋ฉด ์„ค์ •

์„ค์น˜, ํ™˜๊ฒฝ์„ค์ • ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•

  • env : 3๊ฐ€์ง€ API Key ํ•„์š”
    • ๋„ค์ด๋ฒ„ ๋งต API
    • ๊ณต๊ณต๋ฐ์ดํ„ฐ (OPEN API)
      • ๊ธฐ์ƒ์ฒญ ๋‹จ๊ธฐ์˜ˆ๋ณด ์กฐํšŒ์„œ๋น„์Šค
      • ํ•œ๊ตญ์ฒœ๋ฌธ์—ฐ๊ตฌ์› ์ถœ๋ชฐ์‹œ๊ฐ ์ •๋ณด

yarn install  // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

yarn start    // ์‹คํ–‰

๊ตฌํ˜„ ์š”๊ตฌ ์‚ฌํ•ญ ๋ชฉ๋ก

  • ์‹œ์ž‘ํŽ˜์ด์ง€
    • ํ”„๋ฆฌ์…‹ ์ข…๋ฅ˜ ๋ณด์—ฌ์ฃผ๊ธฐ
  • ๋ฉ”์ธํŽ˜์ด์ง€
    • ์„ ํƒ๋œ ์žฅ์†Œ์˜ ๋‚ ์”จ ๋ฐ ์ฒœ๋ฌธ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
    • ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ˆœ์„œ ๋ณ€๊ฒฝ
    • ์ฃผ์†Œ์ฐพ๊ธฐ
      • ์›ํ•˜๋Š” ์ฃผ์†Œ ๊ฒ€์ƒ‰
      • ์ฃผ์†Œ์— ํ•ด๋‹นํ•˜๋Š” ์œ„๊ฒฝ๋„ ๊ฐ€์ ธ์˜ค๊ธฐ
  • ์„ค์ •ํŽ˜์ด์ง€
    • ๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ์œผ๋กœ ์ˆœ์„œ ๋ณ€๊ฒฝ
    • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ƒ‰์ƒ ๋ณ€๊ฒฝ
    • ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€, ์‚ญ์ œ

์‚ฌ์šฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค๋ช…

  • React
  • Next.js
    • ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…
    • image ์ตœ์ ํ™”
    • vercel ๋ฐฐํฌ ์—ฐ๋™
  • React-Query : ์„œ๋ฒ„ ์ƒํƒœ๊ด€๋ฆฌ, ์บ์‹œ ์ฒ˜๋ฆฌ
  • react-beautiful-dnd : ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๊ธฐ๋Šฅ
  • Recoil : ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๊ด€๋ฆฌ ๋ฐ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ์ €์žฅ
  • TypeScript : ์ •์ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ
  • Naver Map API : ์ฃผ์†Œ๊ฒ€์ƒ‰ ๋ฐ ํ•ด๋‹น ์ฃผ์†Œ์˜ ์œ„๊ฒฝ๋„ ๊ฐ€์ ธ์˜ค๊ธฐ
  • styled-components : CSS in JS, ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ CSS๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

ํด๋” ๊ตฌ์กฐ ์„ค๋ช…

  • public : ์ •์  ํŒŒ์ผ(์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ๋“ฑ) ๊ด€๋ฆฌ

  • src/components : ๊ธฐ๋Šฅ๋ณ„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ

  • src/hooks : ์ฃผ์†Œ๊ด€๋ จ ํ›…

  • src/lib : ์ƒํƒœ, ํƒ€์ž…, ์œ ํ‹ธ, ์ƒ์ˆ˜ ๊ด€๋ฆฌ

  • src/pages : ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ๋ฐ ์‹œ์ž‘ํŽ˜์ด์ง€

  • src/pages/main : ๋ฉ”์ธํŽ˜์ด์ง€(์นดํ…Œ๊ณ ๋ฆฌ ๋ณด์—ฌ์ฃผ๊ธฐ, ์ˆœ์„œ ๋ณ€๊ฒฝ)

  • src/pages/setup : ์„ค์ •ํŽ˜์ด์ง€(์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ ๋ฐ ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ์ˆœ์„œ ๋ณ€๊ฒฝ)

  • src/pages/api : API ๊ด€๋ฆฌ

  • src/styles : ์ „์—ญ ์Šคํƒ€์ผ ์ •์˜

    ๐Ÿ“ฆpublic
    ๐Ÿ“ฆsrc
    โ”ฃ ๐Ÿ“‚components
    โ”ƒ โ”ฃ ๐Ÿ“‚common
    โ”ƒ โ”ฃ ๐Ÿ“‚location
    โ”ƒ โ”ฃ ๐Ÿ“‚main
    โ”ƒ โ”ฃ ๐Ÿ“‚preset
    โ”ƒ โ”— ๐Ÿ“‚setup
    โ”ฃ ๐Ÿ“‚hooks
    โ”ฃ ๐Ÿ“‚lib
    โ”ƒ โ”ฃ ๐Ÿ“‚constants
    โ”ƒ โ”ฃ ๐Ÿ“‚store
    โ”ƒ โ”ฃ ๐Ÿ“‚types
    โ”ƒ โ”— ๐Ÿ“‚utils
    โ”ฃ ๐Ÿ“‚pages
    โ”ƒ โ”ฃ ๐Ÿ“‚api
    โ”ƒ โ”ฃ ๐Ÿ“‚main
    โ”ƒ โ”ฃ ๐Ÿ“‚setup
    โ”ƒ โ”ฃ ๐Ÿ“œindex.tsx
    โ”ƒ โ”ฃ ๐Ÿ“œ_app.tsx
    โ”ƒ โ”— ๐Ÿ“œ_document.tsx
    โ”— ๐Ÿ“‚styles

๊ณผ์ œ ์ง„ํ–‰ ์‹œ ์ฃผ์•ˆ์  ์ž‘์„ฑ

  • API ๋™์‹œ์— 2๊ฐœ ํ˜ธ์ถœ
    • ์ฒ˜์Œ์—๋Š” API fetch๋ฅผ ๊ฐ๊ฐ ์ฒ˜๋ฆฌ, ๊ทธ ํ›„ Promise.all๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ฐ€ useQueries๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๊ตฌํ˜„
      • ๋™์ผํ•œ ์š”์ฒญ์€ ์บ์‹œ ์ฒ˜๋ฆฌ๋˜์–ด ์‹ค์ œ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์—ˆ์Œ
      • API ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์†Œ์š”์‹œ๊ฐ„์„ ์ตœ์†Œํ™”
      • useQuery์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ(isLoading, isError ๋“ฑ)๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์ข‹์Œ

ํ•œ๊ณ„์  ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ ์ž‘์„ฑ

  • ํ•œ๊ณ„์ 

    • ์นดํ…Œ๊ณ ๋ฆฌ ์‚ฌ์ด์ฆˆ ๋‹ค์–‘ํ™” ๋ฏธ๊ตฌํ˜„
    • ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ
      • ์ฒ˜์Œ์—๋Š” ์•„ํ† ๋ฏน ๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋‚˜ ๊ฐ ํด๋”๋ณ„ ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„์ด ์–ด๋ ค์›Œ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ„์—ˆ์Œ
    • Next.js์˜ SSG, SSR ๋ฏธ์‚ฌ์šฉ
  • ํ–ฅํ›„ ๋„ฃ๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ

    • ํ˜„์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ
    • ๋‹ค๋ฅธ API๋กœ ์ •๋ณด ์ถ”๊ฐ€(๋ฏธ์„ธ๋จผ์ง€ ๋“ฑ)
    • suspense ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

ํ›„๊ธฐ

  • ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ƒ๊ฐํ–ˆ๋˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์™„๋ฃŒํ–ˆ๊ณ , ์‹ค์ œ๋กœ ๋‚ ์”จ ๋ณผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ–ˆ์Œ
  • ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌ๋Š” ๋ชปํ•ด๋ดค์œผ๋‚˜ OPEN API(๊ณต๊ณต๋ฐ์ดํ„ฐ)์˜ 2023๋…„ ์œ„๊ฒฝ๋„ ์œ„์น˜์— ๋Œ€ํ•œ ์žฅ์†Œ๋ฅผ ์ž˜๋ชป ๊ฐ€์ ธ์˜ค๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌ, ์ œ๋ณดํ•˜์—ฌ ๊ณต๊ณต๋ฐ์ดํ„ฐ ๊ธฐ๊ด€์—์„œ ์ˆ˜์ •ํ•ด ์คŒ