π νλ‘μ νΈμ λνμ¬
< νλ‘μ νΈ κ°μ >
μμ¦ ν«ν μ€κ³ κ±°λ μ¬μ΄νΈμΈ λΉκ·Όλ§μΌμ λ³Έλ° [ ZOOPZOOP ]μ΄λΌλ μ€κ³ κ±°λ μ¬μ΄νΈλ₯Ό μ μ.
μ€μ€μ΄λΌλ μ΄λ¦μ μλ―Έλ κ²μμμ μμ΄λμ΄λ₯Ό μ»μλ€. μ’μ νΉμ νμν(λλ‘λ 무λ£μ) μμ΄ν μ λ°κ²¬νκ³ λ΄ μΈλ²€ν 리μ λ£μ λ μ¬μ©νλ "μ€μ€νλ€"λΌλ ννμ΄ κΈ°νν νλ‘μ νΈμ 컨μ κ³Ό μ λ§μ μΉμ¬μ΄νΈ μ΄λ¦μ [ ZOOPZOOP ]μΌλ‘ κ²°μ νλ€.
< νλ‘μ νΈ κΈ°κ° >
2023λ 4μ 9μΌ ~ 2023λ 6μ 8μΌ ( μ΄ 2λ¬ )
< νλ‘μ νΈ κΉνλΈ >
GitHub - Frontend-TEAM1/ZoopzoopMarket: FrontEnd_team1 Final Project
FrontEnd_team1 Final Project. Contribute to Frontend-TEAM1/ZoopzoopMarket development by creating an account on GitHub.
github.com
< νλ‘μ νΈ λ°°ν¬ μ¬μ΄νΈ >
zoop-zoop market
zoopzoop-market.vercel.app
< νμ μκ° >
νλ‘ νΈμλ κ°λ°μ 6λͺ κ³Ό ν¨κ» νλ‘μ νΈλ₯Ό μ§ν.
< νλ ₯ ν΄ >
vsCode λ΄μ prettierμ esLint, huskyλ₯Ό μ μ©μμΌ μ½λ 컨벀μ μ μ©.
κΈ°ν λ¨κ³μμ Figmaλ₯Ό ν΅ν νμ λ° νμ .
Notionμ λ€μν κΈ°λ₯μ μ΄μ©ν λ¬Έμν λ° μΉΈλ°λ³΄λ μ§ν.
β¨ μ¬μ© κΈ°μ μ€ν
< MAIN > | < CSS > |
JavaScript, React | styled-components, media-query(λ°μν) |
< Library > | |
react-query, axios, react-router, recoil, react-hook-form, kakao map, slick-slider, socket.io,dayjs, framer-motion, mui, recharts |
리μ‘νΈλ₯Ό μ¬μ©ν μ΄μ ?
μκ² μ»΄ν¬λνΈ λ¨μλ‘ μ μ§λ³΄μνλ©΄ λλ μ μ΄ κ°μ₯ μ’μκ³ , λλλ§ μ΅μ νλ₯Ό μν μ’μ μ΅μ μ΄λΌ μκ°νμ¬ λ¦¬μ‘νΈλ‘ νλ‘μ νΈλ₯Ό λ§λ€κ² λμλ€.
μ ν¨μ± κ²μ¬λ₯Ό react-hook-formμΌλ‘ ν μ΄μ ?
리μ‘νΈ ν νΌμ μ¬μ©νμ§ μκ³ μ ν¨μ± κ²μ¬λ₯Ό ν κ²½μ°μλ κ° μ λ ₯κ°μ stateλ‘ κ΄λ¦¬νκ² λκ³ , onChange μ΄λ²€νΈμ μ ν¨μ± κ²μ¬λ₯Ό μ€μ ν΄λλ©΄ κ³Όλν λλλ§μ μΌκΈ°νκ² λλ€. λν κΈΈμ΄μ§λ μ½λλ‘ μΈν΄ κ°λ μ±μ΄ λ¨μ΄μ§κ² λ κ²μ΄λ€.
νμ§λ§ 리μ‘νΈ ν νΌμ μ¬μ©νλ€λ©΄ μ’ λ μ§κ΄μ μ΄κ³ μΌκ΄λκ² μ½λ©μ΄ κ°λ₯ν΄μ§λ€. μ μ μ½λλ‘ ν¨μ¬ ν¨μ¨μ μ΄κ³ λλλ§ μ΅μ νλ ν μ μμ΄ λ¬λ컀λΈκ° μμμλ λΆκ΅¬νκ³ λ¦¬μ‘νΈ ν νΌμ μ¬μ©νκΈ°λ‘ νλ€.
react-queryλ₯Ό μ¬μ©ν μ΄μ ?
μνλ₯Ό κ΄λ¦¬νλ λΌμ΄λΈλ¬λ¦¬μλ redux, recoil λ± λ§μ§λ§ μΊμ± μμ λΏ μλλΌ μνλ μκΈ°μ μ΅μ νλ₯Ό ν μ μμ΄μ μ ννκ² λμλ€.
π νμ΄μ§μ λνμ¬
< νμ΄μ§ μ€λͺ > (π₯νμλ μ§μ ꡬνν νμ΄μ§)
- λλ© νμ΄μ§ : νμμ νν΄μλ§ μλΉμ€ νμ΄μ§λ‘ μ΄λμ΄ κ°λ₯νκ² κ΅¬ν
- νμκ°μ /λ‘κ·ΈμΈ νμ΄μ§ : react-hook-formμ μ¬μ©νμ¬ μ ν¨μ± κ²μ¬μ λλλ§ μ΅μ ν μ§ν π₯
- λ©μΈ νμ΄μ§ : λ‘κ·ΈμΈ ν μ²μ μ νλ νμ΄μ§
- μ€μΌλ ν€ UIλ₯Ό νμ©νμ¬ μ¬μ©μκ° λλΌλ μ§λ£¨ν¨μ μ΅μν
- slick-sliderλ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λ κΈ°λ₯ ꡬν
- κ±°λ λͺ©λ‘ λ° μμΈ κ²μ νμ΄μ§
- νλ§€μ€μΈ μμ΄ν λ€μ μ€κ³ μ 무λ£λλμΌλ‘ ꡬλΆνμ¬ νμ (νλ§€μλ£λ μμ΄ν λ€μ λ§μ΄νμ΄μ§μμ νμΈ κ°λ₯)
- μ λ ₯λ°μ ν€μλκ° ν¬ν¨λ νλ§€ μλ£ λ΄μλ€μ νκ· κ°κ²© = μμΈ (μ λͺ©, λ³Έλ¬Έ, νκ·Έμμ μΌμΉνλ λ΄μ©μΌλ‘ κ²μ)
- μμ΄ν
λ±λ‘ νμ΄μ§ π₯
- μ΄λ―Έμ§λ μ΅λ 5μ₯(첫λ²μ§Έ μ¬μ§μ΄ λνμ¬μ§), μ λͺ©, κ°κ²©, νκ·Έ, κ±°λμ₯μ, λ³Έλ¬ΈμΌλ‘ ꡬμ±
- formdataμ λ°μ΄ν°λ₯Ό μ€μ΄ axios μμ²
- λ©μΈ νμ΄μ§ λ΄ μΉ΄ν κ³ λ¦¬ κ²μκ³Ό μ°λμν€κΈ° μν νκ·Έ μ΅μ μ 곡과 μμ λ‘μ΄ νκ·Έ μ λ ₯ κ°λ₯νλλ‘ κ΅¬ν
- kakaoMap apiμ daum-post apiλ₯Ό μ΄μ©ν μ£Όμμ λ ₯μ μ§λ λκΈ°ν
- μμ΄ν
μ‘°ν(μμΈ) νμ΄μ§ (+μμ λ‘μ§, νλ§€μλ£ λ‘μ§ ν¬ν¨) π₯
- μλ²μ λ±λ‘λ μμ΄ν μ 보λ₯Ό λ°νμΌλ‘ μμΈ νμ΄μ§ ꡬν
- μμ λ²νΌμ ν¬ν¨νκ³ μμ΄ λ²νΌ ν΄λ¦μ μμ κΈ°λ₯κΉμ§ ꡬν
- νμ΄μ§ λ΄ νλ§€μλ£ λ²νΌ ν΄λ¦μ ν΄λΉ κ²μκΈμ μ±ν μ΄λ ₯μ΄ μλ μ¬μ©μ 리μ€νΈ μ€ κ΅¬λ§€μ μ μ . (리뷰 λ‘μ§κ³Ό μ°κ΄λμ΄ μμ)
- μμ΄ν
μμ νμ΄μ§ π₯
- formdataμ λ°μ΄ν°λ₯Ό μ€μ΄ axios μμ²
- μμ΄ν λ±λ‘ νμ΄μ§μ λμΌν νμ΄μ§μ κΈ°μ‘΄ λ±λ‘ν μ λ³΄κ° λ―Έλ¦¬ κΈ°μ λ νλ©΄μΌλ‘ νν
- μμ (μ λ°μ΄νΈ)μ΄ λ°μν ν, μ μ₯ λ²νΌ ν΄λ¦ μ΄λ²€νΈλ₯Ό ν΅ν λ°±μλ μλ² λ΄ μ 보 μ λ°μ΄νΈ
- κ²μ νμ΄μ§
- κ²μμ°½μ ν€μλ μ λ ₯νλ©΄ μ λͺ© / λ³Έλ¬Έ / νκ·Έμμ μΌμΉνλ λ΄μ©μΌλ‘ κ²μ κ²°κ³Ό 보μ¬μ£Όλ νλ©΄
- useInfiniteQueryλ₯Ό μ΄μ©ν 무νμ€ν¬λ‘€ μ§μ
- μ±ν
νμ΄μ§
- socket.io(websocket)λ₯Ό μ΄μ©ν μ€μκ° μ±ν κΈ°λ₯
- useContextλ₯Ό μ¬μ©νμ¬ socket μ§μ
- μ΄λ νμ΄μ§μμλ μλ‘μ΄ μ±ν μλ¦Όμ°½ νμ κΈ°λ₯
- λ§μ΄νμ΄μ§
- λ΄ λ±λ‘ν , κ°μΈμ 보 μμ , κ΄μ¬ν , κ°κ³λΆ, λ΄ νκΈ° νμΌλ‘ ꡬμ±λ νμ΄μ§
- λ΄ λ±λ‘ν κ³Ό κ΄μ¬ν : useInfiniteQueryλ₯Ό μ΄μ©ν 무νμ€ν¬λ‘€ μ§μ
- κ°μΈμ 보 μμ : react-hook-formμ μ¬μ©νμ¬ μ ν¨μ± κ²μ¬μ λλλ§ μ΅μ ν μ§ν π₯
- κ°κ³λΆ : react-calendarλ₯Ό μ¬μ©νμ¬ μλ¨μ λ΄μ©μ λ¬λ ₯μΌλ‘ νμ
- λ΄ νκΈ° : 리뷰λ₯Ό μμ±ν μ μλ(= λ΄κ° ꡬ맀μλ‘ μ§μ λ) 리μ€νΈ νμ. 리뷰 μμ±μ νμν ꡬ맀 μν μ 보λ recoilλ‘ κ΄λ¦¬νμ¬ props drilling μ΅μν π₯
- 리뷰 μμ± νμ΄μ§ π₯
- formdataμ λ°μ΄ν°λ₯Ό μ€μ΄ axios μμ²
- νλ§€μκ° μμ΄ν μμΈ νμ΄μ§μ μλ νλ§€μλ£ λ²νΌ ν΄λ¦ ν λλ₯Ό ꡬ맀μλ‘ μ§μ ν κ²½μ°μλ§ λ¦¬λ·° μμ±νκΈ°κ° νμ±ν λ¨ (λ§μ΄νμ΄μ§/λ΄ νκΈ° νμμ νμΈ κ°λ₯)
- λ§μ΄νμ΄μ§/λ΄ νκΈ° νμ κ° μΉ΄λμ μλ 리뷰 μμ±νκΈ° λ²νΌ ν΄λ¦μ 리뷰 μμ± νμ΄μ§λ‘ μ΄λ.
- μ μμ λ΄μ©, μ¬μ§ λ±λ‘κ°λ₯
- 리뷰 μ‘°ν(μμΈ) νμ΄μ§ (+μμ λ‘μ§ ν¬ν¨) π₯
- μλ²μ λ±λ‘λ 리뷰 μ 보λ₯Ό λ°νμΌλ‘ 리뷰 μμΈ νμ΄μ§ ꡬν
- μμ λ²νΌμ ν¬ν¨νκ³ μμ΄ λ²νΌ ν΄λ¦μ μμ κΈ°λ₯κΉμ§ ꡬν β‘ μμ κ° λλ©΄ λ§μ΄νμ΄μ§/λ΄ νκΈ° ν λ΄ μΉ΄λμ 리뷰 μμ±νκΈ° λ²νΌμ΄ λ€μ νμ±ν λλλ‘ κ΅¬ν
- 리뷰 μμ νμ΄μ§ π₯
- formdataμ λ°μ΄ν°λ₯Ό μ€μ΄ axios μμ²
- 리뷰 μμΈ νμ΄μ§ λ΄ μμ λ²νΌμ ν¬ν¨νκ³ μμ΄ λ²νΌ ν΄λ¦μ μμ νμ΄μ§λ‘ μ΄λ
- 리뷰 μμ± νμ΄μ§μ λμΌν νμ΄μ§μ κΈ°μ‘΄ μλ²μ μ μ₯λ νκΈ° μ λ³΄κ° λ―Έλ¦¬ κΈ°μ λ νλ©΄μΌλ‘ νν
- μμ (μ λ°μ΄νΈ)μ΄ λ°μν ν, μ μ₯ λ²νΌ ν΄λ¦ μ΄λ²€νΈλ₯Ό ν΅ν λ°±μλ μλ² λ΄ μ 보 μ λ°μ΄νΈ
< μν μμ >
π νκΈ° λ° νκ³
< μ’μλ μ >
πΉ νΌμ λλλλ κΈ°λ₯ ꡬνλ κ°μ΄ κ³ λ―Όνμ¬ λ€λ₯Έ μ κ·Όλ€μ μκ°ν΄λ΄λ 빨리 ν΄κ²°ν μ μμλ€.
πΉ κ°μ λͺ©νλ₯Ό ν₯ν΄ λ€κ°μ΄ λ Έλ ₯νλ€λ³΄λ ν μ μ΄ λ£¨μ¦ν΄μ§μ§ μμλ€.
πΉ λ΄κ° λͺ©νν κΈ°κ°κΉμ§ κ°λ°ν΄κ°μ§ μλλ€λ©΄ μΌμ΄λ μΌλ€μ μκ°νλ©° κ°λ°μ μνλ μ± μκ°μ κΈ°λ₯Ό μ μμλ€.
πΉ λ€λ₯Έ λΆλ€μκ² λ°°μΈ μ μ΄ λ§μλ€.
< μμ¬μ λ μ >
πΈ νλ‘μ νΈ κ²½νμ΄ μλ 6λͺ μ΄ λͺ¨μ΄λ€λ³΄λ μ΄λ° κΈ°νλ¨κ³μμ 2μ£Όκ° λ λΌκ°λ€. κ·Έλλ λ€νν λ°©ν₯μ±μ μ‘κ³ κ°λ° μ§ννμλ€.
πΈ λ°±μλμμ νμν λ°μ΄ν°κ° μμ κ²½μ° λ§ν΄λ¬λΌκ³ νλλ° κ·Έλ λΉμμλ μ΄λ€κ² νμνμ§ λͺ°λλ€. μ§κΈ κΈ°μ΅μΌλ‘ κ·Έλλ‘ λμκ°λ€λ©΄ μμνμ§λ§ κ½€λ λ§€λ ₯μ μΈ fieldλ₯Ό μμ²νμ κ² κ°λ€.
πΈ axiosλ‘ bodyλ headerμ λ°μ΄ν°λ₯Ό μ€μ΄λ³΄λ΄λ€κ° μ²μ formdataλ₯Ό μ¨λ΄€λλ° μ΄λ λ€μΈ μκ°λ§ μΌμ£ΌμΌμ΄μλ€.
πΈ νλ‘μ νΈ μ§νμ΄ 2λ¬μ΄ λκ°λ€λ³΄λ λ€μλ λ§μ΄ μ§μ³ 리ν©ν λ§μ μ λλ‘ νμ§ λͺ»νλ€. λ¬Όλ‘ κ°μ μΆνμ 리ν©ν λ§ ν΄λ³΄κΈ°λ‘ νκΈ΄ νμ§λ§ μμ¬μμ μ΄μ© μ μλ κ² κ°λ€.
νλ‘μ νΈλ₯Ό μ§ννλ©΄μ κ°μ₯ μ κ²½ μ΄ λΆλΆμ?
첫λ²μ§Έ ν νλ‘μ νΈλ€ 보λ μ κ²½μ μμ΄ λΆλΆμ μ°ΎκΈ°λ μ΄λ ΅λ€. νμ§λ§ κ·Έμ€μμ κ°μ₯ μ κ²½μ΄ λΆλΆμ λ¨μ° νμ λ° μμ¬μν΅μΈ κ² κ°λ€. νλ‘μ νΈκ° μ§νλλ©΄μ μ²μμ λ΄κ° λ΄λΉνλ μ»΄ν¬λνΈλ νμ΄μ§λ₯Ό λ€λ₯Έ νμμ΄ νκ³ μκ³ κ·Έ λ°λλ λΉμΌλΉμ¬νλ€. λλΆμ μΌλΆκ° μλ μ 체μ μΈ νλ‘μ νΈλ₯Ό μ μ μμ΄μ μ’μλ€.
νμ§λ§ κ°λ°μ λ°λΉ μ Έ μμ¬μν΅μ΄ μνν΄μ§ μ μ΄ μλλ° κ·Έλ main λΈλμΉμ λ¨Έμ§νλ κ³Όμ μμ μλ‘ μ€ν΄νλ μΌμ΄ μ겨μ λ€μ ν λ² μμ¬μν΅μ μνμ! λ€μ§ν μ μ΄ μλ€. π€£π€£
'Project' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Project] MOVIEμ°Ύλ₯?! νκΈ° (0) | 2023.07.02 |
---|