Skip to content

BekCodingAddict/WorldWise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

87 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

WorldWise - You travel the world.

WorldWise๋Š” React ๊ธฐ๋ฐ˜์˜ ์—ฌํ–‰ ์ถ”์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ, ์„ธ๊ณ„ ์—ฌํ–‰์„ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐฉ๋ฌธํ•œ ๊ตญ๊ฐ€, ๋„์‹œ ๋ชฉ๋ก, ์—ฌํ–‰ ์ •๋ณด ๋ฐ ๋ฉ”๋ชจ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

1.์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ง€๋„ ํ†ตํ•ฉ

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

2.์—ฌํ–‰ ํ†ต๊ณ„

  • ๋ฐฉ๋ฌธํ•œ ๊ตญ๊ฐ€ ์ˆ˜, ๋„์‹œ ๋ชฉ๋ก, ์—ฌํ–‰ ์žฅ์  ๋ฐ ํŠน์ • ๋„์‹œ์™€ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ์™€ ์ •๋ณด ๋งํฌ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋งž์ถคํ˜• ์—ฌํ–‰ ๊ธฐ๋ก

  • ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌํ–‰์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋‚ ์งœ, ๋ชฉ์ ์ง€, ์—ฌํ–‰ ๋ฉ”๋ชจ).

๋ฐ˜์‘ํ˜• ๋””์ž์ธ

  • ๋ฐ์Šคํฌํ†ฑ ๋ฐ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ

  • feature/v-1.0.0: ์ด ๋ฒ„์ „์—์„œ๋Š” ์ฃผ๋กœ Context API๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • feature/v-2.0.0: ์ด ๋ฒ„์ „์—์„œ๋Š” ReactQuery/TanStack์„ ์‚ฌ์šฉํ•ด ๋ชจ๋“  UI ์ƒํƒœ๋ฅผ ์›๊ฒฉ ์ƒํƒœ๋กœ ์ „ํ™˜ํ–ˆ์œผ๋ฉฐ, ์ผ๋ถ€ ๊ธ€๋กœ๋ฒŒ UI ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด React Redux Toolkit์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ธฐ์ˆ 

  • ํ”„๋ก ํŠธ์—”๋“œ: [React,Vite,React Leaflet,React Router DOM, Date Picker,React Toast,JavaScript,HTML,CSS ๋ชจ๋“ˆ]
  • ์ง€๋„ ๋„๊ตฌ: [Leaflet.js๋ฅผ ์‚ฌ์šฉํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ง€๋„ ๊ตฌํ˜„]
  • ์ƒํƒœ ๊ด€๋ฆฌ: [Context API ๋ฐ Redux/Toolkit๋ฅผ ํ™œ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๊ด€๋ฆฌ]
  • ๋ฐ์ดํ„ฐ ์ €์žฅ:
    • feature/v-1.0.0: [์ง€์†์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด ๋กœ์ปฌ ์ €์žฅ์†Œ ๋˜๋Š” JSON ์„œ๋ฒ„ ์‚ฌ์šฉ]
    • feature/v-2.0.0: [MongoDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ์‚ฌ์šฉ]

๊ฐœ์ธ ๊ธฐ์—ฌ ์‚ฌํ•ญ

1.ํ–ฅ์ƒ๋œ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ

  • ํƒœ๋ธ”๋ฆฟ๊ณผ ์†Œํ˜• ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ™”๋ฉด ํฌ๊ธฐ์—์„œ ์ตœ์ ํ™”๋œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋„๋ก ์•ฑ์˜ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ๋” ๋‚˜์€ ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ๋ ˆ์ด์•„์›ƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • feature/v-1.0.0 ๋ฐ feature/v-2.0.0 ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.๋ฐฑ์—”๋“œ ํ†ตํ•ฉ

  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋ฐ ์—ฌํ–‰ ๊ธฐ๋ก ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Node.js์™€ Express.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • MongoDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌํ–‰ ์„ธ๋ถ€ ์ •๋ณด์™€ ํ†ต๊ณ„๋ฅผ ์ง€์†์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ์ธ ๊ณ„์ •๊ณผ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Bcrypt.js ๋ฐ JSONwebtoken์„ ํ™œ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ReactQuery/TanStack์„ ์‚ฌ์šฉํ•ด ์›๊ฒฉ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ–ˆ์œผ๋ฉฐ, UI ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด React Redux Toolkit์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ป์€ ์„ฑ๊ณผ์™€ ๋ฐฐ์šด ์ :

์„ฑ๊ณผ:

1.์ง€๋„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ตฌํ˜„

  • GeoJSON ๋ฐ ์ง€๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Leaflet.js ํ™œ์šฉํ•˜์—ฌ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ง€๋„ ์‹œ๊ฐํ™”๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๊ตญ๊ฐ€์™€ ๋„์‹œ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ.

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„ ๊ธฐ์ˆ  ๊ฐ•ํ™”

  • MongoDB๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(๋ฐฉ๋ฌธ ๊ตญ๊ฐ€, ๋„์‹œ, ์—ฌํ–‰ ๊ธฐ๋ก ๋“ฑ)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰.
  • ์—ฌํ–‰ ํ†ต๊ณ„(๋ฐฉ๋ฌธ ๊ตญ๊ฐ€ ์ˆ˜, ๊ฑฐ๋ฆฌ, ์—ฌํ–‰ ์ผ์ˆ˜,๊ฐœ์ธ ๋…ธํŠธ ๋“ฑ)๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”.

๋ฐ˜์‘ํ˜• ๋””์ž์ธ

  • CSS Module ๋ฐ React๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜์‘ํ˜• UI๋ฅผ ๊ฐœ์ธ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ์ตœ์ ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต

๋ฐฐ์šด ์ :

1.ํ’€์Šคํƒ ๊ฐœ๋ฐœ ๊ณผ์ •์— ๋Œ€ํ•œ ์ข…ํ•ฉ์  ์ดํ•ด

  • ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ์—ญํ• ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ๊นŠ์ด ์ดํ•ดํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ์˜ ์ค‘์š”์„ฑ์„ ํ•™์Šต.
  • RESTful API ์„ค๊ณ„ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• ์Šต๋“.

2.์ง€๋„ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

  • GeoJSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„ ์ƒ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋ฐฐ์›€.
  • ์ง€๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ™œ์šฉ๋ฒ•๊ณผ ์ง€๋„ ์ƒ์˜ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ธฐ๋ฒ• ํ•™์Šต.

3.๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”

  • MongoDB์—์„œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์™€ ์ธ๋ฑ์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์Šต๋“.
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ  ํ–ฅ์ƒ.

4.์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

  • ์ง๊ด€์ ์ด๊ณ  ๋ฐ˜์‘ํ˜•์ธ UI/UX ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ๊ธฐ์ˆ ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์—…๊ทธ๋ž˜์ดํŠธ ํ•˜๋ฉด์„œ ๊ฒฝํ—˜ ํ•œ ๊ฒƒ.

5.๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋””๋ฒ„๊น… ์—ญ๋Ÿ‰ ๊ฐ•ํ™”

  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฐ ์„ฑ๋Šฅ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๋””๋ฒ„๊น… ๊ธฐ์ˆ  ํ–ฅ์ƒ.

๋ธŒ๋žœ์น˜๋ณ„ ๋ฒ„์ „

1.feature/v-1.0.0

  • ์ด ํ”„๋กœ์ ํŠธ๋Š” Jonas Schmedtmann์˜ Udemy ๊ฐ•์ขŒ, The Ultimate React Course๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™์Šต ๋ฐ ๊ฐœ์„  ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๊ฐ•์ขŒ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ๋งŒ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ feature/v-1.0.0 ๋ธŒ๋žœ์น˜์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ 1์€ ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ๊ฐœ์ธ ๊ธฐ์—ฌ ์‚ฌํ•ญ์ธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์ด ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2.feature/v-2.0.0

  • ๋ฒ„์ „ 2์—์„œ๋Š” ๋ฐฑ์—”๋“œ ํ†ตํ•ฉ์ด ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ์ฃผ์š” ๊ธฐ๋Šฅ์€ ReactQuery/TanStack๊ณผ React Redux Toolkit์„ ์‚ฌ์šฉํ•ด ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

UI Screenshots

Errors:

1.React Query States are Frist render undefined

This is my custom hook. Here data is initially undefined.

export function useCities2() {
  const {
    isLoading,
    data, ///data is initially undefined.
    error,
  } = useQuery({
    queryKey: ["cities"],
    queryFn: getCities,
    refetchOnMount: true,
  });
  console.log(data);

  return { isLoading, error, data };
}

So if we want to use like

  const { data } = useCities2(); // Frist render data undefined so error is occoured 
  const { cities } = data; //

Tip

Solution:

const {
    isLoading,
    data = {},
    error,
  } = useQuery({
    queryKey: ["cities"],
    queryFn: getCities,
    refetchOnMount: true,
  });

UI/UX

WorldWiseMobile

Home: WorldWise

About: WorldWise-About

City: WorldWise-City

Countries: WorldWise-Countries

Save City: WorldWise-SaveCity

ํ–ฅํ›„ ๊ณ„ํš

1์ถ”๊ฐ€ ๊ธฐ๋Šฅ

  • ์—ฐ๋„, ๊ตญ๊ฐ€ ๋˜๋Š” ์—ฌํ–‰ ์œ ํ˜•๋ณ„๋กœ ์—ฌํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ณ ๊ธ‰ ํ•„ํ„ฐ๋ง ์˜ต์…˜ ์ถ”๊ฐ€
  • ๋ฐฉ๋ฌธ ์žฅ์†Œ์˜ ํžˆํŠธ๋งต๊ณผ ๊ฐ™์€ ์—ฌํ–‰ ํ–‰๋™ ๋ถ„์„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • AWS EC3๋ฅผ ํ†ตํ•ฉํ•ด ๋ฐฑ์—”๋“œ ์‹ ๋ขฐ์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ๊ฐœ์„ 

๊ธฐ๋Œ€ ํšจ๊ณผ ๋ฐ ์ž๊ธฐ ์„ฑ์žฅ

  • ์—ฌํ–‰ ๊ธฐ๋ก ๋ฐ ์‹œ๊ฐํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์•ฑ ๊ฐœ๋ฐœ์„ ํ†ตํ•ด ์‹ค๋ฌด์™€ ์œ ์‚ฌํ•œ ๊ฒฝํ—˜์„ ์ถ•์ .
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์„ ์Šต๋“ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์ž์‹ ๊ฐ์„ ์–ป์Œ.
  • ์‚ฌ์šฉ์ž์˜ ๋‹ˆ์ฆˆ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์—ญ๋Ÿ‰ ๊ฐ•ํ™”.

About

Worldwise Travel Tracking is a travel management platform that provides organizations and individuals with tools to track travel itineraries and ensure traveler safety

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors